Exemplo n.º 1
0
    def test_delete(self):
        question_services.create_new_question_skill_link(
            self.question_id, self.skill_id)
        question_services.create_new_question_skill_link(
            self.question_id_2, self.skill_id)
        with self.swap(constants, 'ENABLE_NEW_STRUCTURE_EDITORS', True):
            self.login(self.NEW_USER_EMAIL)
            self.delete_json('%s/%s/%s' %
                             (feconf.QUESTION_SKILL_LINK_URL_PREFIX,
                              self.question_id, self.skill_id),
                             expected_status_int=401)
            self.logout()

            self.login(self.ADMIN_EMAIL)
            self.delete_json('%s/%s/%s' %
                             (feconf.QUESTION_SKILL_LINK_URL_PREFIX,
                              self.question_id, self.skill_id))
            question_summaries, _ = (
                question_services.get_question_summaries_linked_to_skills(
                    5, [self.skill_id], ''))
            self.assertEqual(len(question_summaries), 1)
            self.assertEqual(question_summaries[0].id, self.question_id_2)
            self.logout()

            self.login(self.TOPIC_MANAGER_EMAIL)
            self.delete_json('%s/%s/%s' %
                             (feconf.QUESTION_SKILL_LINK_URL_PREFIX,
                              self.question_id_2, self.skill_id))
            question_summaries, _ = (
                question_services.get_question_summaries_linked_to_skills(
                    5, [self.skill_id], ''))
            self.assertEqual(len(question_summaries), 0)
            self.logout()
Exemplo n.º 2
0
    def test_post(self):
        with self.swap(feconf, 'ENABLE_NEW_STRUCTURES', True):
            self.login(self.NEW_USER_EMAIL)
            response = self.testapp.get(feconf.CREATOR_DASHBOARD_URL)
            csrf_token = self.get_csrf_token_from_response(response)
            response = self.testapp.post(
                '%s/%s/%s' % (
                    feconf.QUESTION_SKILL_LINK_URL_PREFIX, self.question_id,
                    self.skill_id
                ), expect_errors=True)
            self.assertEqual(response.status_int, 401)
            self.logout()

            self.login(self.ADMIN_EMAIL)
            response = self.testapp.get(feconf.CREATOR_DASHBOARD_URL)
            csrf_token = self.get_csrf_token_from_response(response)
            self.post_json(
                '%s/%s/%s' % (
                    feconf.QUESTION_SKILL_LINK_URL_PREFIX, self.question_id,
                    self.skill_id
                ), {}, csrf_token=csrf_token, expect_errors=False,
                expected_status_int=200)
            question_summaries, _ = (
                question_services.get_question_summaries_linked_to_skills(
                    5, [self.skill_id], ''))
            self.assertEqual(len(question_summaries), 1)
            self.assertEqual(question_summaries[0].id, self.question_id)
            self.logout()

            self.login(self.TOPIC_MANAGER_EMAIL)
            response = self.testapp.get(feconf.CREATOR_DASHBOARD_URL)
            csrf_token = self.get_csrf_token_from_response(response)
            self.post_json(
                '%s/%s/%s' % (
                    feconf.QUESTION_SKILL_LINK_URL_PREFIX, self.question_id_2,
                    self.skill_id
                ), {}, csrf_token=csrf_token, expect_errors=False,
                expected_status_int=200)
            question_summaries, _ = (
                question_services.get_question_summaries_linked_to_skills(
                    5, [self.skill_id], ''))
            self.assertEqual(len(question_summaries), 2)
            question_ids = [summary.id for summary in question_summaries]
            self.assertItemsEqual(
                question_ids, [self.question_id, self.question_id_2])
            self.logout()
Exemplo n.º 3
0
    def test_create_and_get_question_skill_link(self):
        question_id_2 = question_services.get_new_question_id()
        self.save_new_question(
            question_id_2, self.editor_id,
            self._create_valid_question_data('ABC'))

        question_id_3 = question_services.get_new_question_id()
        self.save_new_question(
            question_id_3, self.editor_id,
            self._create_valid_question_data('ABC'))
        question_services.create_new_question_skill_link(
            self.question_id, 'skill_1')
        question_services.create_new_question_skill_link(
            question_id_2, 'skill_1')
        question_services.create_new_question_skill_link(
            question_id_3, 'skill_2')

        question_summaries, _ = (
            question_services.get_question_summaries_linked_to_skills(
                5, ['skill_1', 'skill_2', 'skill_3'], ''))

        with self.assertRaisesRegexp(
            Exception, 'Querying linked question summaries for more than 3 '
            'skills at a time is not supported currently.'):
            question_services.get_question_summaries_linked_to_skills(
                5, ['skill_1', 'skill_2', 'skill_3', 'skill_4'], '')
        question_ids = [summary.id for summary in question_summaries]
        self.assertEqual(len(question_ids), 3)
        self.assertItemsEqual(
            question_ids, [self.question_id, question_id_2, question_id_3])

        question_summaries, _ = (
            question_services.get_question_summaries_linked_to_skills(
                5, ['skill_1', 'skill_3'], ''))
        question_ids = [summary.id for summary in question_summaries]
        self.assertEqual(len(question_ids), 2)
        self.assertItemsEqual(
            question_ids, [self.question_id, question_id_2])

        with self.assertRaisesRegexp(
            Exception, 'The given question is already linked to given skill'):
            question_services.create_new_question_skill_link(
                self.question_id, 'skill_1')
Exemplo n.º 4
0
    def test_delete(self):
        question_services.create_new_question_skill_link(
            self.question_id, self.skill_id)
        question_services.create_new_question_skill_link(
            self.question_id_2, self.skill_id)
        with self.swap(feconf, 'ENABLE_NEW_STRUCTURES', True):
            self.login(self.NEW_USER_EMAIL)
            response = self.testapp.delete(
                '%s/%s/%s' % (
                    feconf.QUESTION_SKILL_LINK_URL_PREFIX, self.question_id,
                    self.skill_id
                ), expect_errors=True)
            self.assertEqual(response.status_int, 401)
            self.logout()

            self.login(self.ADMIN_EMAIL)
            self.testapp.delete(
                '%s/%s/%s' % (
                    feconf.QUESTION_SKILL_LINK_URL_PREFIX, self.question_id,
                    self.skill_id
                ), expect_errors=False)
            question_summaries, _ = (
                question_services.get_question_summaries_linked_to_skills(
                    5, [self.skill_id], ''))
            self.assertEqual(len(question_summaries), 1)
            self.assertEqual(question_summaries[0].id, self.question_id_2)
            self.logout()

            self.login(self.TOPIC_MANAGER_EMAIL)
            self.testapp.delete(
                '%s/%s/%s' % (
                    feconf.QUESTION_SKILL_LINK_URL_PREFIX, self.question_id_2,
                    self.skill_id
                ), expect_errors=False)
            question_summaries, _ = (
                question_services.get_question_summaries_linked_to_skills(
                    5, [self.skill_id], ''))
            self.assertEqual(len(question_summaries), 0)
            self.logout()
Exemplo n.º 5
0
    def test_accept_question_suggestion(self):
        with self.swap(constants, 'USE_NEW_SUGGESTION_FRAMEWORK', True):
            with self.swap(feconf, 'ENABLE_GENERALIZED_FEEDBACK_THREADS',
                           True):
                suggestion_to_accept = self.get_json(
                    '%s?suggestion_type=%s' %
                    (feconf.GENERAL_SUGGESTION_LIST_URL_PREFIX,
                     suggestion_models.SUGGESTION_TYPE_ADD_QUESTION)
                )['suggestions'][0]

                self.login(self.ADMIN_EMAIL)
                response = self.testapp.get(feconf.CREATOR_DASHBOARD_URL)
                csrf_token = self.get_csrf_token_from_response(response)
                with self.swap(feconf, 'ENABLE_NEW_STRUCTURES', True):
                    self.put_json('%s/topic/%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'This looks good!'
                                   },
                                  csrf_token=csrf_token)

                suggestion_post_accept = self.get_json(
                    '%s?suggestion_type=%s' %
                    (feconf.GENERAL_SUGGESTION_LIST_URL_PREFIX,
                     suggestion_models.SUGGESTION_TYPE_ADD_QUESTION)
                )['suggestions'][0]
                self.assertEqual(suggestion_post_accept['status'],
                                 suggestion_models.STATUS_ACCEPTED)
                questions, _ = (
                    question_services.get_question_summaries_linked_to_skills(
                        1, [self.SKILL_ID], ''))
                self.assertEqual(len(questions), 1)
                self.assertEqual(questions[0].creator_id, self.author_id)
                self.assertEqual(
                    questions[0].question_content,
                    self.question_dict['question_state_data']['content']
                    ['html'])
                thread_messages = feedback_services.get_messages(
                    suggestion_to_accept['suggestion_id'])
            last_message = thread_messages[len(thread_messages) - 1]
            self.assertEqual(last_message.text, 'This looks good!')
Exemplo n.º 6
0
    def get(self, skill_id):
        """Handles GET requests."""
        if not constants.ENABLE_NEW_STRUCTURES:
            raise self.PageNotFoundException
        skill_domain.Skill.require_valid_skill_id(skill_id)

        start_cursor = self.request.get('cursor')

        question_summaries, next_start_cursor = (
            question_services.get_question_summaries_linked_to_skills(
                constants.NUM_QUESTIONS_PER_PAGE, [skill_id], start_cursor)
        )
        question_summary_dicts = [
            summary.to_dict() for summary in question_summaries]

        self.values.update({
            'question_summary_dicts': question_summary_dicts,
            'next_start_cursor': next_start_cursor
        })
        self.render_json(self.values)
Exemplo n.º 7
0
    def get(self, topic_id):
        """Handles GET requests."""
        if not feconf.ENABLE_NEW_STRUCTURES:
            raise self.PageNotFoundException
        topic_domain.Topic.require_valid_topic_id(topic_id)

        start_cursor = self.request.get('cursor')
        topic = topic_services.get_topic_by_id(topic_id)
        skill_ids = topic.get_all_skill_ids()

        question_summaries, next_start_cursor = (
            question_services.get_question_summaries_linked_to_skills(
                feconf.NUM_QUESTIONS_PER_PAGE, skill_ids, start_cursor))
        question_summary_dicts = [
            summary.to_dict() for summary in question_summaries
        ]

        self.values.update({
            'question_summary_dicts': question_summary_dicts,
            'next_start_cursor': next_start_cursor
        })
        self.render_json(self.values)