def test_create_gebruiksrechten_limited_to_authorized_zaken(self):
        url = reverse('gebruiksrechten-list')
        eio1 = EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype='https://informatieobjecttype.nl/not_ok',
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.openbaar)
        eio2 = EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype='https://informatieobjecttype.nl/ok',
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.
            zeer_geheim)

        for eio in [eio1, eio2]:
            with self.subTest(informatieobjecttype=eio.informatieobjecttype,
                              vertrouwelijkheidaanduiding=eio.
                              vertrouwelijkheidaanduiding):
                response = self.client.post(
                    url, {
                        'informatieobject':
                        reverse('enkelvoudiginformatieobject-detail',
                                kwargs={'uuid': eio.uuid}),
                        'startdatum':
                        '2018-12-24T00:00:00Z',
                        'omschrijvingVoorwaarden':
                        'Een hele set onredelijke voorwaarden',
                    })

                self.assertEqual(response.status_code,
                                 status.HTTP_403_FORBIDDEN)
Exemple #2
0
    def test_create_gebruiksrechten_limited_to_authorized_zaken(self):
        url = reverse("gebruiksrechten-list")
        eio1 = EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype="https://informatieobjecttype.nl/not_ok",
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.openbaar,
        )
        eio2 = EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype="https://informatieobjecttype.nl/ok",
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.
            zeer_geheim,
        )

        for eio in [eio1, eio2]:
            with self.subTest(
                    informatieobjecttype=eio.informatieobjecttype,
                    vertrouwelijkheidaanduiding=eio.
                    vertrouwelijkheidaanduiding,
            ):
                response = self.client.post(
                    url,
                    {
                        "informatieobject":
                        reverse(
                            "enkelvoudiginformatieobject-detail",
                            kwargs={"uuid": eio.uuid},
                        ),
                        "startdatum":
                        "2018-12-24T00:00:00Z",
                        "omschrijvingVoorwaarden":
                        "Een hele set onredelijke voorwaarden",
                    },
                )

                self.assertEqual(response.status_code,
                                 status.HTTP_403_FORBIDDEN)
    def test_eio_list_shows_latest_versions(self):
        eio1 = EnkelvoudigInformatieObjectFactory.create(beschrijving="object1")

        eio1_url = reverse(
            "enkelvoudiginformatieobject-detail", kwargs={"uuid": eio1.uuid}
        )
        lock = self.client.post(f"{eio1_url}/lock").data["lock"]
        self.client.patch(eio1_url, {"beschrijving": "object1 versie2", "lock": lock})

        eio2 = EnkelvoudigInformatieObjectFactory.create(beschrijving="object2")

        eio2_url = reverse(
            "enkelvoudiginformatieobject-detail", kwargs={"uuid": eio2.uuid}
        )
        lock = self.client.post(f"{eio2_url}/lock").data["lock"]
        self.client.patch(eio2_url, {"beschrijving": "object2 versie2", "lock": lock})

        response = self.client.get(reverse(EnkelvoudigInformatieObject))
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        response_data = response.data["results"]
        self.assertEqual(len(response_data), 2)

        self.assertEqual(response_data[0]["beschrijving"], "object1 versie2")
        self.assertEqual(response_data[1]["beschrijving"], "object2 versie2")
    def test_eio_list_shows_latest_versions(self):
        eio1 = EnkelvoudigInformatieObjectFactory.create(
            beschrijving='object1')

        eio1_url = reverse('enkelvoudiginformatieobject-detail',
                           kwargs={
                               'uuid': eio1.uuid,
                           })
        lock = self.client.post(f'{eio1_url}/lock').data['lock']
        self.client.patch(eio1_url, {
            'beschrijving': 'object1 versie2',
            'lock': lock
        })

        eio2 = EnkelvoudigInformatieObjectFactory.create(
            beschrijving='object2')

        eio2_url = reverse('enkelvoudiginformatieobject-detail',
                           kwargs={
                               'uuid': eio2.uuid,
                           })
        lock = self.client.post(f'{eio2_url}/lock').data['lock']
        self.client.patch(eio2_url, {
            'beschrijving': 'object2 versie2',
            'lock': lock
        })

        response = self.client.get(reverse(EnkelvoudigInformatieObject))
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        response_data = response.data['results']
        self.assertEqual(len(response_data), 2)

        self.assertEqual(response_data[0]['beschrijving'], 'object1 versie2')
        self.assertEqual(response_data[1]['beschrijving'], 'object2 versie2')
    def test_validate_unknown_query_params(self):
        EnkelvoudigInformatieObjectFactory.create_batch(2)
        url = get_operation_url("enkelvoudiginformatieobject_list")

        response = self.client.get(url, {"someparam": "somevalue"})

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        error = get_validation_errors(response, "nonFieldErrors")
        self.assertEqual(error["code"], "unknown-parameters")
    def test_filter_by_identification(self):
        EnkelvoudigInformatieObjectFactory.create(identificatie='foo')
        EnkelvoudigInformatieObjectFactory.create(identificatie='bar')

        response = self.client.get(self.list_url, {'identificatie': 'foo'})

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        response_data = response.json()['results']

        self.assertEqual(len(response_data), 1)
        self.assertEqual(response_data[0]['identificatie'], 'foo')
    def test_pagination_page_param(self):
        EnkelvoudigInformatieObjectFactory.create_batch(2)

        response = self.client.get(self.list_url, {"page": 1})

        self.assertEqual(response.status_code, status.HTTP_200_OK)

        response_data = response.json()
        self.assertEqual(response_data["count"], 2)
        self.assertIsNone(response_data["previous"])
        self.assertIsNone(response_data["next"])
    def test_filter_by_identification(self):
        EnkelvoudigInformatieObjectFactory.create(identificatie="foo")
        EnkelvoudigInformatieObjectFactory.create(identificatie="bar")

        response = self.client.get(self.list_url, {"identificatie": "foo"})

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        response_data = response.json()["results"]

        self.assertEqual(len(response_data), 1)
        self.assertEqual(response_data[0]["identificatie"], "foo")
    def test_io_list(self):
        """
        Assert you can only list INFORMATIEOBJECTen of the informatieobjecttypes and vertrouwelijkheidaanduiding
        of your authorization
        """
        EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype='https://informatieobjecttype.nl/ok',
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.openbaar)
        EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype='https://informatieobjecttype.nl/not_ok',
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.openbaar)
        EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype='https://informatieobjecttype.nl/ok',
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.
            zeer_geheim)
        EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype='https://informatieobjecttype.nl/not_ok',
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.
            zeer_geheim)
        url = reverse('enkelvoudiginformatieobject-list')

        response = self.client.get(url)

        self.assertEqual(response.status_code, status.HTTP_200_OK)

        results = response.data['results']

        self.assertEqual(len(results), 1)
        self.assertEqual(results[0]['informatieobjecttype'],
                         'https://informatieobjecttype.nl/ok')
        self.assertEqual(results[0]['vertrouwelijkheidaanduiding'],
                         VertrouwelijkheidsAanduiding.openbaar)
    def test_pagination_default(self):
        """
        Deleting a Besluit causes all related objects to be deleted as well.
        """
        EnkelvoudigInformatieObjectFactory.create_batch(2)

        response = self.client.get(self.list_url)

        self.assertEqual(response.status_code, status.HTTP_200_OK)

        response_data = response.json()
        self.assertEqual(response_data["count"], 2)
        self.assertIsNone(response_data["previous"])
        self.assertIsNone(response_data["next"])
Exemple #11
0
    def test_read_superuser(self):
        """
        superuser read everything
        """
        self.applicatie.heeft_alle_autorisaties = True
        self.applicatie.save()

        EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype="https://informatieobjecttype.nl/ok",
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.openbaar,
        )
        EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype="https://informatieobjecttype.nl/not_ok",
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.openbaar,
        )
        EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype="https://informatieobjecttype.nl/ok",
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.
            zeer_geheim,
        )
        EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype="https://informatieobjecttype.nl/not_ok",
            vertrouwelijkheidaanduiding=VertrouwelijkheidsAanduiding.
            zeer_geheim,
        )
        url = reverse("enkelvoudiginformatieobject-list")

        response = self.client.get(url)

        self.assertEqual(response.status_code, status.HTTP_200_OK)

        response_data = response.json()
        self.assertEqual(len(response_data), 4)
    def test_conditional_get_stale(self):
        eio = EnkelvoudigInformatieObjectFactory.create(with_etag=True)

        response = self.client.get(reverse(eio),
                                   HTTP_IF_NONE_MATCH=f'"not-an-md5"')

        self.assertEqual(response.status_code, status.HTTP_200_OK)
    def test_eio_partial_update(self):
        eio = EnkelvoudigInformatieObjectFactory.create(
            beschrijving='beschrijving1')

        eio_url = reverse('enkelvoudiginformatieobject-detail',
                          kwargs={
                              'uuid': eio.uuid,
                          })
        lock = self.client.post(f'{eio_url}/lock').data['lock']
        response = self.client.patch(eio_url, {
            'beschrijving': 'beschrijving2',
            'lock': lock
        })

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        response_data = response.json()

        self.assertEqual(response_data['beschrijving'], 'beschrijving2')

        eios = EnkelvoudigInformatieObject.objects.filter(
            uuid=eio.uuid).order_by('-versie')
        self.assertEqual(len(eios), 2)

        latest_version = eios.first()
        self.assertEqual(latest_version.versie, 2)
        self.assertEqual(latest_version.beschrijving, 'beschrijving2')

        first_version = eios[1]
        self.assertEqual(first_version.versie, 1)
        self.assertEqual(first_version.beschrijving, 'beschrijving1')
Exemple #14
0
    def test_update_eio_only_size(self):
        """
        Test the update process of the size metadata
        Input:
        * lock document
        * update bestandsomvang with positive integer

        Expected result:
        * 400 status because the new bestandsomvang is not related to the file size
        """
        eio = EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype=INFORMATIEOBJECTTYPE
        )
        detail_url = reverse(eio)
        lock_url = get_operation_url("enkelvoudiginformatieobject_lock", uuid=eio.uuid)

        # lock
        response_lock = self.client.post(lock_url)
        lock = response_lock.json()["lock"]

        # update metadata
        response = self.client.patch(detail_url, {"bestandsomvang": 20, "lock": lock})

        self.assertEqual(
            response.status_code, status.HTTP_400_BAD_REQUEST, response.data
        )

        error = get_validation_errors(response, "nonFieldErrors")
        self.assertEqual(error["code"], "file-size")
Exemple #15
0
    def test_update_eio_only_file_without_size(self):
        """
        Test the update process of the file without changing file size
        Input:
        * lock document
        * update inhoud with another base64 encoded file

        Expected result:
        * 400 status because the new file size is not related to the bestandsomvang
        """
        eio = EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype=INFORMATIEOBJECTTYPE
        )
        detail_url = reverse(eio)
        lock_url = get_operation_url("enkelvoudiginformatieobject_lock", uuid=eio.uuid)

        # lock
        response_lock = self.client.post(lock_url)
        lock = response_lock.json()["lock"]

        # update metadata
        response = self.client.patch(
            detail_url,
            {
                "inhoud": b64encode(b"some other file content").decode("utf-8"),
                "lock": lock,
            },
        )

        self.assertEqual(
            response.status_code, status.HTTP_400_BAD_REQUEST, response.data
        )

        error = get_validation_errors(response, "nonFieldErrors")
        self.assertEqual(error["code"], "file-size")
    def test_sync_create_fails(self):
        self.mocked_sync_create.side_effect = SyncError("Sync failed")

        enkelvoudig_informatie = EnkelvoudigInformatieObjectFactory.create()
        enkelvoudig_informatie_url = reverse(
            'enkelvoudiginformatieobject-detail',
            kwargs={
                'version': '1',
                'uuid': enkelvoudig_informatie.uuid,
            })

        content = {
            'informatieobject':
            'http://testserver' + enkelvoudig_informatie_url,
            'object': BESLUIT,
            'objectType': ObjectTypes.besluit,
        }

        # Send to the API
        response = self.client.post(self.list_url, content)

        # Test response
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST,
                         response.data)

        # transaction must be rolled back
        self.assertFalse(ObjectInformatieObject.objects.exists())
    def test_update_zaak(self):
        eo = EnkelvoudigInformatieObjectFactory.create()
        zio = ObjectInformatieObjectFactory.create(is_zaak=True)

        eo_detail_url = reverse('enkelvoudiginformatieobject-detail',
                                kwargs={
                                    'version': '1',
                                    'uuid': eo.uuid,
                                })
        zio_detail_url = reverse('objectinformatieobject-detail',
                                 kwargs={
                                     'version': '1',
                                     'uuid': zio.uuid,
                                 })

        response = self.client.patch(
            zio_detail_url, {
                'object': 'https://something.different',
                'informatieobject': eo_detail_url,
                'objectType': ObjectTypes.besluit,
            })

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST,
                         response.data)

        for field in ['object', 'informatieobject', 'objectType']:
            with self.subTest(field=field):
                error = get_validation_errors(response, field)
                self.assertEqual(error['code'], IsImmutableValidator.code)
    def test_registratiedatum_ignored(self):
        enkelvoudig_informatie = EnkelvoudigInformatieObjectFactory.create()
        enkelvoudig_informatie_url = reverse(
            'enkelvoudiginformatieobject-detail',
            kwargs={
                'version': '1',
                'uuid': enkelvoudig_informatie.uuid,
            })

        content = {
            'informatieobject':
            'http://testserver' + enkelvoudig_informatie_url,
            'object': ZAAK,
            'objectType': ObjectTypes.zaak,
            'registratiedatum': '2018-09-19T12:25:20+0200',
        }

        # Send to the API
        self.client.post(self.list_url, content)

        oio = ObjectInformatieObject.objects.get()

        self.assertEqual(
            oio.registratiedatum,
            datetime(2018, 9, 20, 12, 0, 0).replace(tzinfo=timezone.utc))
Exemple #19
0
    def test_update_eio_status_definitief_forbidden(self, *mocks):
        eio = EnkelvoudigInformatieObjectFactory.create(
            beschrijving="beschrijving1",
            informatieobjecttype=INFORMATIEOBJECTTYPE,
            status=Statussen.definitief,
        )

        eio_url = reverse("enkelvoudiginformatieobject-detail",
                          kwargs={"uuid": eio.uuid})

        eio_response = self.client.get(eio_url)
        eio_data = eio_response.data

        lock = self.client.post(f"{eio_url}/lock").data["lock"]
        eio_data.update({
            "beschrijving": "beschrijving2",
            "inhoud": b64encode(b"aaaaa"),
            "bestandsomvang": 5,
            "lock": lock,
        })

        for i in ["integriteit", "ondertekening"]:
            eio_data.pop(i)

        response = self.client.put(eio_url, eio_data)

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        error = get_validation_errors(response, "nonFieldErrors")
        self.assertEqual(error["code"], "modify-status-definitief")
    def test_create_objectinformatieobject_audittrail(self):
        informatieobject = EnkelvoudigInformatieObjectFactory.create()

        content = {
            'informatieobject':
            reverse('enkelvoudiginformatieobject-detail',
                    kwargs={'uuid': informatieobject.uuid}),
            'object':
            ZAAK,
            'objectType':
            ObjectTypes.zaak,
        }

        # Send to the API
        objectinformatieobject_response = self.client.post(
            self.objectinformatieobject_list_url, content).data

        informatieobject_url = objectinformatieobject_response[
            'informatieobject']
        audittrails = AuditTrail.objects.filter(
            hoofd_object=informatieobject_url)
        self.assertEqual(audittrails.count(), 1)

        # Verify that the audittrail for the ObjectInformatieObject creation
        # contains the correct information
        objectinformatieobject_create_audittrail = audittrails.get()
        self.assertEqual(objectinformatieobject_create_audittrail.bron, 'DRC')
        self.assertEqual(objectinformatieobject_create_audittrail.actie,
                         'create')
        self.assertEqual(objectinformatieobject_create_audittrail.resultaat,
                         201)
        self.assertEqual(objectinformatieobject_create_audittrail.oud, None)
        self.assertEqual(objectinformatieobject_create_audittrail.nieuw,
                         objectinformatieobject_response)
    def test_create(self):
        enkelvoudig_informatie = EnkelvoudigInformatieObjectFactory.create()
        enkelvoudig_informatie_url = reverse(
            'enkelvoudiginformatieobject-detail',
            kwargs={
                'version': '1',
                'uuid': enkelvoudig_informatie.uuid,
            })

        content = {
            'zaak': ZAAK,
            'informatieobject':
            'http://testserver' + enkelvoudig_informatie_url,
        }

        # Send to the API
        response = self.client.post(self.list_url, content)

        # Test response
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

        # Test database
        self.assertEqual(ZaakInformatieObject.objects.count(), 1)
        stored_object = ZaakInformatieObject.objects.get()
        self.assertEqual(stored_object.zaak, ZAAK)

        expected_url = reverse('zaakinformatieobject-detail',
                               kwargs={
                                   'version': '1',
                                   'uuid': stored_object.uuid,
                               })

        expected_response = content.copy()
        expected_response['url'] = f'http://testserver{expected_url}'
        self.assertEqual(response.json(), expected_response)
    def test_eio_partial_update(self):
        eio = EnkelvoudigInformatieObjectFactory.create(beschrijving="beschrijving1")

        eio_url = reverse(
            "enkelvoudiginformatieobject-detail", kwargs={"uuid": eio.uuid}
        )
        lock = self.client.post(f"{eio_url}/lock").data["lock"]
        response = self.client.patch(
            eio_url, {"beschrijving": "beschrijving2", "lock": lock}
        )

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        response_data = response.json()

        self.assertEqual(response_data["beschrijving"], "beschrijving2")

        eios = EnkelvoudigInformatieObject.objects.filter(uuid=eio.uuid).order_by(
            "-versie"
        )
        self.assertEqual(len(eios), 2)

        latest_version = eios.first()
        self.assertEqual(latest_version.versie, 2)
        self.assertEqual(latest_version.beschrijving, "beschrijving2")

        first_version = eios[1]
        self.assertEqual(first_version.versie, 1)
        self.assertEqual(first_version.beschrijving, "beschrijving1")
    def test_destroy_no_relations_allowed(self):
        """
        Assert that destroying is possible when there are no relations.
        """
        eio = EnkelvoudigInformatieObjectFactory.create()
        url = reverse(eio)

        response = self.client.delete(url)

        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
Exemple #24
0
    def test_read_detail_file(self):
        self.autorisatie.scopes = [SCOPE_DOCUMENTEN_ALLES_LEZEN]
        self.autorisatie.save()

        eio = EnkelvoudigInformatieObjectFactory.create(informatieobjecttype=INFORMATIEOBJECTTYPE)
        file_url = get_operation_url('enkelvoudiginformatieobject_download', uuid=eio.uuid)

        response = self.client.get(file_url)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.content.decode("utf-8"), 'some data')
Exemple #25
0
    def test_update_eio_put(self):
        """
        Test the full update process of the document
        Input:
        * lock document
        * update inhoud with another base64 encoded file
        * update all other fields

        Expected result:
        * new version of document created during lock
        * file link has another version
        * file link points to the new file
        * bestandsdelen objects are not created
        """
        eio = EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype=INFORMATIEOBJECTTYPE
        )
        detail_url = reverse(eio)
        lock_url = get_operation_url("enkelvoudiginformatieobject_lock", uuid=eio.uuid)

        # lock
        response_lock = self.client.post(lock_url)
        lock = response_lock.json()["lock"]

        # get data
        eio_response = self.client.get(detail_url)
        eio_data = eio_response.data

        # update
        eio_data.update(
            {
                "beschrijving": "beschrijving2",
                "inhoud": b64encode(b"aaaaa"),
                "bestandsomvang": 5,
                "lock": lock,
            }
        )

        for i in ["integriteit", "ondertekening"]:
            eio_data.pop(i)

        response = self.client.put(detail_url, eio_data)

        self.assertEqual(response.status_code, status.HTTP_200_OK)

        data = response.json()
        eio_new = eio.canonical.latest_version
        file_url = get_operation_url(
            "enkelvoudiginformatieobject_download", uuid=eio_new.uuid
        )

        self.assertEqual(eio.canonical.bestandsdelen.count(), 0)
        self.assertEqual(data["inhoud"], f"http://testserver{file_url}?versie=2")
        self.assertEqual(eio_new.inhoud.file.read(), b"aaaaa")
    def test_eio_detail_filter_by_wrong_registratie_op_gives_404(self):
        eio = EnkelvoudigInformatieObjectFactory.create(beschrijving="beschrijving1")

        eio_url = reverse(
            "enkelvoudiginformatieobject-detail", kwargs={"uuid": eio.uuid}
        )
        lock = self.client.post(f"{eio_url}/lock").data["lock"]
        self.client.patch(eio_url, {"beschrijving": "beschrijving2", "lock": lock})

        response = self.client.get(eio_url, {"registratieOp": "2019-01-01T11:59:00"})
        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
    def test_read(self):
        test_object = EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype=INFORMATIEOBJECTTYPE
        )

        # Retrieve from the API
        detail_url = reverse(
            "enkelvoudiginformatieobject-detail",
            kwargs={"version": "1", "uuid": test_object.uuid},
        )

        response = self.client.get(detail_url)

        # Test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        file_url = get_operation_url(
            "enkelvoudiginformatieobject_download", uuid=test_object.uuid
        )
        expected = {
            "url": f"http://testserver{detail_url}",
            "identificatie": test_object.identificatie,
            "bronorganisatie": test_object.bronorganisatie,
            "creatiedatum": "2018-06-27",
            "titel": "some titel",
            "auteur": "some auteur",
            "status": "",
            "formaat": "some formaat",
            "taal": "nld",
            "beginRegistratie": test_object.begin_registratie.isoformat().replace(
                "+00:00", "Z"
            ),
            "versie": 1,
            "bestandsnaam": "",
            "inhoud": f"http://testserver{file_url}?versie=1",
            "bestandsomvang": test_object.inhoud.size,
            "link": "",
            "beschrijving": "",
            "ontvangstdatum": None,
            "verzenddatum": None,
            "ondertekening": {"soort": "", "datum": None},
            "indicatieGebruiksrecht": None,
            "vertrouwelijkheidaanduiding": "openbaar",
            "integriteit": {"algoritme": "", "waarde": "", "datum": None},
            "informatieobjecttype": INFORMATIEOBJECTTYPE,
            "locked": False,
            "bestandsdelen": [],
        }
        response_data = response.json()
        self.assertEqual(sorted(response_data.keys()), sorted(expected.keys()))

        for key in response_data.keys():
            with self.subTest(field=key):
                self.assertEqual(response_data[key], expected[key])
    def test_eio_download_with_accept_application_octet_stream_header(self):
        eio = EnkelvoudigInformatieObjectFactory.create(
            beschrijving="beschrijving1", inhoud__data=b"inhoud1"
        )

        eio_url = get_operation_url(
            "enkelvoudiginformatieobject_download", uuid=eio.uuid
        )

        response = self.client.get(eio_url, HTTP_ACCEPT="application/octet-stream")
        self.assertEqual(response.status_code, status.HTTP_200_OK)
    def test_eio_detail_filter_by_version(self):
        eio = EnkelvoudigInformatieObjectFactory.create(beschrijving="beschrijving1")

        eio_url = reverse(
            "enkelvoudiginformatieobject-detail", kwargs={"uuid": eio.uuid}
        )
        lock = self.client.post(f"{eio_url}/lock").data["lock"]
        self.client.patch(eio_url, {"beschrijving": "beschrijving2", "lock": lock})

        response = self.client.get(eio_url, {"versie": 1})
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data["beschrijving"], "beschrijving1")
    def test_eio_delete(self):
        eio = EnkelvoudigInformatieObjectFactory.create(beschrijving="beschrijving1")

        eio_url = reverse(
            "enkelvoudiginformatieobject-detail", kwargs={"uuid": eio.uuid}
        )
        lock = self.client.post(f"{eio_url}/lock").data["lock"]
        self.client.patch(eio_url, {"beschrijving": "beschrijving2", "lock": lock})

        response = self.client.delete(eio_url)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
        self.assertFalse(EnkelvoudigInformatieObjectCanonical.objects.exists())
        self.assertFalse(EnkelvoudigInformatieObject.objects.exists())