def test_delete_object(self): site = Site( name="Test Site 1", slug="test-site-1", custom_field_data={"my_field": "ABC", "my_field_select": "Bar"}, ) site.save() self.create_tags("Tag 1", "Tag 2") site.tags.set("Tag 1", "Tag 2") request = { "path": self._get_url("delete", instance=site), "data": post_data({"confirm": True}), } self.add_permissions("dcim.delete_site") response = self.client.post(**request) self.assertHttpStatus(response, 302) oc = ObjectChange.objects.first() self.assertEqual(oc.changed_object, None) self.assertEqual(oc.object_repr, site.name) self.assertEqual(oc.action, ObjectChangeActionChoices.ACTION_DELETE) self.assertEqual(oc.object_data["custom_fields"]["my_field"], "ABC") self.assertEqual(oc.object_data["custom_fields"]["my_field_select"], "Bar") self.assertEqual(oc.object_data["tags"], ["Tag 1", "Tag 2"])
def test_create_object(self): tags = self.create_tags("Tag 1", "Tag 2") form_data = { "name": "Test Site 1", "slug": "test-site-1", "status": Status.objects.get(slug="active").pk, "cf_my_field": "ABC", "cf_my_field_select": "Bar", "tags": [tag.pk for tag in tags], } request = { "path": self._get_url("add"), "data": post_data(form_data), } self.add_permissions("dcim.add_site", "extras.view_tag", "extras.view_status") response = self.client.post(**request) self.assertHttpStatus(response, 302) # Verify the creation of a new ObjectChange record site = Site.objects.get(name="Test Site 1") # First OC is the creation; second is the tags update oc = ObjectChange.objects.get( changed_object_type=ContentType.objects.get_for_model(Site), changed_object_id=site.pk, ) self.assertEqual(oc.changed_object, site) self.assertEqual(oc.action, ObjectChangeActionChoices.ACTION_CREATE) self.assertEqual(oc.object_data["custom_fields"]["my_field"], form_data["cf_my_field"]) self.assertEqual(oc.object_data["custom_fields"]["my_field_select"], form_data["cf_my_field_select"]) self.assertEqual(oc.object_data["tags"], ["Tag 1", "Tag 2"])
def test_update_object(self): site = Site( name="Test Site 1", slug="test-site-1", status=Status.objects.get(slug="active"), ) site.save() tags = self.create_tags("Tag 1", "Tag 2", "Tag 3") site.tags.set("Tag 1", "Tag 2") form_data = { "name": "Test Site X", "slug": "test-site-x", "status": Status.objects.get(slug="planned").pk, "cf_my_field": "DEF", "cf_my_field_select": "Foo", "tags": [tags[2].pk], } request = { "path": self._get_url("edit", instance=site), "data": post_data(form_data), } self.add_permissions("dcim.change_site", "extras.view_tag", "extras.view_status") response = self.client.post(**request) self.assertHttpStatus(response, 302) # Verify the creation of a new ObjectChange record site.refresh_from_db() oc = ObjectChange.objects.filter( changed_object_type=ContentType.objects.get_for_model(Site), changed_object_id=site.pk, ).first() self.assertEqual(oc.changed_object, site) self.assertEqual(oc.action, ObjectChangeActionChoices.ACTION_UPDATE) self.assertEqual(oc.object_data["custom_fields"]["my_field"], form_data["cf_my_field"]) self.assertEqual( oc.object_data["custom_fields"]["my_field_select"], form_data["cf_my_field_select"], ) self.assertEqual(oc.object_data["tags"], ["Tag 3"])
def test_schema_validation_fails(self): """ Given a config context schema And a config context that *does not* conform to that schema Assert that the config context fails schema validation via full_clean() """ schema = ConfigContextSchema.objects.create( name="Schema 1", slug="schema-1", data_schema={"type": "object", "properties": {"foo": {"type": "integer"}}} ) self.add_permissions("extras.add_configcontext") self.add_permissions("extras.view_configcontextschema") form_data = { "name": "Config Context with bad schema", "weight": 200, "description": "A new config context", "is_active": True, "regions": [], "sites": [], "roles": [], "device_types": [], "platforms": [], "tenant_groups": [], "tenants": [], "tags": [], "data": '{"foo": "bar"}', "schema": schema.pk, } # Try POST with model-level permission request = { "path": self._get_url("add"), "data": post_data(form_data), } self.assertHttpStatus(self.client.post(**request), 200) self.assertEqual(self._get_queryset().filter(name="Config Context with schema").count(), 0)