class TestCollection(TestCase, WithQueryApi): """Test for collection assessment objects.""" def setUp(self): super(TestCollection, self).setUp() self.client.get("/login") self.clear_data() self.expected_ids = [] self.api = Api() self.generator = ObjectGenerator() assessments = [factories.AssessmentFactory() for _ in range(10)] random.shuffle(assessments) for idx, assessment in enumerate(assessments): comment = factories.CommentFactory(description=str(idx)) factories.RelationshipFactory(source=assessment, destination=comment) self.expected_ids.append(assessment.id) @data(True, False) def test_order_by_test(self, desc): """Order by fultext attr""" query = self._make_query_dict("Assessment", order_by=[{ "name": "comment", "desc": desc }]) expected_ids = self.expected_ids if desc: expected_ids = expected_ids[::-1] results = self._get_first_result_set(query, "Assessment", "values") self.assertEqual(expected_ids, [i['id'] for i in results]) @data("Assessor", "Creator", "Verifier") def test_delete_assessment_by_role(self, role_name): """Delete assessment not allowed for based on Assignee Type.""" with factories.single_commit(): assessment = factories.AssessmentFactory() context = factories.ContextFactory(related_object=assessment) assessment.context = context person = factories.PersonFactory() object_person_rel = factories.RelationshipFactory( source=assessment, destination=person) factories.RelationshipAttrFactory( relationship_id=object_person_rel.id, attr_name="AssigneeType", attr_value=role_name, ) assessment_id = assessment.id role = all_models.Role.query.filter( all_models.Role.name == "Creator").first() self.generator.generate_user_role(person, role, context) self.api.set_user(person) assessment = all_models.Assessment.query.get(assessment_id) resp = self.api.delete(assessment) self.assert403(resp) self.assertTrue( all_models.Assessment.query.filter( all_models.Assessment.id == assessment_id).one())
class TestCollection(TestCase, WithQueryApi): """Test for collection assessment objects.""" def setUp(self): super(TestCollection, self).setUp() self.client.get("/login") self.clear_data() self.expected_ids = [] self.api = Api() self.generator = ObjectGenerator() assessments = [factories.AssessmentFactory() for _ in range(10)] random.shuffle(assessments) for idx, assessment in enumerate(assessments): comment = factories.CommentFactory(description=str(idx)) factories.RelationshipFactory(source=assessment, destination=comment) self.expected_ids.append(assessment.id) @data(True, False) def test_order_by_test(self, desc): """Order by fultext attr""" query = self._make_query_dict( "Assessment", order_by=[{"name": "comment", "desc": desc}] ) expected_ids = self.expected_ids if desc: expected_ids = expected_ids[::-1] results = self._get_first_result_set(query, "Assessment", "values") self.assertEqual(expected_ids, [i['id'] for i in results]) @data("Assessor", "Creator", "Verifier") def test_delete_assessment_by_role(self, role_name): """Delete assessment not allowed for based on Assignee Type.""" with factories.single_commit(): assessment = factories.AssessmentFactory() context = factories.ContextFactory(related_object=assessment) assessment.context = context person = factories.PersonFactory() object_person_rel = factories.RelationshipFactory( source=assessment, destination=person) factories.RelationshipAttrFactory( relationship_id=object_person_rel.id, attr_name="AssigneeType", attr_value=role_name, ) assessment_id = assessment.id role = all_models.Role.query.filter( all_models.Role.name == "Creator" ).first() self.generator.generate_user_role(person, role, context) self.api.set_user(person) assessment = all_models.Assessment.query.get(assessment_id) resp = self.api.delete(assessment) self.assert403(resp) self.assertTrue(all_models.Assessment.query.filter( all_models.Assessment.id == assessment_id).one())
class TestCollection(TestCase, WithQueryApi): """Test for collection assessment objects.""" def setUp(self): super(TestCollection, self).setUp() self.client.get("/login") self.clear_data() self.api = Api() self.generator = ObjectGenerator() @ddt.data(True, False) def test_order_by_test(self, desc): """Order by fultext attr""" expected_ids = [] with factories.single_commit(): assessments = [factories.AssessmentFactory() for _ in range(10)] random.shuffle(assessments) with factories.single_commit(): for idx, assessment in enumerate(assessments): comment = factories.CommentFactory(description=str(idx)) factories.RelationshipFactory(source=assessment, destination=comment) expected_ids.append(assessment.id) query = self._make_query_dict("Assessment", order_by=[{ "name": "comment", "desc": desc }]) if desc: expected_ids = expected_ids[::-1] results = self._get_first_result_set(query, "Assessment", "values") self.assertEqual(expected_ids, [i['id'] for i in results]) @ddt.data("Assessor", "Creator", "Verifier") def test_delete_assessment_by_role(self, role_name): """Delete assessment not allowed for based on Assignee Type.""" with factories.single_commit(): assessment = factories.AssessmentFactory() context = factories.ContextFactory(related_object=assessment) assessment.context = context person = factories.PersonFactory() object_person_rel = factories.RelationshipFactory( source=assessment, destination=person) factories.RelationshipAttrFactory( relationship_id=object_person_rel.id, attr_name="AssigneeType", attr_value=role_name, ) assessment_id = assessment.id role = all_models.Role.query.filter( all_models.Role.name == "Creator").first() self.generator.generate_user_role(person, role, context) self.api.set_user(person) assessment = all_models.Assessment.query.get(assessment_id) resp = self.api.delete(assessment) self.assert403(resp) self.assertTrue( all_models.Assessment.query.filter( all_models.Assessment.id == assessment_id).one()) @ddt.data( (all_models.Assessment.REWORK_NEEDED, True), (all_models.Assessment.DONE_STATE, True), (all_models.Assessment.FINAL_STATE, True), (all_models.Assessment.START_STATE, False), ) @ddt.unpack def test_update_status_need_rework(self, status, is_valid): """Update assessment state from need rework to valid or invalid states.""" with factories.single_commit(): assessment = factories.AssessmentFactory( status=all_models.Assessment.REWORK_NEEDED) assessment_id = assessment.id resp = self.api.put(assessment, {"status": status}) if is_valid: self.assert200(resp) check_status = status else: self.assert400(resp) check_status = all_models.Assessment.REWORK_NEEDED self.assertEqual(check_status, all_models.Assessment.query.get(assessment_id).status)
class TestPermissionsOnAssessmentTemplate(TestCase): """ Test check permissions for ProgramEditor on get and post assessment_temaplte action""" def setUp(self): super(TestPermissionsOnAssessmentTemplate, self).setUp() self.api = Api() self.generator = ObjectGenerator() _, program = self.generator.generate_object(all_models.Program) program_id = program.id _, self.editor = self.generator.generate_person(user_role="Creator") role = perms.all_models.Role.query.filter( perms.all_models.Role.name == "ProgramEditor").first() self.generator.generate_user_role( self.editor, role, all_models.Program.query.get(program_id)) _, audit = self.generator.generate_object( all_models.Audit, { "title": "Audit", "program": { "id": program_id }, "status": "Planned" }, ) audit_id = audit.id generated_at = self.generator.generate_object( all_models.AssessmentTemplate, { "title": "Template", "_NON_RELEVANT_OBJ_TYPES": {}, "_objectTypes": {}, "audit": { "id": audit.id }, "audit_title": audit.title, "people_value": [], "default_people": { "assignees": "Admin", "verifiers": "Admin", }, "context": { "id": audit.context.id }, }) self.assessment_template_resp, assessment_template = generated_at assessment_template_id = assessment_template.id self.api.set_user(self.editor) self.perms_data = self.api.client.get("/permissions").json self.audit = all_models.Audit.query.get(audit_id) self.assessment_template = all_models.AssessmentTemplate.query.get( assessment_template_id) def test_post_action(self): """Test create action on AssessmentTemplate created by api""" data = [{ "assessment_template": { "_NON_RELEVANT_OBJ_TYPES": {}, "_objectTypes": {}, "audit": { "id": self.audit.id }, "audit_title": self.audit.title, "people_value": [], "default_people": { "assignees": "Admin", "verifiers": "Admin", }, "context": { "id": self.audit.context.id }, "title": "123", } }] self.api.set_user(self.editor) resp = self.api.post(all_models.AssessmentTemplate, data) self.assert200(resp) def test_get_action(self): """Test read action on AssessmentTemplate created by api""" resp = self.api.get(all_models.AssessmentTemplate, self.assessment_template.id) self.assert200(resp) def test_put_action(self): """Test update action on AssessmentTemplate created by api""" to_update = copy.deepcopy(self.assessment_template_resp.json) new_title = "new_{}".format(self.assessment_template.title) to_update['assessment_template']['title'] = new_title resp = self.api.put(self.assessment_template, to_update) self.assert200(resp) assessment_tmpl = all_models.AssessmentTemplate.query.get( self.assessment_template.id) self.assertEqual(new_title, assessment_tmpl.title) def test_delete_action(self): """Test delete action on AssessmentTemplate created by api""" resp = self.api.delete(self.assessment_template) self.assert200(resp) self.assertFalse( all_models.AssessmentTemplate.query.filter( all_models.AssessmentTemplate == self.assessment_template.id).all())
class TestPermissionsOnAssessmentTemplate(TestCase): """ Test check permissions for ProgramEditor on get and post assessment_temaplte action""" def setUp(self): super(TestPermissionsOnAssessmentTemplate, self).setUp() self.api = Api() self.generator = ObjectGenerator() _, program = self.generator.generate_object(all_models.Program) program_id = program.id _, self.editor = self.generator.generate_person( user_role="Creator" ) role = perms.all_models.Role.query.filter( perms.all_models.Role.name == "ProgramEditor" ).first() self.generator.generate_user_role( self.editor, role, all_models.Program.query.get(program_id) ) _, audit = self.generator.generate_object( all_models.Audit, { "title": "Audit", "program": {"id": program_id}, "status": "Planned" }, ) audit_id = audit.id generated_at = self.generator.generate_object( all_models.AssessmentTemplate, { "title": "Template", "_NON_RELEVANT_OBJ_TYPES": {}, "_objectTypes": {}, "audit": {"id": audit.id}, "audit_title": audit.title, "people_value": [], "default_people": { "assessors": "Object Owners", "verifiers": "Object Owners", }, "context": {"id": audit.context.id}, } ) self.assessment_template_resp, assessment_template = generated_at assessment_template_id = assessment_template.id self.api.set_user(self.editor) self.perms_data = self.api.client.get("/permissions").json self.audit = all_models.Audit.query.get(audit_id) self.assessment_template = all_models.AssessmentTemplate.query.get( assessment_template_id) def test_post_action(self): """Test create action on AssessmentTemplate created by api""" data = [{ "assessment_template": { "_NON_RELEVANT_OBJ_TYPES": {}, "_objectTypes": {}, "audit": {"id": self.audit.id}, "audit_title": self.audit.title, "people_value": [], "default_people": { "assessors": "Object Owners", "verifiers": "Object Owners", }, "context": {"id": self.audit.context.id}, "title": "123", } }] self.api.set_user(self.editor) resp = self.api.post(all_models.AssessmentTemplate, data) self.assert200(resp) def test_get_action(self): """Test read action on AssessmentTemplate created by api""" resp = self.api.get(all_models.AssessmentTemplate, self.assessment_template.id) self.assert200(resp) def test_put_action(self): """Test update action on AssessmentTemplate created by api""" to_update = copy.deepcopy(self.assessment_template_resp.json) new_title = "new_{}".format(self.assessment_template.title) to_update['assessment_template']['title'] = new_title resp = self.api.put(self.assessment_template, to_update) self.assert200(resp) assessment_tmpl = all_models.AssessmentTemplate.query.get( self.assessment_template.id ) self.assertEqual(new_title, assessment_tmpl.title) def test_delete_action(self): """Test delete action on AssessmentTemplate created by api""" resp = self.api.delete(self.assessment_template) self.assert200(resp) self.assertFalse(all_models.AssessmentTemplate.query.filter( all_models.AssessmentTemplate == self.assessment_template.id).all())
class TestCollection(TestCase, WithQueryApi): """Test for collection assessment objects.""" def setUp(self): super(TestCollection, self).setUp() self.client.get("/login") self.clear_data() self.api = Api() self.generator = ObjectGenerator() @ddt.data(True, False) def test_order_by_test(self, desc): """Order by fultext attr""" expected_ids = [] with factories.single_commit(): assessments = [factories.AssessmentFactory() for _ in range(10)] random.shuffle(assessments) with factories.single_commit(): for idx, assessment in enumerate(assessments): comment = factories.CommentFactory(description=str(idx)) factories.RelationshipFactory(source=assessment, destination=comment) expected_ids.append(assessment.id) query = self._make_query_dict( "Assessment", order_by=[{"name": "comment", "desc": desc}] ) if desc: expected_ids = expected_ids[::-1] results = self._get_first_result_set(query, "Assessment", "values") self.assertEqual(expected_ids, [i['id'] for i in results]) @ddt.data("Assignees", "Creators", "Verifiers") def test_delete_assessment_by_role(self, role_name): """Delete assessment not allowed for based on Assignee Type.""" with factories.single_commit(): assessment = factories.AssessmentFactory() context = factories.ContextFactory(related_object=assessment) assessment.context = context person = factories.PersonFactory() ac_role = all_models.AccessControlRole.query.filter_by( object_type=assessment.type, name=role_name ).first() factories.AccessControlListFactory( person=person, ac_role=ac_role, object=assessment ) assessment_id = assessment.id role = all_models.Role.query.filter( all_models.Role.name == "Creator" ).first() self.generator.generate_user_role(person, role, context) self.api.set_user(person) assessment = all_models.Assessment.query.get(assessment_id) resp = self.api.delete(assessment) self.assert403(resp) self.assertTrue(all_models.Assessment.query.filter( all_models.Assessment.id == assessment_id).one()) @ddt.data( (all_models.Assessment.REWORK_NEEDED, True), (all_models.Assessment.DONE_STATE, True), (all_models.Assessment.FINAL_STATE, True), (all_models.Assessment.START_STATE, False), ) @ddt.unpack def test_update_status_need_rework(self, status, is_valid): """Update assessment state from need rework to valid or invalid states.""" with factories.single_commit(): assessment = factories.AssessmentFactory( status=all_models.Assessment.REWORK_NEEDED ) assessment_id = assessment.id resp = self.api.put(assessment, {"status": status}) if is_valid: self.assert200(resp) check_status = status else: self.assert400(resp) check_status = all_models.Assessment.REWORK_NEEDED self.assertEqual( check_status, all_models.Assessment.query.get(assessment_id).status)