def test_detail_zaakbesluit_limited_to_authorized_zaken(self): # must show up besluit1 = BesluitFactory.create( for_zaak=True, zaak__zaaktype=self.zaaktype, zaak__vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding. openbaar, ) zaakbesluit1 = ZaakBesluit.objects.get(besluit=besluit1, zaak=besluit1.zaak) # must not show up besluit2 = BesluitFactory.create( for_zaak=True, zaak__vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding. openbaar, ) zaakbesluit2 = ZaakBesluit.objects.get(besluit=besluit2, zaak=besluit2.zaak) # must not show up besluit3 = BesluitFactory.create( for_zaak=True, zaak__zaaktype=self.zaaktype, zaak__vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding. vertrouwelijk, ) zaakbesluit3 = ZaakBesluit.objects.get(besluit=besluit3, zaak=besluit3.zaak) with self.subTest( zaaktype=zaakbesluit1.zaak.zaaktype, vertrouwelijkheidaanduiding=zaakbesluit1.zaak. vertrouwelijkheidaanduiding, ): url = get_operation_url( "zaakbesluit_read", zaak_uuid=zaakbesluit1.zaak.uuid, uuid=zaakbesluit1.uuid, ) response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) # not allowed to see these for zaakbesluit in (zaakbesluit2, zaakbesluit3): with self.subTest( zaaktype=zaakbesluit.zaak.zaaktype, vertrouwelijkheidaanduiding=zaakbesluit.zaak. vertrouwelijkheidaanduiding, ): url = get_operation_url( "zaakbesluit_read", zaak_uuid=zaakbesluit.zaak.uuid, uuid=zaakbesluit.uuid, ) response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_list(self): """ Assert that it's possible to list besluiten for zaken. """ zaak = ZaakFactory.create() besluit = BesluitFactory.create(zaak=zaak) BesluitFactory.create(zaak=None) # unrelated besluit url = reverse("zaakbesluit-list", kwargs={"zaak_uuid": zaak.uuid}) zaakbesluit_url = reverse("zaakbesluit-detail", kwargs={ "zaak_uuid": zaak.uuid, "uuid": besluit.uuid }) response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data, [{ "url": f"http://testserver{zaakbesluit_url}", "uuid": str(besluit.uuid), "besluit": f"http://testserver{reverse(besluit)}", }], )
def test_list_zaakbesluit_limited_to_authorized_zaken(self): # must show up besluit1 = BesluitFactory.create( for_zaak=True, zaak__zaaktype=self.zaaktype, zaak__vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.openbaar, ) zaakbesluit1 = ZaakBesluit.objects.get(besluit=besluit1, zaak=besluit1.zaak) # must not show up besluit2 = BesluitFactory.create( for_zaak=True, zaak__vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.openbaar, ) zaakbesluit2 = ZaakBesluit.objects.get(besluit=besluit2, zaak=besluit2.zaak) # must not show up besluit3 = BesluitFactory.create( for_zaak=True, zaak__zaaktype=self.zaaktype, zaak__vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.vertrouwelijk, ) zaakbesluit3 = ZaakBesluit.objects.get(besluit=besluit3, zaak=besluit3.zaak) with self.subTest( zaaktype=zaakbesluit1.zaak.zaaktype, vertrouwelijkheidaanduiding=zaakbesluit1.zaak.vertrouwelijkheidaanduiding, ): url = reverse( "zaakbesluit-list", kwargs={"zaak_uuid": zaakbesluit1.zaak.uuid} ) zaakbesluit1_url = get_operation_url( "zaakbesluit_read", zaak_uuid=zaakbesluit1.zaak.uuid, uuid=zaakbesluit1.uuid, ) response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) response_data = response.json() self.assertEqual(len(response_data), 1) self.assertEqual( response_data[0]["url"], f"http://testserver{zaakbesluit1_url}" ) # not allowed to see these for zaakbesluit in (zaakbesluit2, zaakbesluit3): with self.subTest( zaaktype=zaakbesluit.zaak.zaaktype, vertrouwelijkheidaanduiding=zaakbesluit.zaak.vertrouwelijkheidaanduiding, ): url = reverse( "zaakbesluit-list", kwargs={"zaak_uuid": zaakbesluit.zaak.uuid} ) response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_delete_zaak_with_related_besluit(self): zaak = ZaakFactory.create() zaak_url = f"http://testserver{reverse(zaak)}" BesluitFactory.create(zaak=zaak) response = self.client.delete(zaak_url) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) error = get_validation_errors(response, "nonFieldErrors") self.assertEqual(error["code"], "pending-besluit-relation")
def test_zaakbesluit(self): zaak = ZaakFactory.create( bronorganisatie=730924658, identificatie="5d940d52-ff5e-4b18-a769-977af9130c04", ) BesluitFactory.create(zaak=zaak, identificatie="12345") zaakbesluit = ZaakBesluit.objects.get() self.assertEqual( zaakbesluit.unique_representation(), "(730924658 - 5d940d52-ff5e-4b18-a769-977af9130c04) - 12345", )
def test_add_resultaat_on_zaak_with_afleidingswijze_vervaldatum_besluit_causes_archiefactiedatum_to_be_set( self, ): """ Add RESULTAAT that causes `archiefactiedatum` to be set. """ zaak = ZaakFactory.create() BesluitFactory.create(zaak=zaak, vervaldatum="2021-01-01") BesluitFactory.create(zaak=zaak, vervaldatum="2020-01-01") zaak_url = get_operation_url("zaak_read", uuid=zaak.uuid) resultaattype = ResultaatTypeFactory.create( archiefactietermijn="P5Y", archiefnominatie=Archiefnominatie.blijvend_bewaren, brondatum_archiefprocedure_afleidingswijze= BrondatumArchiefprocedureAfleidingswijze.vervaldatum_besluit, brondatum_archiefprocedure_procestermijn=None, zaaktype=zaak.zaaktype, ) resultaattype_url = reverse(resultaattype) resultaat_create_url = get_operation_url("resultaat_create") data = { "zaak": zaak_url, "resultaattype": f"http://testserver{resultaattype_url}", "toelichting": "", } response = self.client.post(resultaat_create_url, data) self.assertEqual(response.status_code, status.HTTP_201_CREATED, response.data) # add final status to the case to close it and to calculate archive parameters status_create_url = get_operation_url("status_create") statustype = StatusTypeFactory.create(zaaktype=zaak.zaaktype) statustype_url = reverse(statustype) data = { "zaak": zaak_url, "statustype": f"http://testserver{statustype_url}", "datumStatusGezet": "2018-10-18T20:00:00Z", } response = self.client.post(status_create_url, data) self.assertEqual(response.status_code, status.HTTP_201_CREATED, response.data) zaak.refresh_from_db() self.assertEqual(zaak.archiefactiedatum, date(2026, 1, 1))
def test_delete_while_relation_exists_fails(self): BesluitFactory.create(for_zaak=True) zaakbesluit = ZaakBesluit.objects.get() url = reverse( "zaakbesluit-detail", kwargs={ "zaak_uuid": zaakbesluit.zaak.uuid, "uuid": zaakbesluit.uuid }, ) response = self.client.delete(url) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) error = get_validation_errors(response, "nonFieldErrors") self.assertEqual(error["code"], "inconsistent-relation")
def test_not_both_zaak_besluit(self): zaak = ZaakFactory.create() besluit = BesluitFactory.create() with self.assertRaises(IntegrityError): ObjectInformatieObject.objects.create( informatieobject=self.eio_url, zaak=zaak, besluit=besluit)
def test_zaakbesluiten(self): besluittype = BesluitTypeFactory.create(zaaktypen=[self.zaaktype], concept=False) besluittype_url = f"http://testserver{reverse(besluittype)}" Autorisatie.objects.create( applicatie=self.applicatie, component=ComponentTypes.brc, scopes=[ SCOPE_BESLUITEN_AANMAKEN, SCOPE_BESLUITEN_ALLES_LEZEN, SCOPE_BESLUITEN_ALLES_VERWIJDEREN, ], besluittype=besluittype_url, ) self.assertCreateAllowed( reverse(Besluit), { "besluittype": besluittype_url, "zaak": f"http://testserver{reverse(self.zaak)}", "verantwoordelijke_organisatie": "517439943", # RSIN "identificatie": "123123", "datum": "2018-09-06", "toelichting": "Vergunning verleend.", "ingangsdatum": "2018-10-01", }, ) besluit = BesluitFactory.create(zaak=self.zaak, besluittype=besluittype) self.assertDestroyAllowed(reverse(besluit))
def test_detail(self): zaak = ZaakFactory.create() besluit = BesluitFactory.create(zaak=zaak) # get ZaakBesluit created via signals zaakbesluit = ZaakBesluit.objects.get() url = reverse( "zaakbesluit-detail", kwargs={ "zaak_uuid": zaak.uuid, "uuid": zaakbesluit.uuid }, ) response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data, { "url": f"http://testserver{url}", "uuid": str(zaakbesluit.uuid), "besluit": f"http://testserver{reverse(besluit)}", }, )
def test_create_with_objecttype_other_fail(self): besluit = BesluitFactory.create() eio = EnkelvoudigInformatieObjectFactory.create() eio_path = reverse(eio) eio_url = f"http://testserver{eio_path}" # relate the two BesluitInformatieObjectFactory.create( besluit=besluit, informatieobject=eio.canonical ) besluit_url = reverse(besluit) response = self.client.post( self.list_url, { "object": f"http://testserver{besluit_url}", "informatieobject": eio_url, "objectType": "other", }, ) self.assertEqual( response.status_code, status.HTTP_400_BAD_REQUEST, response.data ) error = get_validation_errors(response, "objectType") self.assertEqual(error["code"], "invalid_choice")
def test_create_with_objecttype_besluit(self): besluit = BesluitFactory.create() eio = EnkelvoudigInformatieObjectFactory.create() # relate the two BesluitInformatieObjectFactory.create(besluit=besluit, informatieobject=eio.canonical) # get OIO created via signals oio = ObjectInformatieObject.objects.get() besluit_url = reverse(besluit) eio_url = reverse(eio) oio_url = reverse("objectinformatieobject-detail", kwargs={"uuid": oio.uuid}) response = self.client.post( self.list_url, { "object": f"http://testserver{besluit_url}", "informatieobject": f"http://testserver{eio_url}", "objectType": "besluit", }, ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual( response.data, { "url": f"http://testserver{oio_url}", "object": f"http://testserver{besluit_url}", "informatieobject": f"http://testserver{eio_url}", "object_type": "besluit", }, )
def test_create_with_objecttype_besluit(self): besluit = BesluitFactory.create() eio = EnkelvoudigInformatieObjectFactory.create() eio_path = reverse(eio) BesluitInformatieObjectFactory.create( besluit=besluit, informatieobject=eio.canonical ) # get OIO created via signals ObjectInformatieObject.objects.get() besluit_url = reverse(besluit) response = self.client.post( self.list_url, { "object": f"http://testserver{besluit_url}", "informatieobject": f"http://testserver{eio_path}", "objectType": "besluit", }, ) self.assertEqual( response.status_code, status.HTTP_400_BAD_REQUEST, response.data ) error = get_validation_errors(response, "nonFieldErrors") self.assertEqual(error["code"], "unique")
def test_zaakbesluit_create_fail_send_notification_create_db_entry(self): besluit = BesluitFactory.create(for_zaak=True) besluit_url = reverse(besluit) url = reverse("zaakbesluit-list", kwargs={"zaak_uuid": besluit.zaak.uuid}) response = self.client.post( url, data={"besluit": f"http://testserver{besluit_url}",} ) self.assertEqual(response.status_code, status.HTTP_201_CREATED, response.data) data = response.json() self.assertEqual(StatusLog.objects.count(), 1) logged_warning = StatusLog.objects.get() failed = FailedNotification.objects.get() message = { "aanmaakdatum": "2019-01-01T12:00:00Z", "actie": "create", "hoofdObject": f"http://testserver{reverse(besluit.zaak)}", "kanaal": "zaken", "kenmerken": { "bronorganisatie": besluit.zaak.bronorganisatie, "zaaktype": f"http://testserver{reverse(besluit.zaak.zaaktype)}", "vertrouwelijkheidaanduiding": besluit.zaak.vertrouwelijkheidaanduiding, }, "resource": "zaakbesluit", "resourceUrl": data["url"], } self.assertEqual(failed.statuslog_ptr, logged_warning) self.assertEqual(failed.message, message)
def test_read_with_objecttype_besluit(self): besluit = BesluitFactory.create() eio = EnkelvoudigInformatieObjectFactory.create() eio_path = reverse(eio) eio_url = f"http://testserver{eio_path}" # relate the two BesluitInformatieObjectFactory.create( besluit=besluit, informatieobject=eio.canonical ) # get OIO created via signals oio = ObjectInformatieObject.objects.get() oio_url = reverse("objectinformatieobject-detail", kwargs={"uuid": oio.uuid}) besluit_url = reverse(besluit) response = self.client.get(oio_url) expeceted_response_data = { "url": f"http://testserver{oio_url}", "object": f"http://testserver{besluit_url}", "informatieobject": eio_url, "object_type": "besluit", } self.assertEqual(response.status_code, status.HTTP_200_OK, response.data) self.assertEqual(response.data, expeceted_response_data)
def test_delete_besluit_with_zaak(self): besluit = BesluitFactory.create(for_zaak=True) self.assertEqual(ZaakBesluit.objects.count(), 1) besluit.delete() self.assertEqual(ZaakBesluit.objects.count(), 0)
def test_create(self): besluit = BesluitFactory.create(for_zaak=True) besluit_url = reverse(besluit) url = reverse("zaakbesluit-list", kwargs={"zaak_uuid": besluit.zaak.uuid}) response = self.client.post(url, {"besluit": besluit_url}) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test_update_besluit_remove_zaak(self): besluit = BesluitFactory.create(for_zaak=True) self.assertEqual(ZaakBesluit.objects.count(), 1) besluit.zaak = None besluit.save() self.assertEqual(ZaakBesluit.objects.count(), 0)
def test_update_besluit_without_zaak(self): besluit = BesluitFactory.create(for_zaak=False) self.assertEqual(ZaakBesluit.objects.count(), 0) besluit.toelichting = "new desc" besluit.save() self.assertEqual(ZaakBesluit.objects.count(), 0)
def test_not_both_zaak_besluit(self): canonical = EnkelvoudigInformatieObjectCanonicalFactory.create() zaak = ZaakFactory.create() besluit = BesluitFactory.create() with self.assertRaises(IntegrityError): ObjectInformatieObject.objects.create( informatieobject=canonical, zaak=zaak, besluit=besluit )
def test_create_besluit_with_zaak(self): besluit = BesluitFactory.create(for_zaak=True) self.assertEqual(ZaakBesluit.objects.count(), 1) zaakbesluit = ZaakBesluit.objects.get() self.assertEqual(zaakbesluit.besluit, besluit) self.assertEqual(zaakbesluit.zaak, besluit.zaak)
def test_detail(self): zaak = ZaakFactory.create() besluit = BesluitFactory.create(zaak=zaak) BesluitFactory.create(zaak=None) # unrelated besluit url = reverse("zaakbesluit-detail", kwargs={ "zaak_uuid": zaak.uuid, "uuid": besluit.uuid }) response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data, { "url": f"http://testserver{url}", "uuid": str(besluit.uuid), "besluit": f"http://testserver{reverse(besluit)}", }, )
def create_besluit(self, **kwargs): from openzaak.components.besluiten.tests.factories import BesluitFactory from openzaak.tests.utils import mock_service_oas_get zaak = self.create_zaak() besluit = BesluitFactory.create(zaak=zaak, **kwargs) mock_service_oas_get(self.adapter, APITypes.brc, self.base_besluit) self.adapter.get( make_absolute_uri(reverse(besluit)), json={"zaak": make_absolute_uri(reverse(zaak))}, ) return besluit
def test_update_besluit_add_zaak(self): besluit = BesluitFactory.create(for_zaak=False) self.assertEqual(ZaakBesluit.objects.count(), 0) zaak = ZaakFactory.create() besluit.zaak = zaak besluit.save() self.assertEqual(ZaakBesluit.objects.count(), 1) zaakbesluit = ZaakBesluit.objects.get() self.assertEqual(zaakbesluit.besluit, besluit) self.assertEqual(zaakbesluit.zaak, besluit.zaak)
def test_create(self): zaak = ZaakFactory.create() besluit = BesluitFactory.create(zaak=zaak) self.assertEqual(ZaakBesluit.objects.count(), 1) besluit_url = reverse(besluit) url = reverse("zaakbesluit-list", kwargs={"zaak_uuid": zaak.uuid}) response = self.client.post( url, {"besluit": f"http://testserver{besluit_url}"}) self.assertEqual(response.status_code, status.HTTP_201_CREATED, response.data) self.assertEqual(ZaakBesluit.objects.count(), 1)
def test_delete_while_relation_does_not_exist(self): besluit = BesluitFactory.create(for_zaak=False) zaak = ZaakFactory.create() zaakbesluit = ZaakBesluit.objects.create(zaak=zaak, besluit=besluit) url = reverse( "zaakbesluit-detail", kwargs={ "zaak_uuid": zaakbesluit.zaak.uuid, "uuid": zaakbesluit.uuid }, ) response = self.client.delete(url) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.assertFalse(ZaakBesluit.objects.exists())
def test_delete(self): besluit = BesluitFactory.create(for_zaak=True) url = reverse( "zaakbesluit-detail", kwargs={ "zaak_uuid": besluit.zaak.uuid, "uuid": besluit.uuid }, ) besluit.zaak = None # it must already be disconnected from zaak besluit.save() response = self.client.delete(url) # because the reference between zaak/besluit is broken, this 404s, as # it should self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_update_besluit_change_zaak(self): besluit = BesluitFactory.create(for_zaak=True) self.assertEqual(ZaakBesluit.objects.count(), 1) zaakbesluit_old = ZaakBesluit.objects.get() self.assertEqual(zaakbesluit_old.besluit, besluit) self.assertEqual(zaakbesluit_old.zaak, besluit.zaak) zaak_new = ZaakFactory.create() besluit.zaak = zaak_new besluit.save() zaakbesluit_new = ZaakBesluit.objects.get() self.assertNotEqual(zaakbesluit_old.id, zaakbesluit_new.id) self.assertEqual(zaakbesluit_new.zaak, zaak_new)
def test_delete(self): besluit = BesluitFactory.create(for_zaak=True) zaakbesluit = ZaakBesluit.objects.get() url = reverse( "zaakbesluit-detail", kwargs={ "zaak_uuid": zaakbesluit.zaak.uuid, "uuid": zaakbesluit.uuid }, ) besluit.zaak = None besluit.save() self.assertEqual(ZaakBesluit.objects.count(), 0) response = self.client.delete(url) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def create_besluit_without_zaak(self, **kwargs): from openzaak.components.besluiten.tests.factories import BesluitFactory from openzaak.tests.utils import mock_service_oas_get besluit = BesluitFactory.create(**kwargs) mock_service_oas_get(self.adapter, APITypes.brc, self.base_besluit) self.adapter.get( make_absolute_uri(reverse(besluit)), json={ "verantwoordelijke_organisatie": "517439943", "identificatie": "123123", "besluittype": "http://testserver/besluittype/some-random-id", "datum": "2018-09-06", "toelichting": "Vergunning verleend.", "ingangsdatum": "2018-10-01", "vervaldatum": "2018-11-01", }, ) return besluit