diff options
Diffstat (limited to 'backend/tests/eol')
| -rw-r--r-- | backend/tests/eol/__init__.py | 0 | ||||
| -rw-r--r-- | backend/tests/eol/test_download_imgs.py | 74 | ||||
| -rw-r--r-- | backend/tests/eol/test_gen_images_list_db.py | 32 | ||||
| -rw-r--r-- | backend/tests/eol/test_review_imgs.py | 46 |
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'}) |
