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)
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]