Esempio n. 1
0
    def get(self, story_id, node_id):
        """Handles GET requests."""
        (_, _, classroom_url_fragment, topic_url_fragment, story_url_fragment,
         node_id) = self.request.path.split('/')
        story = story_fetchers.get_story_by_id(story_id)
        completed_nodes = story_fetchers.get_completed_nodes_in_story(
            self.user_id, story_id)
        ordered_nodes = story.story_contents.get_ordered_nodes()

        # In case the user is a returning user and has completed nodes in the
        # past, redirect to the story page so that the user can continue from
        # where they had left off.
        # If the node id is not the first node in the story, redirect to
        # the story page.
        if completed_nodes or node_id != ordered_nodes[0].id:
            self.redirect('/learn/%s/%s/story/%s' %
                          (classroom_url_fragment, topic_url_fragment,
                           story_url_fragment))
            return

        (next_exp_ids, next_node_id,
         _) = (self._record_node_completion(story_id, node_id, [],
                                            ordered_nodes))
        if next_node_id is None:
            self.redirect('/learn/%s/%s/story/%s' %
                          (classroom_url_fragment, topic_url_fragment,
                           story_url_fragment))
            return

        redirect_url = '%s/%s' % (feconf.EXPLORATION_URL_PREFIX,
                                  next_exp_ids[0])
        redirect_url = utils.set_url_query_parameter(redirect_url,
                                                     'classroom_url_fragment',
                                                     classroom_url_fragment)
        redirect_url = utils.set_url_query_parameter(redirect_url,
                                                     'topic_url_fragment',
                                                     topic_url_fragment)
        redirect_url = utils.set_url_query_parameter(redirect_url,
                                                     'story_url_fragment',
                                                     story_url_fragment)
        redirect_url = utils.set_url_query_parameter(redirect_url, 'node_id',
                                                     next_node_id)

        self.redirect(redirect_url)
Esempio n. 2
0
    def test_set_url_query_parameter(self) -> None:
        """Test set_url_query_parameter method."""
        self.assertEqual(
            utils.set_url_query_parameter('http://www.test.com', 'a', 'b'),
            'http://www.test.com?a=b')

        self.assertEqual(
            utils.set_url_query_parameter('http://www.test.com?a=b', 'c', 'd'),
            'http://www.test.com?a=b&c=d')

        self.assertEqual(
            utils.set_url_query_parameter('http://test.com?a=b', 'redirectUrl',
                                          'http://redirect.com'),
            'http://test.com?a=b&redirectUrl=http%3A%2F%2Fredirect.com')

        with self.assertRaisesRegexp(  # type: ignore[no-untyped-call]
                Exception, 'URL query parameter name must be a string'):
            utils.set_url_query_parameter('http://test.com?a=b', None,
                                          'value')  # type: ignore[arg-type]