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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)
Esempio n. 5
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