Repository: oppia/oppia

Issue:
[Contributor Dashboard] Minor issues in the review question flow
<!--
  - 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**

1. It is not possible to cancel / defer review once the "review" modal is open.
![noescape](https://user-images.githubusercontent.com/11008603/108080639-1b476080-7096-11eb-9198-ffe79fb484be.png)


2. It seems possible to review the same question a second time if the user quickly clicks the review button after accepting/rejecting a submission. See GIF.
![reject](https://user-images.githubusercontent.com/11008603/108080839-4d58c280-7096-11eb-8a61-70b2b4d80bef.gif)







Discussion:
For (1), it seems like the ESC button closes the modal but it is not obvious to a user.
@sagangwee will you be able to fix these blocking bugs in the next couple of days?
@U8NWXD I actually don't have the bandwidth to fix these issues this week. Can we defer these to next release? Since these are relatively minor issues and we are only opening up the feature to a few trusted testers, I don't think these are necessarily blocking. 
@sagangwee I checked with Sean (he's will be the only one using these features for now), and he asked that they block the release. Is there anyone else who familiar enough with this code to fix these?
Hi @U8NWXD, I will be working on a fix for this and can try to fix it by 21st Feb EOD. Thanks! 
@kevintab95 how is work on this issue going?

Resolving patch:
diff --git a/core/domain/suggestion_registry.py b/core/domain/suggestion_registry.py
--- a/core/domain/suggestion_registry.py
+++ b/core/domain/suggestion_registry.py
@@ -599,8 +599,8 @@ def pre_accept_validate(self):
             self.change.state_name, self.change.content_id)
         if content_html != self.change.content_html:
             raise utils.ValidationError(
-                'The given content_html does not match the content of the '
-                'exploration.')
+                'The Exploration content has changed since this translation '
+                'was submitted.')
 
     def accept(self, commit_message):
         """Accepts the suggestion.
diff --git a/core/domain/suggestion_services.py b/core/domain/suggestion_services.py
--- a/core/domain/suggestion_services.py
+++ b/core/domain/suggestion_services.py
@@ -111,8 +111,8 @@ def create_suggestion(
             change['state_name'], change['content_id'])
         if content_html != change['content_html']:
             raise Exception(
-                'The given content_html does not match the content of the '
-                'exploration.')
+                'The Exploration content has changed since this translation '
+                'was submitted.')
     elif suggestion_type == feconf.SUGGESTION_TYPE_ADD_QUESTION:
         score_category = (
             suggestion_models.SCORE_TYPE_QUESTION +


Test patch:
diff --git a/core/domain/suggestion_registry_test.py b/core/domain/suggestion_registry_test.py
--- a/core/domain/suggestion_registry_test.py
+++ b/core/domain/suggestion_registry_test.py
@@ -1350,8 +1350,8 @@ def test_pre_accept_validate_content_html(self):
         suggestion.change.content_html = 'invalid content_html'
         with self.assertRaisesRegexp(
             utils.ValidationError,
-            'The given content_html does not match the content '
-            'of the exploration.'
+            'The Exploration content has changed since this translation '
+            'was submitted.'
         ):
             suggestion.pre_accept_validate()
 
diff --git a/core/domain/suggestion_services_test.py b/core/domain/suggestion_services_test.py
--- a/core/domain/suggestion_services_test.py
+++ b/core/domain/suggestion_services_test.py
@@ -229,8 +229,8 @@ def test_cannot_create_translation_suggestion_with_invalid_content_html_raise_er
         }
         with self.assertRaisesRegexp(
             Exception,
-            'The given content_html does not match the content of the '
-            'exploration.'):
+            'The Exploration content has changed since this translation '
+            'was submitted.'):
             suggestion_services.create_suggestion(
                 feconf.SUGGESTION_TYPE_TRANSLATE_CONTENT,
                 feconf.ENTITY_TYPE_EXPLORATION,