Repository: oppia/oppia

Issue:
Hint bar does not appear while attempting questions in topic viewer page
<!--
  - Thanks for taking the time to report a bug in the Oppia project.
  - Before filing a new issue, please do a quick search to check that it hasn't
  - already been filed on the [issue tracker](https://github.com/oppia/oppia/issues)._
  -->

**Describe the bug**
The hint bar doesn't appear while attempting question in topic-viewer page

**To Reproduce**
Steps to reproduce the behavior:
1. Log in as admin
2. Update user to admin
3. Load dummy structures and dummy skill.
4. Assign dummy skill to dummy topic -> subtopic
5. go to learn/staging/dummy-topic-one/practice
6. Select subtopic and start
7. No hint bar

**Observed behavior**
No hint bar is present

**Expected behavior**
Hint bar should be present

**Screenshots**
If applicable, add screenshots to help explain your problem.
![Screenshot from 2020-08-16 23-54-05](https://user-images.githubusercontent.com/30462390/90341264-d45fac00-e01b-11ea-811a-3165d92e7e43.png)


**Desktop (please complete the following information; delete this section if the issue does not arise on desktop):**
 - OS: Linux
 - Browser Chrome
 - Version 84


**Additional context**
Add any other context about the problem here.

Learner View, Lessons Tab - Combining with Info Tab
Info Tab should now be part of Lessons Tab. The design change was made because there was excessive empty space in the Info Tab. The Topic description is now at the top of the Lessons Tab and the formatting of the Stories below are not affected. 

The tab menu will only have 3 items (Lessons, Practice, Revision) and will need to be adjusted so that they are centered. ([MOCK](https://xd.adobe.com/view/83e97e1d-7820-4387-72b2-8860a2ee8f6d-f5d8/))

![Lessons Tab](https://user-images.githubusercontent.com/22177674/90068784-1b5d4280-dca6-11ea-80d7-1cffa9c2ee2a.png)

Learner View, Lessons Tab - Combining with Info Tab
Info Tab should now be part of Lessons Tab. The design change was made because there was excessive empty space in the Info Tab. The Topic description is now at the top of the Lessons Tab and the formatting of the Stories below are not affected. 

The tab menu will only have 3 items (Lessons, Practice, Revision) and will need to be adjusted so that they are centered. ([MOCK](https://xd.adobe.com/view/83e97e1d-7820-4387-72b2-8860a2ee8f6d-f5d8/))

![Lessons Tab](https://user-images.githubusercontent.com/22177674/90068784-1b5d4280-dca6-11ea-80d7-1cffa9c2ee2a.png)



Discussion:
@kevintab95 I added the issue. I'm not quite sure how to mark it blocking for release
Hi @orthodoxparadox, I've added it to the "Blocking bugs" milestone. Thanks for filing the issue!
/cc @aks681 
@aks681, can you make sure this blocking bug gets fixed by EOD Thursday, August 20?
Assigning to @aks681 as part of LaCE bugfixes (@aks681, is that ok?)
@aks681, can you make sure this blocking bug gets fixed by EOD Thursday, August 20?
Assigning to @aks681 as part of LaCE bugfixes (@aks681, is that ok?)
@aks681, can you make sure this blocking bug gets fixed by EOD Thursday, August 20?

Resolving patch:
diff --git a/core/controllers/reader.py b/core/controllers/reader.py
--- a/core/controllers/reader.py
+++ b/core/controllers/reader.py
@@ -215,8 +215,8 @@ class PretestHandler(base.BaseHandler):
     @acl_decorators.can_play_exploration
     def get(self, exploration_id):
         """Handles GET request."""
-        story_id = self.request.get('story_id')
-        story = story_fetchers.get_story_by_id(story_id, strict=False)
+        story_url_fragment = self.request.get('story_url_fragment')
+        story = story_fetchers.get_story_by_url_fragment(story_url_fragment)
         if story is None:
             raise self.InvalidInputException
         if not story.has_exploration(exploration_id):


Test patch:
diff --git a/core/controllers/reader_test.py b/core/controllers/reader_test.py
--- a/core/controllers/reader_test.py
+++ b/core/controllers/reader_test.py
@@ -317,20 +317,20 @@ def test_get_exploration_pretests(self):
         # Call the handler.
         with self.swap(feconf, 'NUM_PRETEST_QUESTIONS', 1):
             json_response_1 = self.get_json(
-                '%s/%s?story_id=%s' % (
-                    feconf.EXPLORATION_PRETESTS_URL_PREFIX, exp_id, story_id))
+                '%s/%s?story_url_fragment=title' % (
+                    feconf.EXPLORATION_PRETESTS_URL_PREFIX, exp_id))
         self.assertTrue(
             json_response_1['pretest_question_dicts'][0]['id'] in
             [question_id, question_id_2])
 
         self.get_json(
-            '%s/%s?story_id=%s' % (
-                feconf.EXPLORATION_PRETESTS_URL_PREFIX, exp_id_2, story_id),
+            '%s/%s?story_url_fragment=title' % (
+                feconf.EXPLORATION_PRETESTS_URL_PREFIX, exp_id_2),
             expected_status_int=400)
 
         self.get_json(
-            '%s/%s?story_id=%s' % (
-                feconf.EXPLORATION_PRETESTS_URL_PREFIX, exp_id_2, 'story'),
+            '%s/%s?story_url_fragment=invalid-story' % (
+                feconf.EXPLORATION_PRETESTS_URL_PREFIX, exp_id_2),
             expected_status_int=400)