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))
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'))
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, {})
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()
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()