Beispiel #1
0
    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)}",
            }],
        )
Beispiel #3
0
    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)
Beispiel #4
0
    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))
Beispiel #7
0
    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")
Beispiel #8
0
    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)
Beispiel #9
0
    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))
Beispiel #10
0
    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)
Beispiel #16
0
    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)
Beispiel #18
0
    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)
Beispiel #19
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)
Beispiel #20
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
            )
Beispiel #21
0
    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)}",
            },
        )
Beispiel #23
0
    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
Beispiel #24
0
    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)
Beispiel #25
0
    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)
Beispiel #26
0
    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)
Beispiel #28
0
    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)
Beispiel #29
0
    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)
Beispiel #30
0
    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