def mapped_obj(request, obj): """Fixture calls other fixture to create an object and map it to object from 'obj' fixture.""" if hasattr(request, "param") and request.param and obj: obj_to_map = request.getfixturevalue(request.param) rest_facade.map_objs(obj_to_map, obj) return obj_to_map
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 _create_asmt_mapped_to_control_mapped_to_issue(self, asmt_type, audit, control, issue): """Map 'control' to 'issue'. Return create assessment with 'asmt_type' and map to 'control'.""" rest_facade.map_objs(control, issue) return _create_mapped_asmt(audit=audit, assessment_type=asmt_type, objs_to_map=[control])
def audit_w_manually_mapped_control_and_obj_mapped_to_control( program, control_mapped_to_program, obj_mapped_to_control): """"Create an audit within program and manually map it to control and object mapped to control.""" audit = rest_facade.create_audit(program=program, manual_snapshots=True) rest_facade.map_objs(audit, control_mapped_to_program) rest_facade.map_objs(obj_mapped_to_control, audit) return audit
def _create_asmt_mapped_to_control_mapped_to_issue( self, asmt_type, audit, control, issue ): """Map 'control' to 'issue'. Return create assessment with 'asmt_type' and map to 'control'.""" rest_facade.map_objs(control, issue) return _create_mapped_asmt( audit=audit, assessment_type=asmt_type, objs_to_map=[control])
def programs_with_audit_and_techenv(mapped_programs, technology_environment): """Creates 2 programs (the second program is a child of the first one) and 1 technology environment objects, then creates an Audit in scope of program 2 and finally maps Technology Environment object to Audit.""" audit = rest_facade.create_audit(mapped_programs[1]) rest_facade.map_objs(audit, technology_environment) return {'programs': mapped_programs, 'audit': audit, 'techenv': technology_environment}
def programs_with_audit_and_techenv(programs, technology_environment): """Creates 2 programs and 1 technology environment objects, then maps second program to first as a child, then creates an Audit in scope of program 2 and finally maps Technology Environment object to Audit.""" first_program, second_program = programs rest_facade.map_objs(first_program, second_program) audit = rest_facade.create_audit(second_program) rest_facade.map_objs(audit, technology_environment) return { 'programs': programs, 'audit': audit, 'techenv': technology_environment }
def test_mapping_objectives_to_control_via_rest( self, control, obj, is_map_again, selenium ): """Check if Objectives can be mapped to Control via REST.""" # pylint: disable=too-many-arguments expected_status_code = RestClient.STATUS_CODES["OK"] mapping_responses = rest_facade.map_objs(control, obj) assert all(expected_status_code == response.status_code for response in mapping_responses) assert (rest_facade.map_objs(control, obj)[0].status_code == expected_status_code) if is_map_again else True actual_objectives_tab_count = ( webui_service.ObjectivesService(selenium).get_count_objs_from_tab( src_obj=control)) assert (len(help_utils.convert_to_list(obj)) == actual_objectives_tab_count)
def test_availability_mapping_of_objects_via_mapper_and_add_widget( self, create_audit_with_control_and_update_control, obj, selenium ): """Check availability mapping of objects to Assessment and Issue via UI using Unified Mapper functionality and AddWidget button on Horizontal Nav Bar. Steps: - Get list of available objects from Unified Mapper; - Get list of available objects from HNB; - Compare their with constant of expected objects accordingly. """ expected_objs_names_from_mapper = ( objects.ALL_SNAPSHOTABLE_OBJS + (objects.ISSUES, )) if obj.type == objects.get_obj_type(objects.ISSUES): rest_facade.map_objs( create_audit_with_control_and_update_control["audit"], obj) expected_objs_names_from_mapper = expected_objs_names_from_mapper + ( objects.PROGRAMS, objects.PROJECTS, objects.DOCUMENTS) expected_objs_names_from_add_widget = expected_objs_names_from_mapper expected_objs_types_from_mapper = sorted( objects.get_normal_form(obj_name) for obj_name in expected_objs_names_from_mapper) expected_objs_types_from_add_widget = sorted( objects.get_normal_form(obj_name) for obj_name in expected_objs_names_from_add_widget) mapped_audit = create_audit_with_control_and_update_control["audit"] obj_ui_service = get_cls_webui_service( objects.get_plural(obj.type))(selenium) actual_objs_types_from_mapper = ( obj_ui_service.get_objs_available_to_map_via_mapper( src_obj=mapped_audit)) actual_objs_types_from_add_widget = ( obj_ui_service.get_objs_available_to_map_via_add_widget( src_obj=obj)) assert (expected_objs_types_from_mapper == actual_objs_types_from_mapper), ( messages.AssertionMessages.format_err_msg_equal( expected_objs_types_from_mapper, actual_objs_types_from_mapper)) assert (expected_objs_types_from_add_widget == actual_objs_types_from_add_widget), ( messages.AssertionMessages.format_err_msg_equal( expected_objs_types_from_add_widget, actual_objs_types_from_add_widget))
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 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 standard_mapped_to_control(control, standard): """Creates a Standard mapped to Control.""" rest_facade.map_objs(standard, control) return standard
def product_mapped_to_control(control, product): """Creates a product mapped to control.""" rest_facade.map_objs(product, control) return product
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 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 map_new_assessment_rest_to_new_control_rest_snapshot( assessment, control_mapped_to_program): """Map Assessment to Control object via REST API return response from server. """ return rest_facade.map_objs(assessment, control_mapped_to_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 obj_mapped_to_control(request, control_mapped_to_program): """Fixture calls other fixture to create an object and map the object to Control.""" obj = request.getfixturevalue(request.param) rest_facade.map_objs(obj, control_mapped_to_program) return obj
def map_new_assessment_rest_to_new_control_rest_snapshot( assessment, control_mapped_to_program ): """Map Assessment to Control object via REST API return response from server. """ return rest_facade.map_objs(assessment, control_mapped_to_program)
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
def mapped_programs(programs): """Creates 2 programs and maps the second program to the first one as a child""" rest_facade.map_objs(*programs) return programs