コード例 #1
0
    def test_deassigning_manager_role(self):
        topic_services.create_new_topic_rights(
            self.topic_id, self.user_id_admin)
        topic_services.assign_role(
            self.user_admin, self.user_id_a,
            topic_domain.ROLE_MANAGER, self.topic_id)

        topic_rights = topic_services.get_topic_rights(self.topic_id)

        self.assertTrue(topic_services.check_can_edit_topic(
            self.user_a, topic_rights))
        self.assertFalse(topic_services.check_can_edit_topic(
            self.user_b, topic_rights))

        topic_services.assign_role(
            self.user_admin, self.user_id_a,
            topic_domain.ROLE_NONE, self.topic_id)

        self.assertFalse(topic_services.check_can_edit_topic(
            self.user_a, topic_rights))
        self.assertFalse(topic_services.check_can_edit_topic(
            self.user_b, topic_rights))

        topic_services.assign_role(
            self.user_admin, self.user_id_a,
            topic_domain.ROLE_NONE, self.topic_id)

        self.assertFalse(topic_services.check_can_edit_topic(
            self.user_a, topic_rights))
        self.assertFalse(topic_services.check_can_edit_topic(
            self.user_b, topic_rights))
コード例 #2
0
ファイル: topic_services_test.py プロジェクト: ledriod/oppia
    def test_cannot_get_topic_from_model_with_invalid_schema_version(self):
        topic_services.create_new_topic_rights('topic_id', self.user_id_a)
        commit_cmd = topic_domain.TopicChange({
            'cmd': topic_domain.CMD_CREATE_NEW,
            'name': 'name'
        })
        subtopic_dict = {
            'id': 1,
            'title': 'subtopic_title',
            'skill_ids': []
        }
        model = topic_models.TopicModel(
            id='topic_id',
            name='name',
            canonical_name='canonical_name',
            next_subtopic_id=1,
            language_code='en',
            subtopics=[subtopic_dict],
            subtopic_schema_version=0
        )
        commit_cmd_dicts = [commit_cmd.to_dict()]
        model.commit(
            self.user_id_a, 'topic model created', commit_cmd_dicts)

        with self.assertRaisesRegexp(
            Exception,
            'Sorry, we can only process v1-v%d subtopic schemas at '
            'present.' % feconf.CURRENT_SUBTOPIC_SCHEMA_VERSION):
            topic_services.get_topic_from_model(model)
コード例 #3
0
    def test_admin_can_manage_topic(self):
        topic_services.create_new_topic_rights(
            self.topic_id, self.user_id_admin)
        topic_rights = topic_services.get_topic_rights(self.topic_id)

        self.assertTrue(topic_services.check_can_edit_topic(
            self.user_admin, topic_rights))
コード例 #4
0
ファイル: topic_fetchers_test.py プロジェクト: oppia/oppia
 def test_topic_model_migration_to_higher_version(self) -> None:
     topic_services.create_new_topic_rights(
         'topic_id', self.user_id_a)  # type: ignore[no-untyped-call]
     commit_cmd = topic_domain.TopicChange({
         'cmd': topic_domain.CMD_CREATE_NEW,
         'name': 'name'
     })
     subtopic_v1_dict = {
         'id': 1,
         'title': 'subtopic_title',
         'skill_ids': []
     }
     model = topic_models.TopicModel(id='topic_id',
                                     name='name 2',
                                     description='description 2',
                                     abbreviated_name='abbrev',
                                     url_fragment='name-three',
                                     canonical_name='canonical_name_2',
                                     next_subtopic_id=1,
                                     language_code='en',
                                     subtopics=[subtopic_v1_dict],
                                     subtopic_schema_version=1,
                                     story_reference_schema_version=1,
                                     page_title_fragment_for_web='fragment')
     commit_cmd_dicts = [commit_cmd.to_dict()]
     model.commit(self.user_id_a, 'topic model created', commit_cmd_dicts)
     swap_topic_object = self.swap(topic_domain, 'Topic', MockTopicObject)
     current_story_refrence_schema_version_swap = self.swap(
         feconf, 'CURRENT_STORY_REFERENCE_SCHEMA_VERSION', 2)
     with swap_topic_object, current_story_refrence_schema_version_swap:
         topic: topic_domain.Topic = (
             topic_fetchers.get_topic_from_model(model))
         self.assertEqual(topic.story_reference_schema_version, 2)
コード例 #5
0
    def test_cannot_get_topic_from_model_with_invalid_schema_version(self):
        topic_services.create_new_topic_rights('topic_id', self.user_id_a)
        commit_cmd = topic_domain.TopicChange({
            'cmd': topic_domain.CMD_CREATE_NEW,
            'name': 'name'
        })
        subtopic_dict = {
            'id': 1,
            'title': 'subtopic_title',
            'skill_ids': []
        }
        model = topic_models.TopicModel(
            id='topic_id',
            name='name',
            abbreviated_name='abbrev',
            url_fragment='name-two',
            canonical_name='canonical_name',
            description='description',
            next_subtopic_id=1,
            language_code='en',
            subtopics=[subtopic_dict],
            subtopic_schema_version=0,
            story_reference_schema_version=0
        )
        commit_cmd_dicts = [commit_cmd.to_dict()]
        model.commit(
            self.user_id_a, 'topic model created', commit_cmd_dicts)

        with self.assertRaisesRegex(
            Exception,
            'Sorry, we can only process v1-v%d subtopic schemas at '
            'present.' % feconf.CURRENT_SUBTOPIC_SCHEMA_VERSION):
            topic_fetchers.get_topic_from_model(model)

        topic_services.create_new_topic_rights('topic_id_2', self.user_id_a)
        model = topic_models.TopicModel(
            id='topic_id_2',
            name='name 2',
            description='description 2',
            abbreviated_name='abbrev',
            url_fragment='name-three',
            canonical_name='canonical_name_2',
            next_subtopic_id=1,
            language_code='en',
            subtopics=[subtopic_dict],
            subtopic_schema_version=1,
            story_reference_schema_version=0
        )
        commit_cmd_dicts = [commit_cmd.to_dict()]
        model.commit(
            self.user_id_a, 'topic model created', commit_cmd_dicts)

        with self.assertRaisesRegex(
            Exception,
            'Sorry, we can only process v1-v%d story reference schemas at '
            'present.' % feconf.CURRENT_STORY_REFERENCE_SCHEMA_VERSION):
            topic_fetchers.get_topic_from_model(model)
コード例 #6
0
    def test_non_admin_cannot_assign_roles(self):
        topic_services.create_new_topic_rights(
            self.topic_id, self.user_id_admin)
        with self.assertRaisesRegexp(
            Exception,
            'UnauthorizedUserException: Could not assign new role.'):
            topic_services.assign_role(
                self.user_b, self.user_id_a,
                topic_domain.ROLE_MANAGER, self.topic_id)

        topic_rights = topic_services.get_topic_rights(self.topic_id)
        self.assertFalse(topic_services.check_can_edit_topic(
            self.user_a, topic_rights))
        self.assertFalse(topic_services.check_can_edit_topic(
            self.user_b, topic_rights))
コード例 #7
0
    def test_reassigning_manager_role_to_same_user(self):
        topic_services.create_new_topic_rights(self.topic_id,
                                               self.user_id_admin)
        topic_services.assign_role(self.user_admin, self.user_id_a,
                                   topic_domain.ROLE_MANAGER, self.topic_id)
        with self.assertRaisesRegexp(
                Exception, 'This user already is a manager for this topic'):
            topic_services.assign_role(self.user_admin, self.user_id_a,
                                       topic_domain.ROLE_MANAGER,
                                       self.topic_id)

        topic_rights = topic_services.get_topic_rights(self.topic_id)
        self.assertTrue(
            topic_services.check_can_edit_topic(self.user_a, topic_rights))
        self.assertFalse(
            topic_services.check_can_edit_topic(self.user_b, topic_rights))
コード例 #8
0
    def setUp(self):
        super(EditTopicDecoratorTest, self).setUp()
        self.signup(self.ADMIN_EMAIL, self.ADMIN_USERNAME)
        self.signup(self.manager_email, self.manager_username)
        self.signup(self.viewer_email, self.viewer_username)
        self.set_admins([self.ADMIN_USERNAME])
        self.set_topic_managers([self.manager_username])

        self.admin_id = self.get_user_id_from_email(self.ADMIN_EMAIL)
        self.manager_id = self.get_user_id_from_email(self.manager_email)
        self.admin = user_services.UserActionsInfo(self.admin_id)
        self.manager = user_services.UserActionsInfo(self.manager_id)

        self.mock_testapp = webtest.TestApp(webapp2.WSGIApplication(
            [webapp2.Route('/mock/<topic_id>', self.MockHandler)],
            debug=feconf.DEBUG,
        ))
        topic_services.create_new_topic_rights(self.topic_id, self.admin_id)
        topic_services.assign_role(
            self.admin, self.manager_id, topic_domain.ROLE_MANAGER,
            self.topic_id)
コード例 #9
0
ファイル: topic_services_test.py プロジェクト: ledriod/oppia
    def test_migrate_subtopic_to_latest_schema(self):
        topic_services.create_new_topic_rights('topic_id', 'user_id_admin')
        commit_cmd = topic_domain.TopicChange({
            'cmd': topic_domain.CMD_CREATE_NEW,
            'name': 'name'
        })
        subtopic_dict = {
            'id': 1,
            'title': 'subtopic_title',
            'skill_ids': []
        }
        model = topic_models.TopicModel(
            id='topic_id',
            name='name',
            canonical_name='Name',
            next_subtopic_id=1,
            language_code='en',
            subtopics=[subtopic_dict],
            subtopic_schema_version=1
        )
        commit_cmd_dicts = [commit_cmd.to_dict()]
        model.commit(
            'user_id_admin', 'topic model created', commit_cmd_dicts)

        swap_topic_object = self.swap(topic_domain, 'Topic', MockTopicObject)
        current_schema_version_swap = self.swap(
            feconf, 'CURRENT_SUBTOPIC_SCHEMA_VERSION', 2)

        with swap_topic_object, current_schema_version_swap:
            topic = topic_services.get_topic_from_model(model)

        self.assertEqual(topic.subtopic_schema_version, 2)
        self.assertEqual(topic.name, 'name')
        self.assertEqual(topic.canonical_name, 'name')
        self.assertEqual(topic.next_subtopic_id, 1)
        self.assertEqual(topic.language_code, 'en')
        self.assertEqual(len(topic.subtopics), 1)
        self.assertEqual(topic.subtopics[0].to_dict(), subtopic_dict)