Exemplo n.º 1
0
    def test_accept_suggestion_and_send_email_to_author(self):
        enable_recording_of_scores_swap = self.swap(
            feconf, 'ENABLE_RECORDING_OF_SCORES', True)
        send_suggestion_review_related_emails_swap = self.swap(
            feconf, 'SEND_SUGGESTION_REVIEW_RELATED_EMAILS', True)

        change_list = [
            exp_domain.ExplorationChange({
                'cmd': exp_domain.CMD_ADD_STATE,
                'state_name': 'state 1',
            })
        ]
        exp_services.update_exploration(self.author_id, self.target_id,
                                        change_list, 'Add state.')

        new_suggestion_content = state_domain.SubtitledHtml(
            'content', 'new suggestion content html').to_dict()
        change_dict = {
            'cmd': exp_domain.CMD_EDIT_STATE_PROPERTY,
            'property_name': exp_domain.STATE_PROPERTY_CONTENT,
            'state_name': 'state 1',
            'new_value': new_suggestion_content
        }

        suggestion_services.create_suggestion(
            suggestion_models.SUGGESTION_TYPE_EDIT_STATE_CONTENT,
            suggestion_models.TARGET_TYPE_EXPLORATION, self.target_id,
            self.target_version_at_submission, self.author_id, change_dict,
            'test description', self.reviewer_id)

        suggestion = suggestion_services.query_suggestions([
            ('author_id', self.author_id), ('target_id', self.target_id)
        ])[0]
        self.assertEqual(suggestion.status, suggestion_models.STATUS_IN_REVIEW)
        self.assertFalse(
            suggestion_services.check_if_email_has_been_sent_to_user(
                self.author_id, suggestion.score_category))

        suggestion_services.increment_score_for_user(self.author_id,
                                                     suggestion.score_category,
                                                     10)

        with enable_recording_of_scores_swap, (
                send_suggestion_review_related_emails_swap):
            suggestion_services.accept_suggestion(suggestion, self.reviewer_id,
                                                  self.COMMIT_MESSAGE,
                                                  'review message')

        suggestion = suggestion_services.query_suggestions([
            ('author_id', self.author_id), ('target_id', self.target_id)
        ])[0]
        self.assertEqual(suggestion.status, suggestion_models.STATUS_ACCEPTED)
        self.assertTrue(
            suggestion_services.check_if_email_has_been_sent_to_user(
                self.author_id, suggestion.score_category))
Exemplo n.º 2
0
    def get_all_user_ids_who_are_allowed_to_review(self):
        suggestion_services.increment_score_for_user('user1', 'category1', 1)
        suggestion_services.increment_score_for_user('user2', 'category1', 5)
        suggestion_services.increment_score_for_user('user1', 'category2',
                                                     15.2)
        suggestion_services.increment_score_for_user('user2', 'category2', 2)
        with self.swap(suggestion_models, 'MINIMUM_SCORE_REQUIRED_TO_REVIEW',
                       10):
            user_ids = (
                suggestion_services.get_all_user_ids_who_are_allowed_to_review(
                    'category1'))
            self.assertEqual(user_ids, [])
            user_ids = (
                suggestion_services.get_all_user_ids_who_are_allowed_to_review(
                    'category2'))
            self.assertEqual(user_ids, ['user2'])

            self.assertTrue(
                suggestion_services.check_user_can_review_in_category(
                    'user1', 'category2'))
            self.assertFalse(
                suggestion_services.check_user_can_review_in_category(
                    'user2', 'category1'))
            self.assertFalse(
                suggestion_services.check_user_can_review_in_category(
                    'user_1', 'category_new'))
            self.assertFalse(
                suggestion_services.check_user_can_review_in_category(
                    'invalid_user', 'category1'))
Exemplo n.º 3
0
    def test_update_score_for_user(self):
        suggestion_services.increment_score_for_user('user1', 'category1', 1)
        suggestion_services.increment_score_for_user('user2', 'category1', 5)
        suggestion_services.increment_score_for_user('user1', 'category2', 15.2)
        suggestion_services.increment_score_for_user('user2', 'category2', 2)
        suggestion_services.increment_score_for_user('user1', 'category1', -1)

        scores1 = suggestion_services.get_all_scores_of_user('user1')
        self.assertEqual(scores1['category1'], 0)
        self.assertEqual(scores1['category2'], 15.2)

        scores2 = suggestion_services.get_all_scores_of_user('user2')
        self.assertEqual(scores2['category1'], 5)
        self.assertEqual(scores2['category2'], 2)

        scores3 = suggestion_services.get_all_scores_of_user('invalid_user')
        self.assertDictEqual(scores3, {})
Exemplo n.º 4
0
    def test_accept_suggestion(self):
        exploration = exp_fetchers.get_exploration_by_id(self.EXP_ID)

        # Test editor can accept successfully.
        self.login(self.EDITOR_EMAIL)
        csrf_token = self.get_new_csrf_token()

        suggestion_to_accept = self.get_json(
            '%s?author_id=%s' % (feconf.SUGGESTION_LIST_URL_PREFIX,
                                 self.author_id))['suggestions'][0]

        csrf_token = self.get_new_csrf_token()
        self.put_json('%s/exploration/%s/%s' %
                      (feconf.SUGGESTION_ACTION_URL_PREFIX,
                       suggestion_to_accept['target_id'],
                       suggestion_to_accept['suggestion_id']), {
                           'action': u'accept',
                           'commit_message': u'commit message',
                           'review_message': u'Accepted'
                       },
                      csrf_token=csrf_token)
        suggestion_post_accept = self.get_json(
            '%s?author_id=%s' % (feconf.SUGGESTION_LIST_URL_PREFIX,
                                 self.author_id))['suggestions'][0]
        self.assertEqual(suggestion_post_accept['status'],
                         suggestion_models.STATUS_ACCEPTED)
        exploration = exp_fetchers.get_exploration_by_id(self.EXP_ID)
        self.assertEqual(
            exploration.states[suggestion_to_accept['change']
                               ['state_name']].content.html,
            suggestion_to_accept['change']['new_value']['html'])
        self.logout()

        # Testing user without permissions cannot accept.
        self.login(self.NORMAL_USER_EMAIL)
        suggestion_to_accept = self.get_json(
            '%s?author_id=%s' % (feconf.SUGGESTION_LIST_URL_PREFIX,
                                 self.author_id_2))['suggestions'][0]

        csrf_token = self.get_new_csrf_token()
        self.put_json('%s/exploration/%s/%s' %
                      (feconf.SUGGESTION_ACTION_URL_PREFIX,
                       suggestion_to_accept['target_id'],
                       suggestion_to_accept['suggestion_id']), {
                           'action': u'accept',
                           'commit_message': u'commit message',
                           'review_message': u'Accepted'
                       },
                      csrf_token=csrf_token,
                      expected_status_int=401)
        self.logout()

        # Testing that author cannot accept own suggestion.
        self.login(self.AUTHOR_EMAIL_2)
        suggestion_to_accept = self.get_json(
            '%s?author_id=%s' % (feconf.SUGGESTION_LIST_URL_PREFIX,
                                 self.author_id_2))['suggestions'][0]

        csrf_token = self.get_new_csrf_token()
        self.put_json('%s/exploration/%s/%s' %
                      (feconf.SUGGESTION_ACTION_URL_PREFIX,
                       suggestion_to_accept['target_id'],
                       suggestion_to_accept['suggestion_id']), {
                           'action': u'accept',
                           'commit_message': u'commit message',
                           'review_message': u'Accepted'
                       },
                      csrf_token=csrf_token,
                      expected_status_int=401)

        # Testing users with scores above threshold can accept.
        self.login(self.AUTHOR_EMAIL)
        suggestion_services.increment_score_for_user(self.author_id,
                                                     'content.Algebra', 15)

        csrf_token = self.get_new_csrf_token()
        self.put_json('%s/exploration/%s/%s' %
                      (feconf.SUGGESTION_ACTION_URL_PREFIX,
                       suggestion_to_accept['target_id'],
                       suggestion_to_accept['suggestion_id']), {
                           'action': u'accept',
                           'commit_message': u'commit message',
                           'review_message': u'Accepted'
                       },
                      csrf_token=csrf_token)

        suggestion_post_accept = self.get_json(
            '%s?author_id=%s' % (feconf.SUGGESTION_LIST_URL_PREFIX,
                                 self.author_id_2))['suggestions'][0]
        self.assertEqual(suggestion_post_accept['status'],
                         suggestion_models.STATUS_ACCEPTED)
        self.logout()

        # Testing admins can accept suggestions.
        self.login(self.ADMIN_EMAIL)
        csrf_token = self.get_new_csrf_token()
        suggestion_to_accept = self.get_json(
            '%s?author_id=%s' % (feconf.SUGGESTION_LIST_URL_PREFIX,
                                 self.author_id_2))['suggestions'][1]
        self.put_json('%s/exploration/%s/%s' %
                      (feconf.SUGGESTION_ACTION_URL_PREFIX,
                       suggestion_to_accept['target_id'],
                       suggestion_to_accept['suggestion_id']), {
                           'action': u'accept',
                           'commit_message': u'commit message',
                           'review_message': u'Accepted'
                       },
                      csrf_token=csrf_token)
        suggestion_post_accept = self.get_json(
            '%s?author_id=%s' % (feconf.SUGGESTION_LIST_URL_PREFIX,
                                 self.author_id_2))['suggestions'][1]
        self.assertEqual(suggestion_post_accept['status'],
                         suggestion_models.STATUS_ACCEPTED)
        self.logout()
Exemplo n.º 5
0
    def test_accept_suggestion(self):
        with self.swap(constants, 'USE_NEW_SUGGESTION_FRAMEWORK', True):
            with self.swap(feconf, 'ENABLE_GENERALIZED_FEEDBACK_THREADS',
                           True):
                exploration = exp_services.get_exploration_by_id(self.EXP_ID)

                # Test editor can accept successfully.
                self.login(self.EDITOR_EMAIL)
                response = self.testapp.get('/explore/%s' % self.EXP_ID)
                csrf_token = self.get_csrf_token_from_response(response)

                suggestion_to_accept = self.get_json(
                    '%s?author_id=%s' %
                    (feconf.GENERAL_SUGGESTION_LIST_URL_PREFIX,
                     self.author_id))['suggestions'][0]

                response = self.testapp.get('/explore/%s' % self.EXP_ID)
                csrf_token = self.get_csrf_token_from_response(response)
                self.put_json('%s/exploration/%s/%s' %
                              (feconf.GENERAL_SUGGESTION_ACTION_URL_PREFIX,
                               suggestion_to_accept['target_id'],
                               suggestion_to_accept['suggestion_id']), {
                                   'action': u'accept',
                                   'commit_message': u'commit message',
                                   'review_message': u'Accepted'
                               },
                              csrf_token=csrf_token)
                suggestion_post_accept = self.get_json(
                    '%s?author_id=%s' %
                    (feconf.GENERAL_SUGGESTION_LIST_URL_PREFIX,
                     self.author_id))['suggestions'][0]
                self.assertEqual(suggestion_post_accept['status'],
                                 suggestion_models.STATUS_ACCEPTED)
                exploration = exp_services.get_exploration_by_id(self.EXP_ID)
                self.assertEqual(
                    exploration.states[suggestion_to_accept['change']
                                       ['state_name']].content.html,
                    suggestion_to_accept['change']['new_value']['html'])
                self.logout()

                # Testing user without permissions cannot accept.
                self.login(self.NORMAL_USER_EMAIL)
                suggestion_to_accept = self.get_json(
                    '%s?author_id=%s' %
                    (feconf.GENERAL_SUGGESTION_LIST_URL_PREFIX,
                     self.author_id_2))['suggestions'][0]

                response = self.testapp.get('/explore/%s' % self.EXP_ID)
                csrf_token = self.get_csrf_token_from_response(response)
                self.put_json('%s/exploration/%s/%s' %
                              (feconf.GENERAL_SUGGESTION_ACTION_URL_PREFIX,
                               suggestion_to_accept['target_id'],
                               suggestion_to_accept['suggestion_id']), {
                                   'action': u'accept',
                                   'commit_message': u'commit message',
                                   'review_message': u'Accepted'
                               },
                              csrf_token=csrf_token,
                              expect_errors=True,
                              expected_status_int=401)
                self.logout()

                # Testing that author cannot accept own suggestion.
                self.login(self.AUTHOR_EMAIL_2)
                suggestion_to_accept = self.get_json(
                    '%s?author_id=%s' %
                    (feconf.GENERAL_SUGGESTION_LIST_URL_PREFIX,
                     self.author_id_2))['suggestions'][0]

                response = self.testapp.get('/explore/%s' % self.EXP_ID)
                csrf_token = self.get_csrf_token_from_response(response)
                self.put_json('%s/exploration/%s/%s' %
                              (feconf.GENERAL_SUGGESTION_ACTION_URL_PREFIX,
                               suggestion_to_accept['target_id'],
                               suggestion_to_accept['suggestion_id']), {
                                   'action': u'accept',
                                   'commit_message': u'commit message',
                                   'review_message': u'Accepted'
                               },
                              csrf_token=csrf_token,
                              expect_errors=True,
                              expected_status_int=401)

                # Testing users with scores above threshold can accept.
                self.login(self.AUTHOR_EMAIL)
                suggestion_services.increment_score_for_user(
                    self.author_id, 'content.Algebra', 15)

                response = self.testapp.get('/explore/%s' % self.EXP_ID)
                csrf_token = self.get_csrf_token_from_response(response)
                self.put_json('%s/exploration/%s/%s' %
                              (feconf.GENERAL_SUGGESTION_ACTION_URL_PREFIX,
                               suggestion_to_accept['target_id'],
                               suggestion_to_accept['suggestion_id']), {
                                   'action': u'accept',
                                   'commit_message': u'commit message',
                                   'review_message': u'Accepted'
                               },
                              csrf_token=csrf_token)

                suggestion_post_accept = self.get_json(
                    '%s?author_id=%s' %
                    (feconf.GENERAL_SUGGESTION_LIST_URL_PREFIX,
                     self.author_id_2))['suggestions'][0]
                self.assertEqual(suggestion_post_accept['status'],
                                 suggestion_models.STATUS_ACCEPTED)
                self.logout()

                # Testing admins can accept suggestions.
                self.login(self.ADMIN_EMAIL)
                response = self.testapp.get('/explore/%s' % self.EXP_ID)
                csrf_token = self.get_csrf_token_from_response(response)
                suggestion_to_accept = self.get_json(
                    '%s?author_id=%s' %
                    (feconf.GENERAL_SUGGESTION_LIST_URL_PREFIX,
                     self.author_id_2))['suggestions'][1]
                self.put_json('%s/exploration/%s/%s' %
                              (feconf.GENERAL_SUGGESTION_ACTION_URL_PREFIX,
                               suggestion_to_accept['target_id'],
                               suggestion_to_accept['suggestion_id']), {
                                   'action': u'accept',
                                   'commit_message': u'commit message',
                                   'review_message': u'Accepted'
                               },
                              csrf_token=csrf_token)
                suggestion_post_accept = self.get_json(
                    '%s?author_id=%s' %
                    (feconf.GENERAL_SUGGESTION_LIST_URL_PREFIX,
                     self.author_id_2))['suggestions'][1]
                self.assertEqual(suggestion_post_accept['status'],
                                 suggestion_models.STATUS_ACCEPTED)
                self.logout()