aboutsummaryrefslogtreecommitdiff
path: root/backend/tests/eol
diff options
context:
space:
mode:
Diffstat (limited to 'backend/tests/eol')
-rw-r--r--backend/tests/eol/__init__.py0
-rw-r--r--backend/tests/eol/test_download_imgs.py74
-rw-r--r--backend/tests/eol/test_gen_images_list_db.py32
-rw-r--r--backend/tests/eol/test_review_imgs.py46
4 files changed, 152 insertions, 0 deletions
diff --git a/backend/tests/eol/__init__.py b/backend/tests/eol/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/backend/tests/eol/__init__.py
diff --git a/backend/tests/eol/test_download_imgs.py b/backend/tests/eol/test_download_imgs.py
new file mode 100644
index 0000000..975d1c7
--- /dev/null
+++ b/backend/tests/eol/test_download_imgs.py
@@ -0,0 +1,74 @@
+import unittest
+from unittest.mock import Mock, patch
+import tempfile, os
+
+from tests.common import readTestFile, createTestDbTable
+from tol_data.eol.download_imgs import getEolIdsFromDb, downloadImgs
+
+class TestGetEolIdsFromDb(unittest.TestCase):
+ def test_get(self):
+ with tempfile.TemporaryDirectory() as tempDir:
+ # Create temp db
+ dbFile = os.path.join(tempDir, 'data.db')
+ createTestDbTable(
+ dbFile,
+ 'CREATE TABLE eol_ids (name TEXT PRIMARY KEY, id INT)',
+ 'INSERT INTO eol_ids VALUES (?, ?)',
+ {
+ ('one', 1),
+ ('a second', 2),
+ }
+ )
+ # Run
+ eolIds = getEolIdsFromDb(dbFile)
+ # Check
+ self.assertEqual(eolIds, {1, 2})
+
+class TestDownloadImgs(unittest.TestCase):
+ @patch('requests.get', autospec=True)
+ def test_gen(self, requestsGetMock):
+ requestsGetMock.side_effect = lambda url: Mock(content=('img:' + url).encode())
+ with tempfile.TemporaryDirectory() as tempDir:
+ eolIds = {1, 2, 4}
+ # Create temp images-list db
+ imagesListDb = os.path.join(tempDir, 'images_list.db')
+ createTestDbTable(
+ imagesListDb,
+ 'CREATE TABLE images (content_id INT PRIMARY KEY, page_id INT, source_url TEXT,' \
+ ' copy_url TEXT, license TEXT, copyright_owner TEXT)',
+ 'INSERT INTO images VALUES (?, ?, ?, ?, ?, ?)',
+ {
+ (10, 1, '???', 'https://content.eol.org/1.jpg', 'cc-by-sa', 'owner1'),
+ (20, 2, '', 'https://content.eol.org/2.jpg', 'cc-by', 'owner2'),
+ (21, 2, '', 'https://content.eol.org/2b.jpg', 'public domain', 'owner2'),
+ (22, 2, '', 'https://content.eol.org/2c.jpg', '???', 'owner3'),
+ (23, 2, '', 'data/2d.jpg', 'cc-by-nc', 'owner5'),
+ (24, 2, '', 'https://content.eol.org/2e', 'cc-by', 'owner6'),
+ (25, 2, '', 'https://content.eol.org/2f.gif', 'cc-by', 'owner7'),
+ (30, 3, '', 'https://content.eol.org/3.png', 'cc-by', 'owner3'),
+ }
+ )
+ # Create temp output dir
+ with tempfile.TemporaryDirectory() as outDir:
+ # Run
+ downloadImgs(eolIds, imagesListDb, outDir)
+ # Check
+ expectedImgs1 = {
+ '1 10.jpg': 'img:https://content.eol.org/1.jpg',
+ '2 20.jpg': 'img:https://content.eol.org/2.jpg',
+ '2 23.jpg': 'img:https://content.eol.org/data/2d.jpg',
+ '2 25.gif': 'img:https://content.eol.org/2f.gif',
+ }
+ expectedImgs2 = {
+ '1 10.jpg': 'img:https://content.eol.org/1.jpg',
+ '2 21.jpg': 'img:https://content.eol.org/2b.jpg',
+ '2 23.jpg': 'img:https://content.eol.org/data/2d.jpg',
+ '2 25.gif': 'img:https://content.eol.org/2f.gif',
+ }
+ outImgSet = set(os.listdir(outDir))
+ expectedImgSet1 = set(expectedImgs1.keys())
+ expectedImgSet2 = set(expectedImgs2.keys())
+ self.assertIn(outImgSet, (expectedImgSet1, expectedImgSet2))
+ matchingImgs = expectedImgs1 if outImgSet == expectedImgSet1 else expectedImgs2
+ for imgName, imgContent in matchingImgs.items():
+ self.assertEqual(readTestFile(os.path.join(outDir, imgName)), imgContent)
diff --git a/backend/tests/eol/test_gen_images_list_db.py b/backend/tests/eol/test_gen_images_list_db.py
new file mode 100644
index 0000000..ca9b495
--- /dev/null
+++ b/backend/tests/eol/test_gen_images_list_db.py
@@ -0,0 +1,32 @@
+import unittest
+import tempfile, os
+
+from tests.common import createTestFile, readTestDbTable
+from tol_data.eol.gen_images_list_db import genData
+
+class TestGenData(unittest.TestCase):
+ def test_gen(self):
+ with tempfile.TemporaryDirectory() as tempDir:
+ # Create temp images-list files
+ imageListsGlob = os.path.join(tempDir, 'imgs-*.csv')
+ createTestFile(os.path.join(tempDir, 'imgs-1.csv'), (
+ 'EOL content ID,EOL page ID,Medium Source URL,EOL Full-Size Copy URL,License Name,Copyright Owner\n'
+ '1,10,https://example.com/1/,https://content.eol.org/1.jpg,cc-by,owner1\n'
+ '2,20,https://example2.com/2/,https://content.eol.org/2.jpg,cc-by-sa,owner2\n'
+ ))
+ createTestFile(os.path.join(tempDir, 'imgs-2.csv'), (
+ '3,30,https://example.com/3/,https://content.eol.org/3.png,public,owner3\n'
+ ))
+ # Run
+ dbFile = os.path.join(tempDir, 'imagesList.db')
+ genData(imageListsGlob, dbFile)
+ # Check
+ self.assertEqual(
+ readTestDbTable(
+ dbFile, 'SELECT content_id, page_id, source_url, copy_url, license, copyright_owner from images'),
+ {
+ (1, 10, 'https://example.com/1/', 'https://content.eol.org/1.jpg', 'cc-by', 'owner1'),
+ (2, 20, 'https://example2.com/2/', 'https://content.eol.org/2.jpg', 'cc-by-sa', 'owner2'),
+ (3, 30, 'https://example.com/3/', 'https://content.eol.org/3.png', 'public', 'owner3'),
+ }
+ )
diff --git a/backend/tests/eol/test_review_imgs.py b/backend/tests/eol/test_review_imgs.py
new file mode 100644
index 0000000..49c09bb
--- /dev/null
+++ b/backend/tests/eol/test_review_imgs.py
@@ -0,0 +1,46 @@
+import unittest
+import tempfile, os, shutil
+
+from tests.common import createTestDbTable
+from tol_data.eol.review_imgs import reviewImgs
+
+CLICK_IMG = os.path.join(os.path.dirname(__file__), '..', 'green.png')
+AVOID_IMG = os.path.join(os.path.dirname(__file__), '..', 'red.png')
+
+class TestReviewImgs(unittest.TestCase):
+ def test_review(self):
+ with tempfile.TemporaryDirectory() as tempDir:
+ # Create input images
+ imgDir = os.path.join(tempDir, 'imgs_for_review')
+ os.mkdir(imgDir)
+ shutil.copy(CLICK_IMG, os.path.join(imgDir, '1 10.jpg'))
+ shutil.copy(CLICK_IMG, os.path.join(imgDir, '2 20.jpeg'))
+ shutil.copy(AVOID_IMG, os.path.join(imgDir, '2 21.gif'))
+ shutil.copy(AVOID_IMG, os.path.join(imgDir, '2 22.jpg'))
+ shutil.copy(AVOID_IMG, os.path.join(imgDir, '3 30.png'))
+ shutil.copy(AVOID_IMG, os.path.join(imgDir, '3 31.jpg'))
+ # Create temp extra-info db
+ extraInfoDb = os.path.join(tempDir, 'data.db')
+ createTestDbTable(
+ extraInfoDb,
+ 'CREATE TABLE eol_ids (name TEXT PRIMARY KEY, id INT)',
+ 'INSERT INTO eol_ids VALUES (?, ?)',
+ {
+ ('one', 1),
+ ('two', 2),
+ ('three', 3),
+ }
+ )
+ createTestDbTable(
+ extraInfoDb,
+ 'CREATE TABLE names(name TEXT, alt_name TEXT, pref_alt INT, src TEXT, PRIMARY KEY(name, alt_name))',
+ 'INSERT OR IGNORE INTO names VALUES (?, ?, ?, ?)',
+ {
+ ('two','II',1,'eol'),
+ }
+ )
+ # Run
+ outDir = os.path.join(tempDir, 'imgs')
+ reviewImgs(imgDir, outDir, extraInfoDb)
+ # Check
+ self.assertEqual(set(os.listdir(outDir)), {'1 10.jpg', '2 20.jpeg'})