def get_comment_obj(self, paren_obj, comment_description): """Get and return comment object according to 'paren_obj' type) and comment_description 'paren_obj'. As default 'is_sort_by_created_at' and if even comments have the same descriptions query return selection w/ latest created datetime. """ @test_utils.wait_for def get_obj_comment_response_values(): """Get values fom response.""" # pylint: disable=invalid-name filters = query.Query.expression_get_comment_by_desc( parent_type=paren_obj.type, parent_id=paren_obj.id, comment_desc=comment_description) order_by = [{"name": "created_at", "desc": True}] return self.get_obj_dict(objects.get_obj_type(objects.COMMENTS), filters=filters, order_by=order_by) comment = entities_factory.CommentsFactory().create() comment.__dict__.update({ k: v for k, v in get_obj_comment_response_values[0].iteritems() if v and k not in [ "type", ] }) return comment
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_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_from_template_w_dropdown_comment(self, program, control_mapped_to_program, audit, selenium): """Check evidence comment could be filled in via Assessment dropdown. Objects structure: Program. -> Control mapped to program. -> Audit. -> Asmt template with evidence comment dropdown. -> Autogenerated asmt. """ asmt_template_w_dropdown = rest_facade.create_asmt_template_w_dropdown( audit, ["comment"]) 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) expected_asmt_comments = [entities_factory.CommentsFactory().create()] asmt_service.choose_and_fill_dropdown_lca( expected_asmt, dropdown.id, dropdown.multi_choice_options, comment=expected_asmt_comments[0].description) 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.update_attrs( updated_at=self.info_service().get_obj( obj=expected_asmt).updated_at, comments=expected_asmt_comments, mapped_objects=[control_mapped_to_program.title], status=AssessmentStates.IN_PROGRESS).repr_ui() expected_asmt_comments_descriptions = [ comment.description for comment in expected_asmt_comments ] actual_asmt = asmt_service.get_obj_from_info_page(obj=expected_asmt) actual_asmt_comments_descriptions = [ comment["description"] for comment in actual_asmt.comments ] self.general_equal_assert(expected_asmt, actual_asmt, "audit", "comments") assert expected_asmt_comments_descriptions \ == actual_asmt_comments_descriptions
def test_set_comment_for_dropdown_lca(self, program, control_mapped_to_program, login_role, obj, obj_role, selenium): """Check evidence comment could be filled in via Assessment dropdown. Objects structure: Program. -> Control mapped to program. -> Audit. -> Asmt template with evidence comment dropdown. -> Autogenerated asmt. """ # pylint: disable=too-many-locals user = rest_facade.create_user_with_role(login_role) obj_args = {obj_role: [user]} audit = rest_facade.create_audit(program, **obj_args if obj == "audit" else {}) comment_text = entities_factory.CommentsFactory().create().description asmt_template_w_dropdown = rest_facade.create_asmt_template( audit, cad_type=AdminWidgetCustomAttributes.DROPDOWN, dropdown_types_list=["comment"], **obj_args if obj == "assessment" else {}) expected_asmt = rest_facade.create_asmt_from_template( audit, asmt_template_w_dropdown, [control_mapped_to_program]) dropdown = CustomAttributeDefinitionsFactory().create( **expected_asmt.cads_from_template()[0]) users.set_current_user(user) asmt_service = webui_service.AssessmentsService(selenium) asmt_service.choose_and_fill_dropdown_lca(expected_asmt, dropdown, comment=comment_text) rest_asmt_obj = self.info_service().get_obj(obj=expected_asmt) expected_asmt.update_attrs( custom_attributes={ dropdown.title.upper(): dropdown.multi_choice_options }, updated_at=rest_asmt_obj.updated_at, modified_by=rest_asmt_obj.modified_by, 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) actual_comment_texts = [ comment["description"] for comment in actual_asmt.comments ] self.general_equal_assert(expected_asmt, actual_asmt, "audit", "comments") assert actual_comment_texts == [comment_text]
def submit_obj_for_review(selenium, obj, reviewer): """Submit object for review scenario. Returns obj with assigned review.""" review_comment = string_utils.StringMethods.random_string() _get_ui_service(selenium, obj).submit_for_review(obj, reviewer.email, review_comment) obj.update_attrs(review=entities_factory.ReviewsFactory().create( reviewers=reviewer)) exp_comment = entities_factory.CommentsFactory( ).create(description=element.Common.REVIEW_COMMENT_PATTERN.format( # reviewers emails in review comment message need to be sorted # as they are displayed in UI in random order emails=', '.join(sorted(obj.review["reviewers"])), comment=review_comment)) exp_comment.created_at = rest_service.ObjectsInfoService().get_comment_obj( paren_obj=obj, comment_description=review_comment).created_at obj.comments = [exp_comment.repr_ui()] return obj