def test_change_empty_mapping_list(self): """Test create mapping list proposal to empty.""" with factories.single_commit(): category = factories.ControlCategoryFactory() control = factories.ControlFactory(categories=[category]) data = control.log_json() category_id = category.id control_id = control.id data["categories"] = [] resp = self.api.post( all_models.Proposal, {"proposal": { "instance": { "id": control.id, "type": control.type, }, # "content": {"123": 123}, "full_instance_content": data, "agenda": "update categories", "context": None, }}) self.assertEqual(201, resp.status_code) control = all_models.Control.query.get(control_id) category = all_models.ControlCategory.query.get(category_id) self.assertEqual(1, len(control.proposals)) self.assertIn("mapping_list_fields", control.proposals[0].content) fields = control.proposals[0].content["mapping_list_fields"] self.assertIn("categories", fields) self.assertEqual( {"added": [], "deleted": [json.loads(utils.as_json(category.log_json()))]}, fields["categories"]) self.assertEqual(1, len(control.comments))
def test_categories_filter(self): """Control Snapshots are filtered by categories.""" with factories.single_commit(): program = factories.ProgramFactory() program_id = program.id category = factories.ControlCategoryFactory(scope_id=100) category_id = category.id control = factories.ControlFactory() control.categories.append(category) control_id = control.id factories.RelationshipFactory(source=program, destination=control) revision = all_models.Revision.query.filter( all_models.Revision.resource_type == "Control", all_models.Revision.resource_id == control_id).order_by( all_models.Revision.updated_at.desc()).first() revision.content = control.log_json() program = models.Program.query.filter_by(id=program_id).one() self._create_audit(program=program, title="some title") category = models.ControlCategory.query.get(category_id) control_result = self._get_first_result_set( self._make_snapshot_query_dict( "Control", expression=["categories", "=", "{}".format(category.name)]), "Snapshot", ) self.assertEqual(control_result["count"], 1) snapshot_categories = \ control_result["values"][0]["revision"]["content"]["categories"] self.assertEqual(category.name, snapshot_categories[0]["display_name"])
def test_apply_mapping_list(self): """Test apply mapping list proposal.""" with factories.single_commit(): category = factories.ControlCategoryFactory() control = factories.ControlFactory() control_id = control.id category_id = category.id with factories.single_commit(): proposal = factories.ProposalFactory( instance=control, content={ "mapping_list_fields": { "categories": { "deleted": [], "added": [ {"id": category_id, "type": "ControlCategory"}, ] } } }, agenda="agenda content") proposal_id = proposal.id with self.number_obj_revisions_for(control): self.apply_proposal(proposal, apply_reason="approved") control = all_models.Control.query.get(control_id) proposal = all_models.Proposal.query.get(proposal_id) self.assertEqual(proposal.STATES.APPLIED, proposal.status) control = all_models.Control.query.get(control_id) self.assertEqual([all_models.ControlCategory.query.get(category_id)], control.categories) self.assertEqual(1, len(control.comments)) comment = control.comments[0] self.assertEqual(proposal, comment.initiator_instance)
def test_change_empty_mapping_list(self): """Test create mapping list proposal to empty.""" with factories.single_commit(): category = factories.ControlCategoryFactory() control = factories.ControlFactory(categories=[category]) data = control.log_json() category_id = category.id control_id = control.id data["categories"] = [] self.create_proposal(control, full_instance_content=data, agenda="update categories", context=None) control = all_models.Control.query.get(control_id) category = all_models.ControlCategory.query.get(category_id) self.assertEqual(1, len(control.proposals)) self.assertIn("mapping_list_fields", control.proposals[0].content) fields = control.proposals[0].content["mapping_list_fields"] self.assertIn("categories", fields) self.assertEqual( { "added": [], "deleted": [json.loads(utils.as_json(category.log_json()))] }, fields["categories"]) self.assertEqual(1, len(control.comments))
def test_change_mapping_list(self): """Test create mapping list proposal.""" with factories.single_commit(): cat = factories.ControlCategoryFactory() control = factories.ControlFactory(title="1") data = control.log_json() control_id = control.id data["categories"] = [{"id": cat.id, "type": cat.type}] cat_id = cat.id self.create_proposal(control, full_instance_content=data, agenda="update categories", context=None) control = all_models.Control.query.get(control_id) self.assertEqual(1, len(control.proposals)) self.assertIn("mapping_list_fields", control.proposals[0].content) fields = control.proposals[0].content["mapping_list_fields"] self.assertIn("categories", fields) self.assertEqual( { "added": [{ "id": cat_id, "type": "ControlCategory" }], "deleted": [] }, fields["categories"]) self.assertEqual(1, len(control.comments))
def test_simple_categorization(self): category = factories.ControlCategoryFactory(scope_id=100) control = factories.ControlFactory() control.categories.append(category) db.session.commit() self.assertIn(category, control.categories) # be really really sure control = db.session.query(Control).get(control.id) self.assertIn(category, control.categories)
def test_simple_categorization(self): """Check category append to control.""" category = factories.ControlCategoryFactory() control = factories.ControlFactory() control.categories.append(category) db.session.commit() self.assertIn(category, control.categories) # be really really sure control = db.session.query(all_models.Control).get(control.id) self.assertIn(category, control.categories)
def test_apply_mapping_list(self): """Test apply mapping list proposal.""" with factories.single_commit(): category = factories.ControlCategoryFactory() control = factories.ControlFactory() control_id = control.id category_id = category.id with factories.single_commit(): proposal = factories.ProposalFactory( instance=control, content={ "mapping_list_fields": { "categories": { "deleted": [], "added": [ { "id": category_id, "type": "ControlCategory" }, ] } } }, agenda="agenda content") proposal_id = proposal.id revisions = all_models.Revision.query.filter( all_models.Revision.resource_type == control.type, all_models.Revision.resource_id == control.id).all() self.assertEqual(1, len(revisions)) resp = self.api.put( proposal, { "proposal": { "status": proposal.STATES.APPLIED, "apply_reason": "approved", } }) self.assertEqual(200, resp.status_code) control = all_models.Control.query.get(control_id) proposal = all_models.Proposal.query.get(proposal_id) self.assertEqual(proposal.STATES.APPLIED, proposal.status) control = all_models.Control.query.get(control_id) self.assertEqual([all_models.ControlCategory.query.get(category_id)], control.categories) revisions = all_models.Revision.query.filter( all_models.Revision.resource_type == control.type, all_models.Revision.resource_id == control.id).all() self.assertEqual(2, len(revisions)) self.assertEqual(1, len(control.comments)) comment = control.comments[0] self.assertEqual(proposal, comment.initiator_instance)