def test_related_asmts_in_different_audits_mapped_to_mapped_controls( self, program, selenium): """Objects structure: Program -> Control-1 -> Control-2 Control-1 and Control-2 are mapped. -> Audit-1 -> Asmt-1 mapped to Control-1 -> Audit-2 -> Asmt-2 mapped to Control-2 As a result, assessments are related.""" controls = [rest_facade.create_control(program) for _ in xrange(2)] rest_facade.map_objs(controls[0], controls[1]) audits = [rest_facade.create_audit(program) for _ in xrange(2)] assessments = [ _create_mapped_asmt(audit=audit, assessment_type="Control", objs_to_map=[control]) for control, audit in zip(controls, audits) ] related_asmts_titles = [(assessments[1].title, controls[1].title, audits[1].title)] self._assert_asmt_with_related_asmts( checked_asmt=assessments[0], related_asmts_titles=related_asmts_titles, selenium=selenium)
def test_data(self, control_reader_role, selenium): """Create 2 GC users. GC 1 creates Control and adds GC 2 as a control reader. """ if not TestProposals._data: control_creator = rest_facade.create_user_with_role(roles.CREATOR) proposal_creator = rest_facade.create_user_with_role(roles.CREATOR) global_reader = rest_facade.create_user_with_role(roles.READER) users.set_current_user(control_creator) control_custom_roles = [ (control_reader_role.name, control_reader_role.id, [proposal_creator]) ] control = rest_facade.create_control( custom_roles=control_custom_roles) users.set_current_user(proposal_creator) proposal = proposal_ui_facade.create_proposal(selenium, control) users.set_current_user(control_creator) proposal.datetime = (proposal_rest_service.ProposalsService(). get_proposal_creation_date(control, proposal)) users.set_current_user(global_reader) proposal_from_gr = proposal_ui_facade.create_proposal( selenium, control) proposal_from_gr.datetime = ( proposal_rest_service.ProposalsService( ).get_proposal_creation_date(control, proposal_from_gr)) TestProposals._data = { "control_creator": control_creator, "proposal_creator": proposal_creator, "global_reader": global_reader, "control": control, "proposal": proposal, "proposal_from_gr": proposal_from_gr } return TestProposals._data
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_control()] 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_data(self): """Objects structure: Program -> Control -> Audit (Auditor is a user with global creator role) """ editor = rest_facade.create_user_with_role(roles.EDITOR) creator = rest_facade.create_user_with_role(roles.CREATOR) users.set_current_user(editor) program = rest_facade.create_program() control = rest_facade.create_control(program=program) audit = rest_facade.create_audit(program, auditors=[creator]) return { "editor": editor, "creator": creator, "program": program, "audit": audit, "control": control }
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() control = rest_facade.create_control(program) objs.extend([program, control]) 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(selenium, obj)
def test_related_asmts_in_different_audits_mapped_to_mapped_controls( self, program, selenium ): """Objects structure: Program -> Control-1 -> Control-2 Control-1 and Control-2 are mapped. -> Audit-1 -> Asmt-1 mapped to Control-1 -> Audit-2 -> Asmt-2 mapped to Control-2 As a result, assessments are related.""" controls = [rest_facade.create_control(program) for _ in xrange(2)] rest_facade.map_objs(controls[0], controls[1]) audits = [rest_facade.create_audit(program) for _ in xrange(2)] assessments = [_create_mapped_asmt( audit=audit, assessment_type="Control", objs_to_map=[control]) for control, audit in zip(controls, audits)] related_asmts_titles = [ (assessments[1].title, controls[1].title, audits[1].title)] self._assert_asmt_with_related_asmts( checked_asmt=assessments[0], related_asmts_titles=related_asmts_titles, selenium=selenium)
def product_mapped_to_control(product): """Creates a product mapped to control.""" control = rest_facade.create_control() rest_facade.map_objs(product, control) return product
def control_mapped_to_program(program): """Create a control mapped to the program""" return rest_facade.create_control(program)
def controls_mapped_to_program(program): """Create 2 controls mapped to the program""" return [rest_facade.create_control(program) for _ in xrange(2)]
def control_mapped_to_program(program): """Create a control mapped to the program""" control = rest_facade.create_control() rest_facade.map_objs(program, control) return control
def controls(): """Create 2 controls.""" return [rest_facade.create_control() for _ in xrange(2)]
def controls_mapped_to_program(program): return [rest_facade.create_control(program) for _ in xrange(2)]
def controls_mapped_to_program(program): """Create 2 controls mapped to the program""" controls = [rest_facade.create_control() for _ in xrange(2)] for control in controls: rest_facade.map_objs(program, control) return controls
def control_mapped_to_program(program): return rest_facade.create_control(program)
def control(): """Create a control.""" return rest_facade.create_control()
def tested_events(self, selenium): """Create events to verify events functionality: 0. Save event log count before test data creation, 1. Create control editor role, create 2 users with global creator role under admin 2. Create control#1 under global creator#1 and set global creator#2 to newly created control editor role 3. Create control#2 under global creator#2 and map it control#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 ctrl1_creator = rest_facade.create_user_with_role(roles.CREATOR) ctrl2_creator = rest_facade.create_user_with_role(roles.CREATOR) ctrl_editor_role = rest_facade.create_access_control_role( object_type="Control", read=True, update=True, delete=True) admin = users.current_user() users.set_current_user(ctrl1_creator) ctrl_custom_roles = [(ctrl_editor_role.name, ctrl_editor_role.id, [ctrl2_creator])] ctrl1 = rest_facade.create_control(custom_roles=ctrl_custom_roles) # wait until notification and acl will assigned by background task rest_facade.get_obj(ctrl1) users.set_current_user(ctrl2_creator) ctrl2 = rest_facade.create_control() rest_facade.map_objs(ctrl1, ctrl2) users.set_current_user(admin) # generate expected event data acl_roles_len = 7 exp_event_data = [{ "actions": sorted([ ctrl1_creator.email + " created", u"PersonProfile created" ]), "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime(ctrl1_creator.updated_at) }, { "actions": ["Creator linked to " + ctrl1_creator.email], "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime(ctrl1_creator.updated_at) }, { "actions": sorted([ ctrl2_creator.email + " created", u"PersonProfile created" ]), "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime(ctrl2_creator.updated_at) }, { "actions": ["Creator linked to " + ctrl2_creator.email], "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime(ctrl2_creator.updated_at) }, { "actions": [ctrl_editor_role.name + " created"], "user_email": admin.email, "time": date_utils.iso8601_to_local_datetime( ctrl_editor_role.updated_at) }, { "actions": [u"AccessControlList created"] * acl_roles_len + [u"AccessControlPerson created"] * 2 + [ctrl1.title + " created", u"Security created"], "user_email": ctrl1_creator.email, "time": date_utils.iso8601_to_local_datetime(ctrl1.updated_at) }, { "actions": [u"AccessControlList created"] * acl_roles_len + [ u"AccessControlPerson created", ctrl2.title + " created", u"Security created" ], "user_email": ctrl2_creator.email, "time": date_utils.iso8601_to_local_datetime(ctrl2.updated_at) }, { "actions": [ u"Control:{id2} linked to Control:{id1}".format( id1=ctrl1.id, id2=ctrl2.id) ], "user_email": ctrl2_creator.email, "time": date_utils.iso8601_to_local_datetime(ctrl2.updated_at) }] exp_event_data.reverse() self.__class__._data = { "ctrl1_creator": ctrl1_creator, "ctrl2_creator": ctrl2_creator, "ctrl_editor_role": ctrl_editor_role, "ctrl1": ctrl1, "ctrl2": ctrl2, "exp_added_events": exp_event_data, "initial_count": initial_count } return self.__class__._data