def test_asmts_generation(self, new_program_rest, new_controls_rest, map_new_program_rest_to_new_controls_rest, new_audit_rest, dynamic_new_assessment_template, selenium): """Check if Assessments can be generated from Audit page via Assessments widget using Assessment template and Controls. Preconditions: - Program, Controls created via REST API. - Controls mapped to Program via REST API. - Audit created under Program via REST API. - Assessment Template with CAs created under Audit via REST API. """ expected_asmts = (AssessmentsFactory().generate( objs_under_asmt=new_controls_rest, audit=new_audit_rest, asmt_tmpl=dynamic_new_assessment_template)) (webui_service.AssessmentsService( selenium).generate_objs_via_tree_view( src_obj=new_audit_rest, objs_under_asmt=new_controls_rest, asmt_tmpl_obj=dynamic_new_assessment_template)) actual_asmts_tab_count = ( webui_service.AssessmentsService(selenium).get_count_objs_from_tab( src_obj=new_audit_rest)) assert len(expected_asmts) == actual_asmts_tab_count actual_asmts = [ webui_service.AssessmentsService(selenium).get_obj_from_info_panel( src_obj=new_audit_rest, obj=expected_asmt) for expected_asmt in expected_asmts ] assert expected_asmts == actual_asmts, (messages.ERR_MSG_FORMAT.format( expected_asmts, actual_asmts))
def test_add_comment_to_asmt_via_info_panel(self, new_program_rest, new_audit_rest, new_assessment_rest, selenium): """Check via UI of possibility to correctly add comment to Assessment via Info Panel. Preconditions: - Program created via REST API. - Audit created under Program via REST API. - Assessment created under Audit via REST API. Test parameters: None """ expected_asmt = new_assessment_rest expected_asmt_comments = [ entities_factory.CommentsFactory().create().repr_ui() ] # due to 'actual_asmt.updated_at = None' (expected_asmt.update_attrs(comments=expected_asmt_comments, updated_at=None).repr_ui()) assessments_service = webui_service.AssessmentsService(selenium) asmt_comments_panel = assessments_service.add_comments( src_obj=new_audit_rest, obj=expected_asmt, comment_objs=expected_asmt_comments) assert asmt_comments_panel.is_input_empty is True actual_asmt = (webui_service.AssessmentsService( selenium).get_list_objs_from_info_panels( src_obj=new_audit_rest, objs=expected_asmt).update_attrs(comments={"created_at": None}, is_replace_dicts_values=True)) assert expected_asmt == actual_asmt, ( messages.AssertionMessages.format_err_msg_equal( expected_asmt, actual_asmt))
def test_asmt_creation(self, new_program_rest, new_audit_rest, selenium): """Check if Assessment can be created from Audit page via Assessments widget. Preconditions: - Audit created under Program via REST API. """ expected_asmt = ( entities_factory.AssessmentsFactory().create().repr_ui()) (webui_service.AssessmentsService(selenium).create_obj_via_tree_view( src_obj=new_audit_rest, obj=expected_asmt)) actual_asmts_tab_count = ( webui_service.AssessmentsService(selenium).get_count_objs_from_tab( src_obj=new_audit_rest)) assert len([expected_asmt]) == actual_asmts_tab_count actual_asmts = (webui_service.AssessmentsService( selenium).get_list_objs_from_tree_view(src_obj=new_audit_rest)) # due to 'expected_asmt.updated_at = None' actual_asmts = [ actual_asmt.update_attrs(updated_at=None) for actual_asmt in actual_asmts ] assert [ expected_asmt ] == actual_asmts, (messages.AssertionMessages.format_err_msg_equal( [expected_asmt], actual_asmts))
def test_asmt_creation_with_mapping( self, new_program_rest, dynamic_objects, dynamic_relationships, new_audit_rest, selenium ): """Check if Assessment can be created with mapped snapshot via Modal Create on Assessments TreeView. Additional check existing of mapped objs Titles on Modal Create. Preconditions: - Program, dynamic_objects created via REST API. - dynamic_objects mapped to Program via REST API. - Audit created under Program via REST API. Test parameters: - 'dynamic_objects'. - 'dynamic_relationships'. """ expected_asmt = ( entities_factory.AssessmentsFactory().create( mapped_objects=[dynamic_objects])) expected_titles = [dynamic_objects.title] asmts_ui_service = webui_service.AssessmentsService(selenium) actual_titles = ( asmts_ui_service.create_obj_and_get_mapped_titles_from_modal( src_obj=new_audit_rest, obj=expected_asmt)) assert expected_titles == actual_titles actual_asmt = asmts_ui_service.get_list_objs_from_info_panels( src_obj=new_audit_rest, objs=expected_asmt) expected_asmt = expected_asmt.repr_ui() # 'expected_asmt': custom_attributes (None) *factory self.general_equal_assert( expected_asmt, actual_asmt, "custom_attributes")
def test_add_comment_to_asmt_via_info_panel( self, new_program_rest, new_audit_rest, new_assessment_rest, selenium ): """Check via UI of possibility to correctly add comment to Assessment via Info Panel. Preconditions: - Program created via REST API. - Audit created under Program via REST API. - Assessment created under Audit via REST API. Test parameters: None """ expected_asmt_comments = [entities_factory.CommentsFactory().create()] expected_asmt = new_assessment_rest asmts_ui_service = webui_service.AssessmentsService(selenium) asmt_comments_panel = asmts_ui_service.add_comments( src_obj=new_audit_rest, obj=expected_asmt, comment_objs=expected_asmt_comments) assert asmt_comments_panel.is_input_empty is True # 'expected_asmt_comments': created_at (None) *factory expected_asmt_comments = [expected_comment.update_attrs( created_at=self.info_service.get_comment_obj( paren_obj=expected_asmt, comment_description=expected_comment.description).created_at ).repr_ui() for expected_comment in expected_asmt_comments] # 'expected_asmt': updated_at (outdated) expected_asmt = expected_asmt.update_attrs( updated_at=self.info_service.get_obj(obj=expected_asmt).updated_at, comments=expected_asmt_comments).repr_ui() actual_asmt = asmts_ui_service.get_obj_from_info_page(obj=expected_asmt) self.general_equal_assert(expected_asmt, actual_asmt, "comments") self.xfail_equal_assert( expected_asmt, actual_asmt, "Issue in app GGRC-3094", "comments")
def test_add_comment_to_asmt_via_info_panel(self, program, audit, assessment, selenium): """Check via UI of possibility to correctly add comment to Assessment via Info Panel. Preconditions: - Program created via REST API. - Audit created under Program via REST API. - Assessment created under Audit via REST API. Test parameters: None """ expected_asmt_comments = [entities_factory.CommentsFactory().create()] expected_asmt = assessment asmts_ui_service = webui_service.AssessmentsService(selenium) asmt_comments_panel = asmts_ui_service.add_comments( src_obj=audit, obj=expected_asmt, comment_objs=expected_asmt_comments) assert asmt_comments_panel.comment_input.is_empty is True # 'expected_asmt_comments': created_at (None) *factory expected_asmt_comments = [ expected_comment.update_attrs(created_at=self.info_service( ).get_comment_obj(paren_obj=expected_asmt, comment_description=expected_comment.description ).created_at).repr_ui() for expected_comment in expected_asmt_comments ] # 'expected_asmt': updated_at (outdated) expected_asmt.update_attrs(updated_at=self.info_service().get_obj( obj=expected_asmt).updated_at, comments=expected_asmt_comments, status=object_states.IN_PROGRESS).repr_ui() actual_asmt = asmts_ui_service.get_obj_from_info_page( obj=expected_asmt) # 'actual_asmt': audit (None) self.general_equal_assert(expected_asmt, actual_asmt, "audit")
def test_asmt_from_template_w_dropdown_url(self, program, control_mapped_to_program, audit, selenium): """Check evidence url could be filled in via Assessment dropdown. Objects structure: Program. -> Control mapped to program. -> Audit. -> Asmt template with evidence url dropdown. -> Autogenerated asmt. """ asmt_template_w_dropdown = rest_facade.create_asmt_template_w_dropdown( audit, ["url"]) expected_asmt = rest_facade.create_asmt_from_template_rest( audit, control_mapped_to_program, asmt_template_w_dropdown) dropdown = CustomAttributeDefinitionsFactory().create( **expected_asmt.cads_from_template()[0]) asmt_service = webui_service.AssessmentsService(selenium) exp_url = StringMethods.random_string( size=StringMethods.RANDOM_STR_LENGTH) expected_asmt = asmt_service.choose_and_fill_dropdown_lca( expected_asmt, dropdown, url=exp_url) expected_asmt_urls = [exp_url] expected_asmt.update_attrs( updated_at=self.info_service().get_obj( obj=expected_asmt).updated_at, evidence_urls=expected_asmt_urls, mapped_objects=[control_mapped_to_program.title], status=object_states.IN_PROGRESS).repr_ui() actual_asmt = asmt_service.get_obj_from_info_page(obj=expected_asmt) self.general_equal_assert(expected_asmt, actual_asmt, "audit")
def test_fill_asmt_gcas_in_popup( self, program, gcads_for_asmt, obj, obj_role, selenium ): """Test for checking population of GCA from UI Edit popup. Preconditions: - Program created via REST API. - Audit created via REST API. - Global Custom Attributes for Assessment created via REST API. - Assessment created via REST API. """ user = rest_facade.create_user_with_role(roles.CREATOR) obj_args = {obj_role: [user]} audit = rest_facade.create_audit( program, **obj_args if obj == "audit" else {}) asmt = rest_facade.create_asmt( audit, **obj_args if obj == "assessment" else {}) users.set_current_user(user) custom_attributes = CustomAttributeDefinitionsFactory( ).generate_custom_attributes(gcads_for_asmt) asmts_ui_service = webui_service.AssessmentsService(selenium) asmts_ui_service.fill_obj_gcas_in_popup(asmt, custom_attributes) act_asmt = rest_facade.get_obj(asmt) asmt.update_attrs( updated_at=act_asmt.updated_at, status=act_asmt.status, custom_attributes=custom_attributes) _assert_asmt(asmts_ui_service, asmt)
def test_fill_asmt_lcas(self, control_mapped_to_program, audit, attr_type, selenium): """ 1. Create a program via REST 2. Create a control within a program via REST 3. Create an audit within a program via REST 4. Create an assessment template with each type of local custom attribute within audit via REST 5. Generate an assessment from assessment template and control snapshot via REST 6. Open this assessment in UI 7. Fill local custom attribute 8. Reload page and check that object built from the page looks as expected """ asmt_template = rest_facade.create_asmt_template( audit=audit, assessment_type="Control", cad_type=attr_type) cas = CustomAttributeDefinitionsFactory().generate_custom_attributes([ Representation.repr_dict_to_obj(cad) for cad in asmt_template.custom_attribute_definitions]) exp_asmt = rest_facade.create_asmt_from_template( audit, asmt_template, control_mapped_to_program) asmts_ui_service = webui_service.AssessmentsService(selenium) asmts_ui_service.fill_asmt_lcas(exp_asmt, cas) selenium.refresh() act_asmt = self.info_service().get_obj(obj=exp_asmt) exp_asmt.update_attrs(updated_at=act_asmt.updated_at, status=unicode(object_states.IN_PROGRESS), mapped_objects=[control_mapped_to_program], custom_attributes=cas) _assert_asmt(asmts_ui_service, exp_asmt)
def test_asmts_gcas_filtering( self, new_program_rest, new_audit_rest, new_cas_for_assessments_rest, new_assessments_rest, selenium, operator ): """Test for checking filtering of Assessment by Custom Attributes in audit scope. Preconditions: - Program created via REST API. - Audit created via REST API. - Assessment created via REST API. - Global Custom Attributes for Assessment created via REST API. """ custom_attr_values = ( CustomAttributeDefinitionsFactory().generate_ca_values( list_ca_def_objs=new_cas_for_assessments_rest)) expected_asmt = new_assessments_rest[0] (rest_service.AssessmentsService().update_obj( obj=expected_asmt, custom_attributes=custom_attr_values)) filter_exprs = FilterUtils().get_filter_exprs_by_cas( expected_asmt.custom_attribute_definitions, custom_attr_values, operator) # due to 'actual_asmt.custom_attributes = {None: None}' expected_asmt = expected_asmt.repr_ui().update_attrs( custom_attributes={None: None}, status=AssessmentStates.IN_PROGRESS) expected_results = [{"filter": filter_expr, "objs": [expected_asmt]} for filter_expr in filter_exprs] actual_results = [ {"filter": filter_expr, "objs": webui_service.AssessmentsService(selenium). filter_and_get_list_objs_from_tree_view(new_audit_rest, filter_expr)} for filter_expr in filter_exprs] assert expected_results == actual_results, ( messages.AssertionMessages.format_err_msg_equal(expected_results, actual_results))
def _check_assessments_filtration(assessment, cavs, operator, audit, selenium): """Check that filtration of assessments works.""" # pylint: disable=too-many-locals cads = [Representation.repr_dict_to_obj(cad) for cad in assessment.custom_attribute_definitions] filter_exprs = FilterUtils().get_filter_exprs_by_cavs( cads, cavs, operator) assessment = Representation.extract_objs_wo_excluded_attrs( [assessment.repr_ui()], *(Representation.tree_view_attrs_to_exclude + ( "audit", "assessment_type", "modified_by")) )[0] expected_results = [{"filter": filter_expr, "objs": [assessment]} for filter_expr in filter_exprs] actual_results = [] for filter_expr in filter_exprs: result = { "filter": filter_expr, "objs": webui_service.AssessmentsService( selenium).filter_and_get_list_objs_from_tree_view(audit, filter_expr) } actual_results.append(result) error_message = messages.AssertionMessages.format_err_msg_equal( [{exp_res["filter"]: [exp_obj.title for exp_obj in exp_res["objs"]]} for exp_res in expected_results], [{act_res["filter"]: [act_obj.title for act_obj in act_res["objs"]]} for act_res in actual_results] ) + messages.AssertionMessages.format_err_msg_equal( StringMethods.convert_list_elements_to_list( [exp_res["objs"] for exp_res in expected_results]), StringMethods.convert_list_elements_to_list( [act_res["objs"] for act_res in actual_results])) assert expected_results == actual_results, error_message
def test_asmts_generation(self, program, controls_mapped_to_program, audit, obj, selenium): """Check if Assessments can be generated from Audit page via Assessments widget using Assessment template and Controls. Preconditions: - Program, Controls created via REST API. - Controls mapped to Program via REST API. - Audit created under Program via REST API. Test parameters: - 'dynamic_objects'. """ expected_asmts = (entities_factory.AssessmentsFactory().generate( mapped_objects=controls_mapped_to_program, audit=audit, asmt_tmpl=obj)) expected_asmts = [ expected_asmt.repr_ui() for expected_asmt in expected_asmts ] asmts_ui_service = webui_service.AssessmentsService(selenium) asmts_ui_service.generate_objs_via_tree_view( src_obj=audit, objs_under_asmt=controls_mapped_to_program, asmt_tmpl_obj=obj) actual_asmts_tab_count = asmts_ui_service.get_count_objs_from_tab( src_obj=audit) assert len(expected_asmts) == actual_asmts_tab_count actual_asmts = asmts_ui_service.get_list_objs_from_info_panels( src_obj=audit, objs=expected_asmts) # 'expected_asmt': slug, custom_attributes (None) *factory # 'actual_asmt': audit (None) self.general_equal_assert(expected_asmts, actual_asmts, "slug", "custom_attributes", "audit", "custom_attributes")
def test_check_asmt_state_change( self, new_program_rest, new_audit_rest, dynamic_objects_w_factory_params, action, expected_final_state, expected_verified, selenium ): """Check Assessment workflow status change to correct state. Preconditions: - Program created via REST API. - Audit created under Program via REST API. - Assessment created and updated under Audit via REST API. """ expected_asmt = dynamic_objects_w_factory_params asmts_ui_service = webui_service.AssessmentsService(selenium) # UI part of preparing pre-requirements (due to REST doesn't allow it) if action in ("verify_assessment", "reject_assessment"): getattr(asmts_ui_service, "complete_assessment")(expected_asmt) getattr(asmts_ui_service, action)(expected_asmt) # 'expected_asmt': updated_at (outdated) expected_asmt.update_attrs( title=(element.AssessmentInfoWidget.TITLE_EDITED_PART + expected_asmt.title if "edit" in action else expected_asmt.title), status=expected_final_state.title(), verified=expected_verified, updated_at=self.info_service().get_obj( obj=expected_asmt).updated_at).repr_ui() actual_asmt = asmts_ui_service.get_obj_from_info_page(expected_asmt) # 'actual_asmt': audit (None) self.general_equal_assert(expected_asmt, actual_asmt, "audit")
def test_check_asmt_state_change( self, new_program_rest, new_audit_rest, dynamic_objects_w_factory_params, action, expected_initial_state, expected_final_state, expected_verified, selenium ): """Check Assessment workflow status change to correct state. Preconditions: - Program created via REST API. - Audit created under Program via REST API. - Assessment created and updated under Audit via REST API. """ expected_asmt = dynamic_objects_w_factory_params if expected_initial_state: (rest_service.AssessmentsService(). update_obj(expected_asmt, status=expected_initial_state)) asmts_ui_service = webui_service.AssessmentsService(selenium) getattr(asmts_ui_service, action)(expected_asmt) # 'expected_asmt': updated_at (outdated) expected_asmt = (expected_asmt.update_attrs( title=(element.AssessmentInfoWidget.TITLE_EDITED_PART + expected_asmt.title if "edit" in action else expected_asmt.title), status=expected_final_state.title(), verified=expected_verified, updated_at=self.info_service.get_obj( obj=expected_asmt).updated_at).repr_ui()) actual_asmt = asmts_ui_service.get_obj_from_info_page(expected_asmt) self.general_equal_assert(expected_asmt, actual_asmt)
def test_asmt_from_template_w_date(self, control_mapped_to_program, audit, selenium): """ 1. Create a program via REST 2. Create a control within a program via REST 3. Create an audit within a program via REST 4. Create an assessment template with Date local custom attribute within audit via REST 5. Generate an assessment from assessment template and control snapshot via REST 6. Open this assessment in UI 7. Fill Date local custom attribute 8. Reload page and check that object built from the page looks as expected """ cad = CustomAttributeDefinitionsFactory().create( is_add_rest_attrs=True, attribute_type=AdminWidgetCustomAttributes.DATE) assessment_template = _create_asmt_template(audit=audit, assessment_type="Control", custom_attributes=[cad]) exp_asmt = rest_facade.create_assessment_from_template( audit=audit, template=assessment_template, control_snapshots=[control_mapped_to_program]) asmts_ui_service = webui_service.AssessmentsService(selenium) asmts_ui_service.open_info_page_of_obj_fill_lca(exp_asmt) act_asmt = self.info_service().get_obj(obj=exp_asmt) exp_asmt.update_attrs(updated_at=act_asmt.updated_at, status=act_asmt.status) _assert_asmt(asmts_ui_service, exp_asmt, True)
def test_map_snapsots_to_asmt_via_edit_modal( self, new_program_rest, dynamic_objects, dynamic_relationships, new_audit_rest, new_assessment_rest, selenium ): """Check Assessment can be mapped with snapshot via Modal Edit on Assessments Info Page. Additional check existing of mapped obj Titles on Modal Edit. Preconditions: - Program, dynamic_objects created via REST API. - dynamic_objects mapped to Program via REST API. - Audit created under Program via REST API. - Assessment created under audit via REST API. Test parameters: - 'dynamic_objects'. - 'dynamic_relationships'. """ expected_asmt = (new_assessment_rest.update_attrs( objects_under_assessment=[dynamic_objects], status=AssessmentStates.IN_PROGRESS)) expected_titles = [dynamic_objects.title] asmts_ui_service = webui_service.AssessmentsService(selenium) actual_titles = ( asmts_ui_service.map_objs_and_get_mapped_titles_from_edit_modal( expected_asmt, expected_asmt.objects_under_assessment)) assert expected_titles == actual_titles # 'expected_asmt': updated_at (outdated) expected_asmt = ( expected_asmt.update_attrs(updated_at=self.info_service.get_obj( obj=expected_asmt).updated_at).repr_ui()) actual_asmt = asmts_ui_service.get_obj_from_info_page(expected_asmt) self.general_equal_assert(expected_asmt, actual_asmt)
def test_asmt_creation(self, new_audit_rest, selenium): """Check if Assessment can be created from Audit page via Assessments widget. Preconditions: - Audit created under Program via REST API. """ audit = new_audit_rest[0] expected_asmt = AssessmentsFactory().create() (webui_service.AssessmentsService(selenium). create_via_tree_view(source_obj=audit, asmt_obj=expected_asmt)) actual_asmts_tab_count = (webui_service.AssessmentsService(selenium). get_count_from_tab(source_obj=audit)) assert len([expected_asmt]) == actual_asmts_tab_count actual_asmts = (webui_service.AssessmentsService(selenium). get_objs_from_tree_view(source_obj=audit)) assert [expected_asmt] == actual_asmts, ( messages.ERR_MSG_FORMAT.format([expected_asmt], actual_asmts))
def test_asmts_gcas_filtering( self, new_program_rest, new_audit_rest, new_cas_for_assessments_rest, new_assessments_rest, operator, selenium ): """Test for checking filtering of Assessment by Custom Attributes in audit scope. Preconditions: - Program created via REST API. - Audit created via REST API. - Assessments created via REST API. - Global Custom Attributes for Assessment created via REST API. - Set revers value of GCA with Checkbox type for second Assessment. """ # pylint: disable=too-many-locals custom_attr_values = ( CustomAttributeDefinitionsFactory().generate_ca_values( list_ca_def_objs=new_cas_for_assessments_rest)) checkbox_id = entity.Entity.filter_objs_by_attrs( objs=new_cas_for_assessments_rest, attribute_type=element.AdminWidgetCustomAttributes.CHECKBOX).id expected_asmt = new_assessments_rest[0] asmts_rest_service = rest_service.AssessmentsService() asmts_rest_service.update_obj( obj=expected_asmt, custom_attributes=custom_attr_values) asmts_rest_service.update_obj( obj=new_assessments_rest[1], custom_attributes={checkbox_id: not custom_attr_values[checkbox_id]}) filter_exprs = FilterUtils().get_filter_exprs_by_cas( expected_asmt.custom_attribute_definitions, custom_attr_values, operator) # 'expected_asmt': updated_at (outdated) # 'actual_asmts': created_at, updated_at, custom_attributes (None) expected_asmt = entity.Entity.extract_objs_wo_excluded_attrs( [expected_asmt.update_attrs( status=AssessmentStates.IN_PROGRESS).repr_ui()], *Representation.tree_view_attrs_to_exclude)[0] expected_results = [{"filter": filter_expr, "objs": [expected_asmt]} for filter_expr in filter_exprs] actual_results = [ {"filter": filter_expr, "objs": entity.Entity.extract_objs_wo_excluded_attrs( webui_service.AssessmentsService( selenium).filter_and_get_list_objs_from_tree_view( new_audit_rest, filter_expr), *("updated_at", "custom_attributes")) } for filter_expr in filter_exprs] assert expected_results == actual_results, ( messages.AssertionMessages.format_err_msg_equal( [{exp_res["filter"]: [exp_obj.title for exp_obj in exp_res["objs"]] } for exp_res in expected_results], [{act_res["filter"]: [act_obj.title for act_obj in act_res["objs"]] } for act_res in actual_results]) + messages.AssertionMessages.format_err_msg_equal( string_utils.convert_list_elements_to_list( [exp_res["objs"] for exp_res in expected_results]), string_utils.convert_list_elements_to_list( [act_res["objs"] for act_res in actual_results])))
def test_mapped_obj_title_in_edit_modal( self, program, control_mapped_to_program, audit, assessment, selenium ): """Test that mapped objects appear in modal after mapping.""" webui_service.AssessmentsService(selenium).open_info_page_of_obj( assessment).three_bbs.select_edit() edit_asmt_modal = object_modal.AssessmentModal(selenium) edit_asmt_modal.map_objects([control_mapped_to_program]) actual_titles = edit_asmt_modal.get_mapped_snapshots_titles() assert actual_titles == [control_mapped_to_program.title]
def test_asmts_generation(self, new_program_rest, new_controls_rest, map_new_program_rest_to_new_controls_rest, new_audit_rest, dynamic_new_assessment_template, selenium): """Check if Assessments can be generated from Audit page via Assessments widget using Assessment template and Controls. Preconditions: - Program, Controls created via REST API. - Controls mapped to Program via REST API. - Audit created under Program via REST API. - Assessment Template with CAs created under Audit via REST API. """ expected_asmts = (entities_factory.AssessmentsFactory().generate( objs_under_asmt=new_controls_rest, audit=new_audit_rest, asmt_tmpl=dynamic_new_assessment_template)) expected_asmts = [ expected_asmt.repr_ui() for expected_asmt in expected_asmts ] (webui_service.AssessmentsService( selenium).generate_objs_via_tree_view( src_obj=new_audit_rest, objs_under_asmt=new_controls_rest, asmt_tmpl_obj=dynamic_new_assessment_template)) actual_asmts_tab_count = ( webui_service.AssessmentsService(selenium).get_count_objs_from_tab( src_obj=new_audit_rest)) assert len(expected_asmts) == actual_asmts_tab_count actual_asmts = (webui_service.AssessmentsService( selenium).get_list_objs_from_info_panels(src_obj=new_audit_rest, objs=expected_asmts)) # due to 'expected_asmt.updated_at = None', # 'expected_asmt.custom_attributes = {None: None}' actual_asmts = [ actual_asmt.update_attrs(is_replace_attrs=True, slug=None).update_attrs( is_replace_attrs=False, custom_attributes={None: None}) for actual_asmt in actual_asmts ] assert expected_asmts == actual_asmts, ( messages.AssertionMessages.format_err_msg_equal( expected_asmts, actual_asmts))
def _assert_asmt_with_related_asmts(self, checked_asmt, related_asmts_titles, selenium): """Assert that assessment `checked_asmt` on UI is the same as in `checked_asmt`. Also assert that `Asessment title`, `Related objects`, `Audit title` on "Related Assessments" tab are the same as in `related_asmts_titles`.""" asmts_ui_service = webui_service.AssessmentsService(selenium) _assert_asmt(asmts_ui_service, checked_asmt) assert asmts_ui_service.get_asmt_related_asmts_titles(checked_asmt) == \ related_asmts_titles
def test_mapped_objs_titles_in_create_modal(self, program, control_mapped_to_program, audit, selenium): """Test that mapped objects appear in modal after mapping.""" webui_service.AssessmentsService(selenium).open_widget_of_mapped_objs( audit).tree_view.open_create() create_asmt_modal = object_modal.AssessmentModal(selenium) create_asmt_modal.map_objects([control_mapped_to_program]) actual_titles = create_asmt_modal.get_mapped_snapshots_titles() assert actual_titles == [control_mapped_to_program.title]
def test_asmt_related_asmts(self, new_programs_rest, new_control_rest, map_new_control_rest_to_new_programs_rest, new_audits_rest, new_assessments_rest, selenium): """Test for checking Related Assessments. Map two Assessments to one snapshot of control. And check second Assessment contains in "Related Assessments" Tab of first Assessment. 3 Titles will be compared: Assessment, Audit of Assessment, generic Control """ expected_titles = [(new_assessments_rest[1].title, new_control_rest.title, new_audits_rest[1].title)] asmt_service = webui_service.AssessmentsService(selenium) asmt_service.map_objs_via_tree_view_item(src_obj=new_audits_rest[0], dest_objs=[new_control_rest]) asmt_service.map_objs_via_tree_view_item(src_obj=new_audits_rest[1], dest_objs=[new_control_rest]) related_asmts_objs = (webui_service.AssessmentsService( selenium).get_related_asmts_titles(obj=new_assessments_rest[0])) assert expected_titles == related_asmts_objs
def _assert_asmt_with_related_issues(self, checked_asmt, related_issues_titles, selenium): """Assert that assessment `checked_asmt` on UI is the same as in `checked_asmt`. Also assert that `Issues title` on "Related Issues" tab are the same as in `related_issues_titles`.""" asmts_ui_service = webui_service.AssessmentsService(selenium) _assert_asmt(asmts_ui_service, checked_asmt) assert asmts_ui_service.get_related_issues_titles( checked_asmt) == related_issues_titles
def soft_assert_verified_state_after_bulk_verify(page, src_obj, soft_assert): """Soft assert that assessments statuses actually have been updated after bulk verify has been completed.""" bulk_verify_all(page) # reload page to see actual assessments state browsers.get_browser().refresh() asmts_from_ui = (webui_service.AssessmentsService() .get_list_objs_from_tree_view(src_obj)) soft_assert.expect( all([asmt.status == object_states.COMPLETED and asmt.verified is True for asmt in asmts_from_ui]), "All assessments should be verified and have 'Completed' state.")
def test_raise_issue(self, program, audit, assessment, selenium): """Test for checking raising Issues in Related Issues Tab. Open Related Issues tab on Assessments Info page. Raise Issue with pre-defined attributes via "raise issue" button. Compare expected Issue title and actual issue_titles. """ expected_issue = (entities_factory.IssuesFactory().create().repr_ui()) asmts_ui_service = webui_service.AssessmentsService(selenium) asmts_ui_service.raise_issue(assessment, expected_issue) related_issues_titles = asmts_ui_service.get_related_issues_titles( obj=assessment) assert related_issues_titles == [expected_issue.title]
def test_non_clonable_objs_donot_move_to_cloned_audit( self, create_and_clone_audit, selenium): """Check via UI that non clonable objects Assessment, Issue do not move to cloned Audit. Preconditions: - Execution and return of fixture 'create_and_clone_audit'. """ actual_audit = create_and_clone_audit["actual_audit"] actual_asmts_tab_count = ( webui_service.AssessmentsService(selenium).get_count_objs_from_tab( src_obj=actual_audit)) actual_asmts = (webui_service.AssessmentsService( selenium).get_list_objs_from_tree_view(src_obj=actual_audit)) actual_issues_tab_count = ( webui_service.IssuesService(selenium).get_count_objs_from_tab( src_obj=actual_audit)) actual_issues = ( webui_service.IssuesService(selenium).get_list_objs_from_tree_view( src_obj=actual_audit)) assert actual_asmts_tab_count == actual_issues_tab_count == 0 assert bool(actual_asmts) == bool(actual_issues) == 0
def test_asmt_logs( self, new_program_rest, new_audit_rest, new_assessment_rest, selenium ): """Test for validation of Assessment log pane. Acceptance criteria: 1) 3 log items at the log pane 2) all items return 'True' for all attrs. """ log_items_validation = webui_service.AssessmentsService( selenium).get_log_pane_validation_result(obj=new_assessment_rest) log_validation_results = [all(item_result.values()) for item_result in log_items_validation] assert ([True] * 3) == log_validation_results, str(log_items_validation)
def test_add_person_to_acl_list(self, program, audit, selenium): """Test that an assessment assignee can add a person to ACL""" assignee = rest_facade.create_user_with_role(roles.CREATOR) primary_contact = rest_facade.create_user_with_role(roles.CREATOR) asmt = rest_facade.create_assessment(audit, assignees=[assignee]) users.set_current_user(assignee) asmt_service = webui_service.AssessmentsService(selenium) asmt_service.add_primary_contact(asmt, primary_contact) selenium.refresh() actual_asmt = asmt_service.get_obj_from_info_page(asmt) asmt.update_attrs(updated_at=rest_facade.get_obj(asmt).updated_at, primary_contacts=[primary_contact], modified_by=assignee).repr_ui() self.general_equal_assert(asmt, actual_asmt, "audit")
def test_asmts_generation(self, map_controls_to_program_rest, new_controls_rest, new_asmt_tmpl_rest, selenium): """Check if Assessments can be generated from Audit page via Assessments widget using Assessment template and Controls. Preconditions: - Program, Controls created via REST API. - Controls mapped to Program via REST API. - Audit created under Program via REST API. - Assessment Template created under Audit via REST API. """ asmt_tmpl, audit, _ = new_asmt_tmpl_rest expected_asmts = (AssessmentsFactory().generate( objs_under_asmt_tmpl=new_controls_rest, audit=audit)) (webui_service.AssessmentsService(selenium). generate_via_tree_view(source_obj=audit, asmt_tmpl_obj=asmt_tmpl, objs_under_asmt=new_controls_rest)) actual_asmts_tab_count = (webui_service.AssessmentsService(selenium). get_count_from_tab(source_obj=audit)) assert len(expected_asmts) == actual_asmts_tab_count actual_asmts = (webui_service.AssessmentsService(selenium). get_objs_from_tree_view(source_obj=audit)) assert expected_asmts == actual_asmts, ( messages.ERR_MSG_FORMAT.format(expected_asmts, actual_asmts))