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))
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)
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))
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)
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)
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))
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))
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)
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)