From 48076350d3b9a23fe79976bb5e17ca06bce10448 Mon Sep 17 00:00:00 2001 From: sandra0521 <39565761+sandra0521@users.noreply.github.com> Date: Tue, 30 Apr 2019 19:51:07 +0200 Subject: [PATCH] STCC-180 Reimplement test_can_request_project_info_for_id (#123) --- config/default.ini | 2 +- .../scratch/scratchwebapi.py | 22 ++-- .../scratch/test_scratchwebapi.py | 105 +++++------------- 3 files changed, 35 insertions(+), 94 deletions(-) diff --git a/config/default.ini b/config/default.ini index f3966f4a..4976e115 100755 --- a/config/default.ini +++ b/config/default.ini @@ -4,7 +4,7 @@ name: Scratch2Catrobat Converter short_name: S2CC version: 0.10.0 build_name: Aegean cat -build_number: 984 +build_number: 985 ;------------------------------------------------------------------------------- [CATROBAT] diff --git a/src/scratchtocatrobat/scratch/scratchwebapi.py b/src/scratchtocatrobat/scratch/scratchwebapi.py index 96d13af6..a66c8383 100644 --- a/src/scratchtocatrobat/scratch/scratchwebapi.py +++ b/src/scratchtocatrobat/scratch/scratchwebapi.py @@ -274,29 +274,23 @@ def extract_project_details(project_id, escape_quotes=True): extracted_text = getMetaDataEntry(project_id , "history") extracted_text = extracted_text["modified"] - if extracted_text is None: return None - modified_date_str = unicode(extracted_text).replace("Modified:", "").replace("Z","000").strip() - try: - modified_date = datetime.strptime(modified_date_str, "%Y-%m-%dT%H:%M:%S.%f") - except: - modified_date = None + modified_date = convertHistoryDatesToDatetime(extracted_text) extracted_text = getMetaDataEntry(project_id , "history") extracted_text = extracted_text["shared"] - if extracted_text is None: return None - shared_date_str = unicode(extracted_text).replace("Shared:", "").replace("Z","000").strip() - try: - shared_date = datetime.strptime(shared_date_str, "%Y-%m-%dT%H:%M:%S.%f") - except: - shared_date = None + shared_date = convertHistoryDatesToDatetime(extracted_text) return ScratchProjectInfo(title = title, owner = owner, image_url = image_url, instructions = instructions, notes_and_credits = notes_and_credits, tags = remixes, views = views, favorites = favorites, loves = loves, modified_date = modified_date, shared_date = shared_date) - - +def convertHistoryDatesToDatetime(data): + try: + datestring = unicode(data).replace("Z","000").strip() + return datetime.strptime(datestring, "%Y-%m-%dT%H:%M:%S.%f") + except: + return None def getMetaDataEntry(projectID, *entryKey): try: diff --git a/src/scratchtocatrobat/scratch/test_scratchwebapi.py b/src/scratchtocatrobat/scratch/test_scratchwebapi.py index 47529f8e..6b5bb5ec 100644 --- a/src/scratchtocatrobat/scratch/test_scratchwebapi.py +++ b/src/scratchtocatrobat/scratch/test_scratchwebapi.py @@ -36,10 +36,10 @@ } TEST_PROJECT_ID_TO_IMAGE_URL_MAP = { - "10205819": "https://uploads.scratch.mit.edu/projects/thumbnails/10205819.png", - "10132588": "https://uploads.scratch.mit.edu/projects/thumbnails/10132588.png", - "2365565" : "https://uploads.scratch.mit.edu/projects/thumbnails/2365565.png", - "117300839": "https://uploads.scratch.mit.edu/projects/thumbnails/117300839.png" + "10205819": "https://cdn2.scratch.mit.edu/get_image/project/10205819_480x360.png", + "10132588": "https://cdn2.scratch.mit.edu/get_image/project/10132588_480x360.png", + "2365565" : "https://cdn2.scratch.mit.edu/get_image/project/2365565_480x360.png", + "117300839": "https://cdn2.scratch.mit.edu/get_image/project/117300839_480x360.png" } TEST_PROJECT_ID_TO_OWNER_MAP = { @@ -245,13 +245,6 @@ }] } -TEST_PROJECT_ID_TO_TAGS_MAP = { - "10205819": ['animations', 'castle'], - "10132588": ['music', 'simulations', 'animations'], - "2365565" : [], - "117300839": [] -} - TEST_PROJECT_ID_TO_INSTRUCTIONS_MAP = { "10205819": "Click the flag to run the stack. Click the space bar to change it up!", "10132588": "D,4,8 for the animals to move.C,A for background. ", @@ -297,40 +290,6 @@ def test_can_request_project_code_for_id(self): raw_project = scratch.RawProject.from_project_code_content(project_code_content) assert raw_project is not None - def test_can_request_project_title_for_id(self): - for (project_id, expected_project_title) in TEST_PROJECT_ID_TO_TITLE_MAP.iteritems(): - extracted_project_title = scratchwebapi.getMetaDataEntry(project_id, 'title') - assert extracted_project_title is not None - assert extracted_project_title == expected_project_title, \ - "'{}' is not equal to '{}'".format(extracted_project_title, expected_project_title) - - def test_can_request_project_title_and_image_for_id(self): - extracted_project_title, image = scratchwebapi.getMetaDataEntry(10205819, "title", "image") - assert extracted_project_title == "Dancin' in the Castle" - assert image == "https://cdn2.scratch.mit.edu/get_image/project/10205819_480x360.png" - - def test_can_request_project_owner_for_id(self): - for (project_id, expected_project_owner) in TEST_PROJECT_ID_TO_OWNER_MAP.iteritems(): - extracted_project_owner = scratchwebapi.getMetaDataEntry(project_id, 'username') - - assert extracted_project_owner is not None - assert extracted_project_owner == expected_project_owner, \ - "'{}' is not equal to '{}'".format(extracted_project_owner, expected_project_owner) - - def test_can_request_project_instructions_for_id(self): - for (project_id, expected_project_instructions) in TEST_PROJECT_ID_TO_INSTRUCTIONS_MAP.iteritems(): - extracted_project_instructions = scratchwebapi.getMetaDataEntry(project_id, 'instructions') - assert extracted_project_instructions== expected_project_instructions, \ - "'{}' is not equal to '{}'".format(extracted_project_instructions, expected_project_instructions) - - def test_can_request_project_notes_and_credits_for_id(self): - for (project_id, expected_project_notes_and_credits) in TEST_PROJECT_ID_TO_NOTES_AND_CREDITS_MAP.iteritems(): - extracted_project_notes_and_credits = scratchwebapi.getMetaDataEntry(project_id, 'description') - assert extracted_project_notes_and_credits is not None - assert extracted_project_notes_and_credits == expected_project_notes_and_credits, \ - "'{}' is not equal to '{}'".format(extracted_project_notes_and_credits, - expected_project_notes_and_credits) - def test_can_request_remixes_for_id(self): for (project_id, expected_project_remixes) in TEST_PROJECT_ID_TO_REMIXES_MAP.iteritems(): extracted_project_remixes = scratchwebapi.request_project_remixes_for(project_id) @@ -345,40 +304,28 @@ def test_extract_project_details(self): assert details.as_dict()["modified_date"] != None assert details.as_dict()["shared_date"] != None -# def test_can_request_project_info_for_id(self): - # for (project_id, expected_project_title) in TEST_PROJECT_ID_TO_TITLE_MAP.iteritems(): - # extracted_project_info = scratchwebapi.request_project_details_for(project_id) - # assert extracted_project_info is not None - # assert isinstance(extracted_project_info, scratchwebapi.ScratchProjectInfo) - # assert extracted_project_info.title is not None - # assert extracted_project_info.title == expected_project_title, \ - # "'{}' is not equal to '{}'".format(extracted_project_info.title, expected_project_title) - # assert extracted_project_info.owner is not None - # assert extracted_project_info.owner == TEST_PROJECT_ID_TO_OWNER_MAP[project_id], \ - # "'{}' is not equal to '{}'".format(extracted_project_info.owner, TEST_PROJECT_ID_TO_OWNER_MAP[project_id]) - # assert extracted_project_info.image_url is not None - # assert extracted_project_info.image_url == TEST_PROJECT_ID_TO_IMAGE_URL_MAP[project_id], \ - # "'{}' is not equal to '{}'".format(extracted_project_info.image_url, TEST_PROJECT_ID_TO_IMAGE_URL_MAP[project_id]) - # assert extracted_project_info.instructions == TEST_PROJECT_ID_TO_INSTRUCTIONS_MAP[project_id], \ - # "'{}' is not equal to '{}'".format(extracted_project_info.instructions, TEST_PROJECT_ID_TO_INSTRUCTIONS_MAP[project_id]) - # assert extracted_project_info.notes_and_credits == TEST_PROJECT_ID_TO_NOTES_AND_CREDITS_MAP[project_id], \ - # "'{}' is not equal to '{}'".format(extracted_project_info.notes_and_credits, TEST_PROJECT_ID_TO_NOTES_AND_CREDITS_MAP[project_id]) - # assert extracted_project_info.tags is not None - # assert extracted_project_info.tags == TEST_PROJECT_ID_TO_TAGS_MAP[project_id], \ - # "'{}' is not equal to '{}'".format(extracted_project_info.tags, TEST_PROJECT_ID_TO_TAGS_MAP[project_id]) - # assert extracted_project_info.views is not None - # assert isinstance(extracted_project_info.views, int) - # assert extracted_project_info.views > 0 - # assert extracted_project_info.favorites is not None - # assert extracted_project_info.favorites >= 0 - # assert isinstance(extracted_project_info.favorites, int) - # assert extracted_project_info.loves is not None - # assert extracted_project_info.loves >= 0 - # assert isinstance(extracted_project_info.loves, int) - # assert extracted_project_info.modified_date is not None - # assert isinstance(extracted_project_info.modified_date, datetime) - # assert extracted_project_info.shared_date is not None - # assert isinstance(extracted_project_info.shared_date, datetime) + def test_can_request_project_info_for_id(self): + for (project_id, expected_project_title) in TEST_PROJECT_ID_TO_TITLE_MAP.iteritems(): + title, owner, image_url, instructions, notes_and_credits, stats, history\ + = scratchwebapi.getMetaDataEntry(project_id, 'title', 'username', 'image', 'instructions', 'description', 'stats', 'history') + assert title == expected_project_title, \ + "'{}' is not equal to '{}'".format(title, expected_project_title) + assert owner == TEST_PROJECT_ID_TO_OWNER_MAP[project_id], \ + "'{}' is not equal to '{}'".format(owner, TEST_PROJECT_ID_TO_OWNER_MAP[project_id]) + assert image_url == TEST_PROJECT_ID_TO_IMAGE_URL_MAP[project_id], \ + "'{}' is not equal to '{}'".format(image_url, TEST_PROJECT_ID_TO_IMAGE_URL_MAP[project_id]) + assert instructions == TEST_PROJECT_ID_TO_INSTRUCTIONS_MAP[project_id], \ + "'{}' is not equal to '{}'".format(instructions, TEST_PROJECT_ID_TO_INSTRUCTIONS_MAP[project_id]) + assert notes_and_credits == TEST_PROJECT_ID_TO_NOTES_AND_CREDITS_MAP[project_id], \ + "'{}' is not equal to '{}'".format(notes_and_credits, TEST_PROJECT_ID_TO_NOTES_AND_CREDITS_MAP[project_id]) + assert isinstance(stats['views'], int) + assert stats['views'] > 0 + assert isinstance(stats['favorites'], int) + assert stats['favorites'] >= 0 + assert isinstance(stats['loves'], int) + assert stats['loves'] >= 0 + assert isinstance(scratchwebapi.convertHistoryDatesToDatetime(history['modified']), datetime) + assert isinstance(scratchwebapi.convertHistoryDatesToDatetime(history['shared']), datetime) def test_can_detect_correct_availability_state_of_project(self): project_availability_map = {