def test_object_creation(self, role, selenium): """Test that users with all global roles can create, then edit and delete objects. """ user = rest_facade.create_user_with_role(role_name=role) users.set_current_user(user) objs = [rest_facade.create_program(), rest_facade.create_objective()] for obj in objs: webui_facade.assert_can_edit(selenium, obj, can_edit=True) webui_facade.assert_can_delete(selenium, obj, can_delete=True)
def test_permissions(self, users_with_all_roles, login_role, can_view, can_edit, selenium): # pylint: disable=too-many-arguments """Test that users have permissions to objects created by other users according to their global role. """ objs = [] other_roles = [role for role in self.ALL_ROLES if role != login_role] for role in other_roles: users.set_current_user(users_with_all_roles[role]) program = rest_facade.create_program() objective = rest_facade.create_objective() objs.extend([program, objective]) users.set_current_user(users_with_all_roles[login_role]) for obj in objs: if can_view: webui_facade.assert_can_view(selenium, obj) webui_facade.assert_can_edit(selenium, obj, can_edit=can_edit) webui_facade.assert_can_delete(selenium, obj, can_delete=can_edit) else: webui_facade.assert_cannot_view(obj)
def objectives_mapped_to_program(program): """Create 2 objectives mapped to the program""" return [rest_facade.create_objective(program) for _ in xrange(2)]
def objective_mapped_to_program(program): """Create an objective mapped to the program""" return rest_facade.create_objective(program)
def tested_events(self, selenium): """Create events to verify events functionality: 0. Save event log count before test data creation, 1. Create objective editor role, create 2 users with global creator role under admin 2. Create objective#1 under global creator#1 and set global creator#2 to newly created objective editor role 3. Create objective#2 under global objective#2 and map it objective#1 """ if not self.__class__._data: # generate enough data, so test can be executed independently for _ in xrange(6): rest_facade.create_user_with_role(roles.READER) initial_count = self.get_event_tab().tab_events.count objctv1_creator = rest_facade.create_user_with_role(roles.CREATOR) objctv2_creator = rest_facade.create_user_with_role(roles.CREATOR) objctv_editor_role = rest_facade.create_access_control_role( object_type="Objective", read=True, update=True, delete=True) admin = users.current_user() users.set_current_user(objctv1_creator) objctv_custom_roles = [(objctv_editor_role.name, objctv_editor_role.id, [objctv2_creator])] objctv1 = rest_facade.create_objective( custom_roles=objctv_custom_roles) # wait until notification and acl will assigned by background task rest_facade.get_obj(objctv1_creator) users.set_current_user(objctv2_creator) objctv2 = rest_facade.create_objective() rest_facade.map_objs(objctv1, objctv2) users.set_current_user(admin) # generate expected event data from lib.constants.roles import ACLRolesIDs # 3 predefined program roles and 1 predefined reviewer role acl_roles_len = len(ACLRolesIDs.object_roles(objctv1.type)) - 4 exp_event_data = [{ "actions": sorted([ objctv1_creator.email + " created", u"PersonProfile created" ]), "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime( objctv1_creator.updated_at) }, { "actions": ["Creator linked to " + objctv1_creator.email], "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime( objctv1_creator.updated_at) }, { "actions": sorted([ objctv2_creator.email + " created", u"PersonProfile created" ]), "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime( objctv2_creator.updated_at) }, { "actions": ["Creator linked to " + objctv2_creator.email], "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime( objctv2_creator.updated_at) }, { "actions": [objctv_editor_role.name + " created"], "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime( objctv_editor_role.updated_at) }, { "actions": [u"AccessControlList created"] * acl_roles_len + [u"AccessControlPerson created"] * 2 + [objctv1.title + " created"], "user_email": objctv1_creator.email, "time": date_utils.iso8601_to_local_datetime(objctv1.updated_at) }, { "actions": [u"AccessControlList created"] * acl_roles_len + [u"AccessControlPerson created", objctv2.title + " created"], "user_email": objctv2_creator.email, "time": date_utils.iso8601_to_local_datetime(objctv2.updated_at) }, { "actions": [ u"{type2}:{id2} linked to {type1}:{id1}".format( id1=objctv1.id, id2=objctv2.id, type1=objctv1.type, type2=objctv2.type) ], "user_email": objctv2_creator.email, "time": date_utils.iso8601_to_local_datetime(objctv2.updated_at) }] exp_event_data.reverse() self.__class__._data = { "objctv1_creator": objctv1_creator, "objctv2_creator": objctv2_creator, "objctv_editor_role": objctv_editor_role, "objctv1": objctv1, "objctv2": objctv2, "exp_added_events": exp_event_data, "initial_count": initial_count } return self.__class__._data
def objectives_mapped_to_program(program): return [rest_facade.create_objective(program) for _ in xrange(2)]
def objective_mapped_to_program(program): return rest_facade.create_objective(program)
def tested_events(self, selenium): """Create events to verify events functionality: 0. Save event log count before test data creation, 1. Create objective editor role, create 2 users with global creator role under admin 2. Create objective#1 under global creator#1 and set global creator#2 to newly created objective editor role 3. Create objective#2 under global objective#2 and map it objective#1 """ if not self.__class__._data: # generate enough data, so test can be executed independently for _ in xrange(6): rest_facade.create_user_with_role(roles.READER) initial_count = self.get_event_tab().tab_events.count objctv1_creator = rest_facade.create_user_with_role(roles.CREATOR) objctv2_creator = rest_facade.create_user_with_role(roles.CREATOR) objctv_editor_role = rest_facade.create_access_control_role( object_type="Objective", read=True, update=True, delete=True) admin = users.current_user() users.set_current_user(objctv1_creator) objctv_custom_roles = [ (objctv_editor_role.name, objctv_editor_role.id, [objctv2_creator]) ] objctv1 = rest_facade.create_objective(custom_roles=objctv_custom_roles) # wait until notification and acl will assigned by background task rest_facade.get_obj(objctv1_creator) users.set_current_user(objctv2_creator) objctv2 = rest_facade.create_objective() rest_facade.map_objs(objctv1, objctv2) users.set_current_user(admin) # generate expected event data from lib.constants.roles import ACLRolesIDs # 3 predefined program roles and 1 predefined reviewer role acl_roles_len = len(ACLRolesIDs.object_roles(objctv1.type)) - 4 exp_event_data = [ {"actions": sorted( [objctv1_creator.email + " created", u"PersonProfile created"]), "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime( objctv1_creator.updated_at)}, {"actions": ["Creator linked to " + objctv1_creator.email], "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime( objctv1_creator.updated_at)}, {"actions": sorted( [objctv2_creator.email + " created", u"PersonProfile created"]), "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime( objctv2_creator.updated_at)}, {"actions": ["Creator linked to " + objctv2_creator.email], "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime( objctv2_creator.updated_at)}, {"actions": [objctv_editor_role.name + " created"], "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime( objctv_editor_role.updated_at)}, {"actions": [u"AccessControlList created"] * acl_roles_len + [u"AccessControlPerson created"] * 2 + [objctv1.title + " created"], "user_email": objctv1_creator.email, "time": date_utils.iso8601_to_local_datetime(objctv1.updated_at)}, {"actions": [u"AccessControlList created"] * acl_roles_len + [u"AccessControlPerson created", objctv2.title + " created"], "user_email": objctv2_creator.email, "time": date_utils.iso8601_to_local_datetime(objctv2.updated_at)}, {"actions": [u"{type2}:{id2} linked to {type1}:{id1}".format( id1=objctv1.id, id2=objctv2.id, type1=objctv1.type, type2=objctv2.type)], "user_email": objctv2_creator.email, "time": date_utils.iso8601_to_local_datetime(objctv2.updated_at)} ] exp_event_data.reverse() self.__class__._data = { "objctv1_creator": objctv1_creator, "objctv2_creator": objctv2_creator, "objctv_editor_role": objctv_editor_role, "objctv1": objctv1, "objctv2": objctv2, "exp_added_events": exp_event_data, "initial_count": initial_count } return self.__class__._data