def test_get_story_summaries_by_ids(self): story_summaries = story_fetchers.get_story_summaries_by_ids( [self.STORY_ID]) self.assertEqual(len(story_summaries), 1) self.assertEqual(story_summaries[0].id, self.STORY_ID) self.assertEqual(story_summaries[0].title, 'Title') self.assertEqual(story_summaries[0].description, 'Description') self.assertEqual(story_summaries[0].language_code, 'en') self.assertEqual(story_summaries[0].node_count, 1) self.assertEqual(story_summaries[0].version, 2)
def get(self, topic_id): """Handles GET requests.""" topic = topic_fetchers.get_topic_by_id(topic_id) story_id_to_publication_status_map = {} for reference in topic.canonical_story_references: story_id_to_publication_status_map[reference.story_id] = ( reference.story_is_published) for reference in topic.additional_story_references: story_id_to_publication_status_map[reference.story_id] = ( reference.story_is_published) canonical_story_summaries = story_fetchers.get_story_summaries_by_ids( topic.get_canonical_story_ids()) additional_story_summaries = story_fetchers.get_story_summaries_by_ids( topic.get_additional_story_ids()) canonical_story_summary_dicts = [ summary.to_dict() for summary in canonical_story_summaries ] additional_story_summary_dicts = [ summary.to_dict() for summary in additional_story_summaries ] for summary in canonical_story_summary_dicts: summary['story_is_published'] = ( story_id_to_publication_status_map[summary['id']]) summary['completed_node_titles'] = [] summary['pending_node_dicts'] = [] for summary in additional_story_summary_dicts: summary['story_is_published'] = ( story_id_to_publication_status_map[summary['id']]) summary['completed_node_titles'] = [] summary['pending_node_dicts'] = [] self.values.update({ 'canonical_story_summary_dicts': canonical_story_summary_dicts, 'additional_story_summary_dicts': additional_story_summary_dicts }) self.render_json(self.values)
def test_get_story_summaries_by_id(self): story_summaries = story_fetchers.get_story_summaries_by_ids( [self.STORY_ID, 'someID']) self.assertEqual(len(story_summaries), 1) self.assertEqual(story_summaries[0].id, self.STORY_ID) self.assertEqual(story_summaries[0].title, 'Title') self.assertEqual(story_summaries[0].description, 'Description') self.assertEqual(story_summaries[0].language_code, 'en') self.assertEqual(story_summaries[0].node_titles, ['Title 1']) self.assertEqual(story_summaries[0].thumbnail_filename, None) self.assertEqual(story_summaries[0].thumbnail_bg_color, None) self.assertEqual(story_summaries[0].version, 2)
def test_get_progress_of_students(self): self.login(self.NEW_USER_EMAIL) params = { 'student_usernames': json.dumps([self.STUDENT_1_USERNAME, self.STUDENT_2_USERNAME]) } response = self.get_json('/learner_group_user_progress_handler/%s' % (self.LEARNER_GROUP_ID), params=params) students_prog = response['students_progress'] student1_stories_prog = students_prog[0]['stories_progress'] student2_stories_prog = students_prog[1]['stories_progress'] student1_subtopics_prog = students_prog[0]['subtopic_pages_progress'] student2_subtopics_prog = students_prog[1]['subtopic_pages_progress'] story_summary = story_fetchers.get_story_summaries_by_ids( [self.STORY_ID_1])[0] story = story_fetchers.get_story_by_id(self.STORY_ID_1) expected_story_prog_summary = story_summary.to_dict() expected_story_prog_summary['story_is_published'] = True expected_story_prog_summary['completed_node_titles'] = ([ 'Title 1', 'Title 2' ]) expected_story_prog_summary['topic_name'] = 'Topic' expected_story_prog_summary['topic_url_fragment'] = 'topic' expected_story_prog_summary['all_node_dicts'] = ([ node.to_dict() for node in story.story_contents.nodes ]) expected_student1_subtopics_prog = [{ 'subtopic_id': 1, 'subtopic_title': 'Subtopic Title 1', 'parent_topic_id': self.TOPIC_ID_1, 'parent_topic_name': 'Topic', 'thumbnail_filename': self.subtopic_1.thumbnail_filename, 'thumbnail_bg_color': self.subtopic_1.thumbnail_bg_color, 'subtopic_mastery': self.DEGREE_OF_MASTERY_1 }] self.assertEqual(len(students_prog), 2) self.assertEqual(students_prog[0]['username'], self.STUDENT_1_USERNAME) self.assertEqual(students_prog[1]['username'], self.STUDENT_2_USERNAME) self.assertEqual(students_prog[0]['progress_sharing_is_turned_on'], True) self.assertEqual(students_prog[1]['progress_sharing_is_turned_on'], False) self.assertEqual(len(student1_stories_prog), 1) self.assertEqual(student1_stories_prog[0], expected_story_prog_summary) self.assertEqual(len(student2_stories_prog), 0) self.assertEqual(len(student1_subtopics_prog), 1) self.assertEqual(student1_subtopics_prog, expected_student1_subtopics_prog) self.assertEqual(len(student2_subtopics_prog), 0)
def get_matching_story_syllabus_item_dicts( topic: topic_domain.Topic, group_story_ids: List[str], keyword: Optional[str] = None ) -> List[story_domain.LearnerGroupSyllabusStorySummaryDict]: """Returns the matching story syllabus item dicts of the given topic that can be added to the learner group syllabus. Args: topic: Topic. The topic whose stories are to be searched. group_story_ids: list(str). The story ids of the learner group. keyword: Optional[str]. The keyword to search the stories. It is compared with the title of the story if passed in arguments. Returns: list(dict). The matching story syllabus item dicts of the given topic. """ story_ids = [ story.story_id for story in topic.canonical_story_references if (story.story_id not in group_story_ids and story.story_is_published is True) ] matching_stories = story_fetchers.get_story_summaries_by_ids(story_ids) stories = story_fetchers.get_stories_by_ids(story_ids) matching_story_syllabus_item_dicts: List[ story_domain.LearnerGroupSyllabusStorySummaryDict] = [] for ind, story_summary in enumerate(matching_stories): if keyword is None or keyword in story_summary.title.lower(): story = stories[ind] # Ruling out the possibility of None for mypy type checking. assert story is not None summary_dict = story_summary.to_dict() matching_story_syllabus_item_dicts.append({ 'id': summary_dict['id'], 'title': summary_dict['title'], 'description': summary_dict['description'], 'language_code': summary_dict['language_code'], 'version': summary_dict['version'], 'node_titles': summary_dict['node_titles'], 'thumbnail_filename': summary_dict['thumbnail_filename'], 'thumbnail_bg_color': summary_dict['thumbnail_bg_color'], 'url_fragment': summary_dict['url_fragment'], 'story_model_created_on': summary_dict['story_model_created_on'], 'story_model_last_updated': summary_dict['story_model_last_updated'], 'story_is_published': True, 'completed_node_titles': [], 'all_node_dicts': [node.to_dict() for node in story.story_contents.nodes], 'topic_name': topic.name, 'topic_url_fragment': topic.url_fragment }) return matching_story_syllabus_item_dicts