예제 #1
0
    def setUp(self):
        super().setUp()
        self.zaak_1 = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja)
        self.zaak_3 = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja)
        self.zaak_5 = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja)

        self.edc_type = InformatieObjectTypeFactory.create(
            informatieobjecttypeomschrijving='omschrijving')
        self.edc_type2 = InformatieObjectTypeFactory.create(
            informatieobjecttypeomschrijving=
            'Aanvraag burgerservicenummer behandelen')

        self.context = {
            'gemeentecode': '',
            'referentienummer': self.genereerID(10),
            'datumVandaag': self.genereerdatum(),
            'datumEergisteren': self.genereerdatum(-2),
            'tijdstipRegistratie': self.genereerdatumtijd(),
            'zds_zaaktype_code': '12345678',
            'zds_zaaktype_omschrijving':
            'Aanvraag burgerservicenummer behandelen',
            'maakzaakdocument_identificatie': '123456789ABC'
        }
예제 #2
0
    def test_lees_document(self):
        """
        Ref #83: geefZaakdocumentLezen vraagt een kopie van het bestand op.

        Van het bestand uit het DMS wordt opgevraagd: inhoud, bestandsnaam.
        """
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja)
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            informatieobjectidentificatie='123456', zaak=zaak)
        cmis_doc = self.client.maak_zaakdocument(document, zaak)

        # empty by default
        filename, file_obj = self.client.geef_inhoud(document)

        self.assertEqual(filename, document.titel)
        self.assertEqual(file_obj.read(), b'')

        cmis_doc.setContentStream(BytesIO(b'some content'), 'text/plain')

        filename, file_obj = self.client.geef_inhoud(document)

        self.assertEqual(filename, document.titel)
        self.assertEqual(file_obj.read(), b'some content')
    def test_cancel_checkout(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document, zaak)
        checkout_id, checkout_by = self.client.checkout(document)

        result = self.client.cancel_checkout(document, checkout_id)

        self.assertIsNone(result)
        # if the doc cannot be checked out, it was not unlocked
        cmis_doc = self.client._get_cmis_doc(document)
        try:
            cmis_doc.checkout()
        except UpdateConflictException:
            self.fail("Could not lock document after checkout cancel, it is still locked")
 def test_initiator_attributes_natuurlijk_persoon(self):
     zaak = ZaakFactory.create(
         status_set__indicatie_laatst_gezette_status=JaNee.ja,
         zaakidentificatie=123456789,
         einddatum=None,
         zaaktype__zaaktypeidentificatie=987654,
         zaaktype__zaaktypeomschrijving='SOAP is leuk',
     )
     np = NatuurlijkPersoonFactory.create(
         # nummer_ander_natuurlijk_persoon='anp 01',
         burgerservicenummer='135798642',
         naam_voorvoegsel_geslachtsnaam_voorvoegsel='van',
         naam_geslachtsnaam='Druten',
     )
     RolFactory.create(
         zaak=zaak,
         rolomschrijving=Rolomschrijving.initiator,
         betrokkene__vestiging=None,
         betrokkene=np
     )
     folder = self.client.creeer_zaakfolder(zaak)
     self.assertExpectedProps(folder, {
         # 'zsdms:voorvoegselGeslachtsnaam': 'van',
         # TODO [KING]: ZDS has plural version
         # 'zsdms:voorvoegselsGeslachtsnaam': 'van',
         # 'zsdms:geslachtsnaam': 'Druten',
         'zsdms:inp.bsn': '135798642',
         # 'zsdms:ann.identificatie': 'anp 01',
     })
 def test_initiator_attributes_natuurlijk_persoon(self):
     zaak = ZaakFactory.create(
         status_set__indicatie_laatst_gezette_status=JaNee.ja,
         zaakidentificatie=123456789,
         einddatum=None,
         zaaktype__zaaktypeidentificatie=987654,
         zaaktype__zaaktypeomschrijving='SOAP is leuk',
     )
     np = NatuurlijkPersoonFactory.create(
         # nummer_ander_natuurlijk_persoon='anp 01',
         burgerservicenummer='135798642',
         naam_voorvoegsel_geslachtsnaam_voorvoegsel='van',
         naam_geslachtsnaam='Druten',
     )
     RolFactory.create(
         zaak=zaak,
         rolomschrijving=Rolomschrijving.initiator,
         betrokkene__vestiging=None,
         betrokkene=np
     )
     folder = self.client.creeer_zaakfolder(zaak)
     self.assertExpectedProps(folder, {
         # 'zsdms:voorvoegselGeslachtsnaam': 'van',
         # TODO [KING]: ZDS has plural version
         # 'zsdms:voorvoegselsGeslachtsnaam': 'van',
         # 'zsdms:geslachtsnaam': 'Druten',
         'zsdms:inp.bsn': '135798642',
         # 'zsdms:ann.identificatie': 'anp 01',
     })
    def test_update_zaakdocument_content(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)
        inhoud = _create_binaire_inhoud(b'leaky abstraction...', filename='andere bestandsnaam.txt')

        result = self.client.update_zaakdocument(document, inhoud=inhoud)

        self.assertIsNone(result)
        filename, content = self.client.geef_inhoud(document)
        self.assertEqual(filename, 'andere bestandsnaam.txt')
        self.assertEqual(content.read(), b'leaky abstraction...')

        cmis_doc = cmis_doc.getLatestVersion()
        self.assertExpectedProps(
            cmis_doc, {
                'cmis:contentStreamLength': 20,
                'zsdms:documentIdentificatie': '31415926535',
                'cmis:versionSeriesCheckedOutId': None,
                'cmis:name': 'andere bestandsnaam.txt',
            }
        )
    def test_cancel_checkout(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document, zaak)
        checkout_id, checkout_by = self.client.checkout(document)

        result = self.client.cancel_checkout(document, checkout_id)

        self.assertIsNone(result)
        # if the doc cannot be checked out, it was not unlocked
        cmis_doc = self.client._get_cmis_doc(document)
        try:
            cmis_doc.checkout()
        except UpdateConflictException:
            self.fail("Could not lock document after checkout cancel, it is still locked")
    def test_update_checked_out_zaakdocument_with_checkout_id(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)
        pwc = cmis_doc.checkout()
        pwc.reload()
        checkout_id = pwc.properties['cmis:versionSeriesCheckedOutId']
        inhoud = _create_binaire_inhoud(b'leaky abstraction...', filename='andere bestandsnaam.txt')

        result = self.client.update_zaakdocument(document, checkout_id=checkout_id, inhoud=inhoud)

        self.assertIsNone(result)
        filename, content = self.client.geef_inhoud(document)
        self.assertEqual(filename, 'andere bestandsnaam.txt')
        self.assertEqual(content.read(), b'leaky abstraction...')

        # check that it's checked in again
        new_pwc = cmis_doc.getPrivateWorkingCopy()
        self.assertIsNone(new_pwc)
    def test_checkout(self):
        """
        Assert that checking out a document locks it and returns the PWC ID
        """
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)

        checkout_id, checkout_by = self.client.checkout(document)

        pwc = cmis_doc.getPrivateWorkingCopy()
        self.assertEqual(
            checkout_id,
            pwc.properties['cmis:versionSeriesCheckedOutId']
        )
        self.assertEqual(checkout_by, 'admin')
    def test_voeg_zaakdocument_toe(self):
        """
        4.3.4.3 Interactie tussen ZS en DMS

        Het ZS zorgt ervoor dat het document dat is aangeboden door de DSC wordt vastgelegd in het DMS.
        Hiervoor maakt het ZS gebruik van de CMIS-services die aangeboden worden door het DMS. Hierbij
        gelden de volgende eisen:
        - Het document wordt gerelateerd aan de juiste Zaakfolder (Zie 5.1)
        - Het document wordt opgeslagen als objecttype EDC (Zie 5.2)
        - Minimaal de vereiste metadata voor een EDC wordt vastgelegd in de daarvoor gedefinieerde
        objectproperties. In Tabel 3 is een mapping aangegeven tussen de StUF-ZKN-elementen en
        CMIS-objectproperties.
        """
        zaak = ZaakFactory.create(status_set__indicatie_laatst_gezette_status=JaNee.ja)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document)
        document.refresh_from_db()

        result = self.client.zet_inhoud(document, BytesIO(b'some content'), content_type='text/plain')

        self.assertIsNone(result)
        filename, file_obj = self.client.geef_inhoud(document)
        self.assertEqual(file_obj.read(), b'some content')
    def test_update_checked_out_zaakdocument_with_checkout_id(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)
        pwc = cmis_doc.checkout()
        pwc.reload()
        checkout_id = pwc.properties['cmis:versionSeriesCheckedOutId']
        inhoud = _create_binaire_inhoud(b'leaky abstraction...', filename='andere bestandsnaam.txt')

        result = self.client.update_zaakdocument(document, checkout_id=checkout_id, inhoud=inhoud)

        self.assertIsNone(result)
        filename, content = self.client.geef_inhoud(document)
        self.assertEqual(filename, 'andere bestandsnaam.txt')
        self.assertEqual(content.read(), b'leaky abstraction...')

        # check that it's checked in again
        new_pwc = cmis_doc.getPrivateWorkingCopy()
        self.assertIsNone(new_pwc)
    def test_update_zaakdocument_only_props(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)
        # Update the document
        document.titel = 'nieuwe naam'
        document.beschrijving = 'Andere beschrijving'
        document.save()

        result = self.client.update_zaakdocument(document)

        self.assertIsNone(result)
        cmis_doc = cmis_doc.getLatestVersion()
        self.assertExpectedProps(
            cmis_doc, {
                'cmis:contentStreamLength': 0,
                'zsdms:documentIdentificatie': '31415926535',
                'cmis:versionSeriesCheckedOutId': None,
                'cmis:name': 'nieuwe naam',
                'zsdms:documentbeschrijving': 'Andere beschrijving',
            }
        )
    def test_update_zaakdocument_only_props(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)
        # Update the document
        document.titel = 'nieuwe naam'
        document.beschrijving = 'Andere beschrijving'
        document.save()

        result = self.client.update_zaakdocument(document)

        self.assertIsNone(result)
        cmis_doc = cmis_doc.getLatestVersion()
        self.assertExpectedProps(
            cmis_doc, {
                'cmis:contentStreamLength': 0,
                'zsdms:documentIdentificatie': '31415926535',
                'cmis:versionSeriesCheckedOutId': None,
                'cmis:name': 'nieuwe naam',
                'zsdms:documentbeschrijving': 'Andere beschrijving',
            }
        )
    def test_voeg_zaakdocument_toe(self):
        """
        4.3.4.3 Interactie tussen ZS en DMS

        Het ZS zorgt ervoor dat het document dat is aangeboden door de DSC wordt vastgelegd in het DMS.
        Hiervoor maakt het ZS gebruik van de CMIS-services die aangeboden worden door het DMS. Hierbij
        gelden de volgende eisen:
        - Het document wordt gerelateerd aan de juiste Zaakfolder (Zie 5.1)
        - Het document wordt opgeslagen als objecttype EDC (Zie 5.2)
        - Minimaal de vereiste metadata voor een EDC wordt vastgelegd in de daarvoor gedefinieerde
        objectproperties. In Tabel 3 is een mapping aangegeven tussen de StUF-ZKN-elementen en
        CMIS-objectproperties.
        """
        zaak = ZaakFactory.create(status_set__indicatie_laatst_gezette_status=JaNee.ja)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document)
        document.refresh_from_db()

        result = self.client.zet_inhoud(document, BytesIO(b'some content'), content_type='text/plain')

        self.assertIsNone(result)
        filename, file_obj = self.client.geef_inhoud(document)
        self.assertEqual(file_obj.read(), b'some content')
    def test_update_zaakdocument_content(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)
        inhoud = _create_binaire_inhoud(b'leaky abstraction...', filename='andere bestandsnaam.txt')

        result = self.client.update_zaakdocument(document, inhoud=inhoud)

        self.assertIsNone(result)
        filename, content = self.client.geef_inhoud(document)
        self.assertEqual(filename, 'andere bestandsnaam.txt')
        self.assertEqual(content.read(), b'leaky abstraction...')

        cmis_doc = cmis_doc.getLatestVersion()
        self.assertExpectedProps(
            cmis_doc, {
                'cmis:contentStreamLength': 20,
                'zsdms:documentIdentificatie': '31415926535',
                'cmis:versionSeriesCheckedOutId': None,
                'cmis:name': 'andere bestandsnaam.txt',
            }
        )
    def test_checkout(self):
        """
        Assert that checking out a document locks it and returns the PWC ID
        """
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)

        checkout_id, checkout_by = self.client.checkout(document)

        pwc = cmis_doc.getPrivateWorkingCopy()
        self.assertEqual(
            checkout_id,
            pwc.properties['cmis:versionSeriesCheckedOutId']
        )
        self.assertEqual(checkout_by, 'admin')
 def setUp(self):
     super().setUp()
     self.status = StatusFactory.create(indicatie_laatst_gezette_status=JaNee.ja)
     self.zaak = ZaakFactory.create()
     self.zaak.status_set.add(self.status)
     self.edc1 = EnkelvoudigInformatieObjectFactory.create()
     self.zio = ZaakInformatieObjectFactory.create(zaak=self.zaak,
                                                   informatieobject=self.edc1)
    def test_create_lock_update_flow(self):
        """
        Assert that it's possible to create an empty document, lock it for
        update and then effectively set the content thereby unlocking it.
        """
        # data setup
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)

        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        inhoud = _create_binaire_inhoud(b'leaky abstraction...', filename='bestand.txt')

        # flow
        self.client.maak_zaakdocument(document, zaak)  # create empty doc
        checkout_id, checkout_by = self.client.checkout(document)  # lock for update
        self.client.update_zaakdocument(document, checkout_id, inhoud=inhoud)
        filename, file_obj = self.client.geef_inhoud(document)

        # make assertions about the results
        self.assertEqual(filename, 'bestand.txt')
        self.assertEqual(file_obj.read(), b'leaky abstraction...')

        # verify expected props
        cmis_doc = self.client._get_cmis_doc(document)
        self.assertExpectedProps(cmis_doc, {
            'cmis:contentStreamFileName': 'bestand.txt',
            'cmis:contentStreamLength': 20,
            'cmis:contentStreamMimeType': 'application/binary',  # the default if it couldn't be determined
            # 'zsdms:dct.categorie': document.informatieobjecttype.informatieobjectcategorie,
            'zsdms:dct.omschrijving': document.informatieobjecttype.informatieobjecttypeomschrijving,
            'zsdms:documentIdentificatie': '31415926535',
            'zsdms:documentauteur': None,
            'zsdms:documentbeschrijving': 'Een beschrijving',
            'zsdms:documentcreatiedatum': _stuffdate_to_datetime(document.creatiedatum),
            # 'zsdms:documentformaat': None,
            'zsdms:documentLink': document.link,
            'zsdms:documentontvangstdatum': None,
            'zsdms:documentstatus': None,
            'zsdms:documenttaal': document.taal,
            'zsdms:documentversie': None,
            'zsdms:documentverzenddatum': None,
            'zsdms:vertrouwelijkaanduiding': None
        })

        # the doc must be unlocked after update, easy check -> lock it
        try:
            cmis_doc.checkout()
        except UpdateConflictException:
            self.fail("Could not lock document after update, it was already/still locked")
    def test_maak_zaakdocument(self):
        """
        4.3.5.3 - test dat het aanmaken van een zaakdocument mogelijk is.
        """
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)

        document = EnkelvoudigInformatieObjectFactory.create(
            zaak=zaak,
            titel='testnaam',
            informatieobjectidentificatie='31415926535',
            ontvangstdatum='20170101',
            beschrijving='Een beschrijving',

        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)
        # no actual binary data is added
        # we have to set an (empty) stream, otherwise cmislib blocks us from setting/reading the stream
        # self.assertIsNone(cmis_doc.properties['cmis:contentStreamFileName'])

        # verify that it identifications are unique
        with self.assertRaises(DocumentExistsError):
            self.client.maak_zaakdocument(document, zaak)

        # verify expected props
        self.assertExpectedProps(cmis_doc, {
            # when no contentstreamfilename is provided, it is apparently set to the document name
            'cmis:contentStreamFileName': 'testnaam',
            # 'cmis:contentStreamId': None,
            'cmis:contentStreamLength': 0,  # because we created an empty object
            'cmis:contentStreamMimeType': 'application/binary',  # the default if it couldn't be determined
            # 'zsdms:dct.categorie': document.informatieobjecttype.informatieobjectcategorie,
            'zsdms:dct.omschrijving': document.informatieobjecttype.informatieobjecttypeomschrijving,
            'zsdms:documentIdentificatie': '31415926535',
            'zsdms:documentauteur': None,
            'zsdms:documentbeschrijving': 'Een beschrijving',
            'zsdms:documentcreatiedatum': _stuffdate_to_datetime(document.creatiedatum),
            # 'zsdms:documentformaat': None,
            'zsdms:documentLink': document.link,
            'zsdms:documentontvangstdatum': _stuffdate_to_datetime(document.ontvangstdatum),
            'zsdms:documentstatus': None,
            'zsdms:documenttaal': document.taal,
            'zsdms:documentversie': None,
            'zsdms:documentverzenddatum': None,
            'zsdms:vertrouwelijkaanduiding': None
        })

        document.refresh_from_db()
        self.assertEqual(
            document._object_id,
            cmis_doc.properties['cmis:objectId'].rsplit(';')[0]
        )
    def test_maak_zaakdocument(self):
        """
        4.3.5.3 - test dat het aanmaken van een zaakdocument mogelijk is.
        """
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)

        document = EnkelvoudigInformatieObjectFactory.create(
            zaak=zaak,
            titel='testnaam',
            informatieobjectidentificatie='31415926535',
            ontvangstdatum='20170101',
            beschrijving='Een beschrijving',

        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)
        # no actual binary data is added
        # we have to set an (empty) stream, otherwise cmislib blocks us from setting/reading the stream
        # self.assertIsNone(cmis_doc.properties['cmis:contentStreamFileName'])

        # verify that it identifications are unique
        with self.assertRaises(DocumentExistsError):
            self.client.maak_zaakdocument(document, zaak)

        # verify expected props
        self.assertExpectedProps(cmis_doc, {
            # when no contentstreamfilename is provided, it is apparently set to the document name
            'cmis:contentStreamFileName': 'testnaam',
            # 'cmis:contentStreamId': None,
            'cmis:contentStreamLength': 0,  # because we created an empty object
            'cmis:contentStreamMimeType': 'application/binary',  # the default if it couldn't be determined
            # 'zsdms:dct.categorie': document.informatieobjecttype.informatieobjectcategorie,
            'zsdms:dct.omschrijving': document.informatieobjecttype.informatieobjecttypeomschrijving,
            'zsdms:documentIdentificatie': '31415926535',
            'zsdms:documentauteur': None,
            'zsdms:documentbeschrijving': 'Een beschrijving',
            'zsdms:documentcreatiedatum': _stuffdate_to_datetime(document.creatiedatum),
            # 'zsdms:documentformaat': None,
            'zsdms:documentLink': document.link,
            'zsdms:documentontvangstdatum': _stuffdate_to_datetime(document.ontvangstdatum),
            'zsdms:documentstatus': None,
            'zsdms:documenttaal': document.taal,
            'zsdms:documentversie': None,
            'zsdms:documentverzenddatum': None,
            'zsdms:vertrouwelijkaanduiding': None
        })

        document.refresh_from_db()
        self.assertEqual(
            document._object_id,
            cmis_doc.properties['cmis:objectId'].rsplit(';')[0]
        )
    def test_create_lock_update_flow(self):
        """
        Assert that it's possible to create an empty document, lock it for
        update and then effectively set the content thereby unlocking it.
        """
        # data setup
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)

        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        inhoud = _create_binaire_inhoud(b'leaky abstraction...', filename='bestand.txt')

        # flow
        self.client.maak_zaakdocument(document, zaak)  # create empty doc
        checkout_id, checkout_by = self.client.checkout(document)  # lock for update
        self.client.update_zaakdocument(document, checkout_id, inhoud=inhoud)
        filename, file_obj = self.client.geef_inhoud(document)

        # make assertions about the results
        self.assertEqual(filename, 'bestand.txt')
        self.assertEqual(file_obj.read(), b'leaky abstraction...')

        # verify expected props
        cmis_doc = self.client._get_cmis_doc(document)
        self.assertExpectedProps(cmis_doc, {
            'cmis:contentStreamFileName': 'bestand.txt',
            'cmis:contentStreamLength': 20,
            'cmis:contentStreamMimeType': 'application/binary',  # the default if it couldn't be determined
            # 'zsdms:dct.categorie': document.informatieobjecttype.informatieobjectcategorie,
            'zsdms:dct.omschrijving': document.informatieobjecttype.informatieobjecttypeomschrijving,
            'zsdms:documentIdentificatie': '31415926535',
            'zsdms:documentauteur': None,
            'zsdms:documentbeschrijving': 'Een beschrijving',
            'zsdms:documentcreatiedatum': _stuffdate_to_datetime(document.creatiedatum),
            # 'zsdms:documentformaat': None,
            'zsdms:documentLink': document.link,
            'zsdms:documentontvangstdatum': None,
            'zsdms:documentstatus': None,
            'zsdms:documenttaal': document.taal,
            'zsdms:documentversie': None,
            'zsdms:documentverzenddatum': None,
            'zsdms:vertrouwelijkaanduiding': None
        })

        # the doc must be unlocked after update, easy check -> lock it
        try:
            cmis_doc.checkout()
        except UpdateConflictException:
            self.fail("Could not lock document after update, it was already/still locked")
    def test_boomstructuur_date_based(self):
        self.client = CMISDMSClient()
        self.assertEqual(self.client.upload_to.__name__, 'upload_to_date_based')

        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            startdatum='20170814',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)

        # Zaken root folder
        root_folder = self.client._repo.getObjectByPath('/Sites/archief/documentLibrary')

        children = [child for child in root_folder.getChildren()]
        self.assertEqual(len(children), 1)

        # zaaktype subfolder
        zaak_type_folder = children[0]
        self.assertEqual(
            zaak_type_folder.name,
            str(zaak.zaaktype.zaaktypeidentificatie)
        )
        self.assertExpectedProps(zaak_type_folder, {
            'cmis:objectTypeId': 'F:zsdms:zaaktype',
            'cmis:baseTypeId': 'cmis:folder',
            'cmis:path': '/Sites/archief/documentLibrary/998877',
            'zsdms:Zaaktype-omschrijving': 'SOAP is leuk',
        })

        children = [child for child in zaak_type_folder.getChildren()]
        self.assertEqual(len(children), 1)

        # zaak subfolder
        date_folder = self.client._repo.getObjectByPath('/Sites/archief/documentLibrary/998877/2017/08/14/')
        children = [child for child in date_folder.getChildren()]
        self.assertEqual(len(children), 1)

        zaak_folder = children[0]
        self.assertEqual(zaak_folder.name, '123456789')
        self.assertExpectedProps(zaak_folder, {
            'cmis:objectTypeId': 'F:zsdms:zaak',
            'cmis:baseTypeId': 'cmis:folder',
            'cmis:path': '/Sites/archief/documentLibrary/998877/2017/08/14/123456789',
            # 'zsdms:zaakidentificatie': '123456789',  # apparently, this is now in policies/aspects
            'zsdms:startdatum': _stuffdate_to_datetime(zaak.startdatum),
            'zsdms:einddatum': None,
            'zsdms:zaakniveau': None,  # TODO
            'zsdms:deelzakenindicatie': None,  # TODO
            'zsdms:registratiedatum': _stuffdate_to_datetime(zaak.registratiedatum),
            'zsdms:archiefnominatie': None,
            # 'zsdms:resultaattypeomschrijving': None,  # TODO
            'zsdms:datumVernietigDossier': None,
        })
    def test_boomstructuur_date_based(self):
        self.client = CMISDMSClient()
        self.assertEqual(self.client.upload_to.__name__, 'upload_to_date_based')

        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            startdatum='20170814',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)

        # Zaken root folder
        root_folder = self.client._repo.getObjectByPath('/Sites/archief/documentLibrary')

        children = [child for child in root_folder.getChildren()]
        self.assertEqual(len(children), 1)

        # zaaktype subfolder
        zaak_type_folder = children[0]
        self.assertEqual(
            zaak_type_folder.name,
            str(zaak.zaaktype.zaaktypeidentificatie)
        )
        self.assertExpectedProps(zaak_type_folder, {
            'cmis:objectTypeId': 'F:zsdms:zaaktype',
            'cmis:baseTypeId': 'cmis:folder',
            'cmis:path': '/Sites/archief/documentLibrary/998877',
            'zsdms:Zaaktype-omschrijving': 'SOAP is leuk',
        })

        children = [child for child in zaak_type_folder.getChildren()]
        self.assertEqual(len(children), 1)

        # zaak subfolder
        date_folder = self.client._repo.getObjectByPath('/Sites/archief/documentLibrary/998877/2017/08/14/')
        children = [child for child in date_folder.getChildren()]
        self.assertEqual(len(children), 1)

        zaak_folder = children[0]
        self.assertEqual(zaak_folder.name, '123456789')
        self.assertExpectedProps(zaak_folder, {
            'cmis:objectTypeId': 'F:zsdms:zaak',
            'cmis:baseTypeId': 'cmis:folder',
            'cmis:path': '/Sites/archief/documentLibrary/998877/2017/08/14/123456789',
            # 'zsdms:zaakidentificatie': '123456789',  # apparently, this is now in policies/aspects
            'zsdms:startdatum': _stuffdate_to_datetime(zaak.startdatum),
            'zsdms:einddatum': None,
            'zsdms:zaakniveau': None,  # TODO
            'zsdms:deelzakenindicatie': None,  # TODO
            'zsdms:registratiedatum': _stuffdate_to_datetime(zaak.registratiedatum),
            'zsdms:archiefnominatie': None,
            # 'zsdms:resultaattypeomschrijving': None,  # TODO
            'zsdms:datumVernietigDossier': None,
        })
    def test_boomstructuur(self):
        """
        Test dat de boomstructuur Zaken -> Zaaktype -> Zaak gemaakt wordt.
        """
        with self.assertRaises(ObjectNotFoundException):
            self.client._repo.getObjectByPath('/Zaken')

        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum='20171231',
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)

        # Zaken root folder
        root_folder = self.client._repo.getObjectByPath('/Zaken')

        children = [child for child in root_folder.getChildren()]
        self.assertEqual(len(children), 1)

        # zaaktype subfolder
        zaak_type_folder = children[0]
        self.assertEqual(
            zaak_type_folder.name,
            str(zaak.zaaktype.zaaktypeidentificatie)
        )
        self.assertExpectedProps(zaak_type_folder, {
            'cmis:objectTypeId': 'F:zsdms:zaaktype',
            'cmis:baseTypeId': 'cmis:folder',
            'cmis:path': '/Zaken/998877',
            'zsdms:Zaaktype-omschrijving': 'SOAP is leuk',
        })

        children = [child for child in zaak_type_folder.getChildren()]
        self.assertEqual(len(children), 1)

        # zaak subfolder
        zaak_folder = children[0]
        self.assertEqual(zaak_folder.name, '123456789')
        self.assertExpectedProps(zaak_folder, {
            'cmis:objectTypeId': 'F:zsdms:zaak',
            'cmis:baseTypeId': 'cmis:folder',
            'cmis:path': '/Zaken/998877/123456789',
            # 'zsdms:zaakidentificatie': '123456789',  # apparently, this is now in policies/aspects
            'zsdms:startdatum': _stuffdate_to_datetime(zaak.startdatum),
            'zsdms:einddatum': _stuffdate_to_datetime(zaak.einddatum),
            'zsdms:zaakniveau': None,  # TODO
            'zsdms:deelzakenindicatie': None,  # TODO
            'zsdms:registratiedatum': _stuffdate_to_datetime(zaak.registratiedatum),
            'zsdms:archiefnominatie': None,
            # 'zsdms:resultaattypeomschrijving': None,  # TODO
            'zsdms:datumVernietigDossier': None,
        })
    def test_boomstructuur(self):
        """
        Test dat de boomstructuur Zaken -> Zaaktype -> Zaak gemaakt wordt.
        """
        with self.assertRaises(ObjectNotFoundException):
            self.client._repo.getObjectByPath('/Zaken')

        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum='20171231',
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)

        # Zaken root folder
        root_folder = self.client._repo.getObjectByPath('/Zaken')

        children = [child for child in root_folder.getChildren()]
        self.assertEqual(len(children), 1)

        # zaaktype subfolder
        zaak_type_folder = children[0]
        self.assertEqual(
            zaak_type_folder.name,
            str(zaak.zaaktype.zaaktypeidentificatie)
        )
        self.assertExpectedProps(zaak_type_folder, {
            'cmis:objectTypeId': 'F:zsdms:zaaktype',
            'cmis:baseTypeId': 'cmis:folder',
            'cmis:path': '/Zaken/998877',
            'zsdms:Zaaktype-omschrijving': 'SOAP is leuk',
        })

        children = [child for child in zaak_type_folder.getChildren()]
        self.assertEqual(len(children), 1)

        # zaak subfolder
        zaak_folder = children[0]
        self.assertEqual(zaak_folder.name, '123456789')
        self.assertExpectedProps(zaak_folder, {
            'cmis:objectTypeId': 'F:zsdms:zaak',
            'cmis:baseTypeId': 'cmis:folder',
            'cmis:path': '/Zaken/998877/123456789',
            # 'zsdms:zaakidentificatie': '123456789',  # apparently, this is now in policies/aspects
            'zsdms:startdatum': _stuffdate_to_datetime(zaak.startdatum),
            'zsdms:einddatum': _stuffdate_to_datetime(zaak.einddatum),
            'zsdms:zaakniveau': None,  # TODO
            'zsdms:deelzakenindicatie': None,  # TODO
            'zsdms:registratiedatum': _stuffdate_to_datetime(zaak.registratiedatum),
            'zsdms:archiefnominatie': None,
            # 'zsdms:resultaattypeomschrijving': None,  # TODO
            'zsdms:datumVernietigDossier': None,
        })
    def setUp(self):
        super().setUp()

        vandaag = self.genereerdatum()
        self.context = {
            'gemeentecode': '1234',
            'datumVandaag': vandaag,
            'datumGisteren': self.genereerdatum(-1),
            'datumEergisteren': self.genereerdatum(-2),
            'tijdstipRegistratie': self.genereerdatumtijd(),

            'zds_zaaktype_code': '12345678',
            'zds_zaaktype_omschrijving': 'Aanvraag burgerservicenummer behandelen',
            'referentienummer': self.genereerID(10),
            'creerzaak_identificatie_9': self.genereerID(10),
            'voegzaakdocumenttoe_identificatie_5': self.genereerID(10),
            'voegzaakdocumenttoe_identificatie_7': self.genereerID(10),
            'maakzaakdocument_identificatie_5': self.genereerID(10),
        }

        self._dms_client.geef_inhoud.return_value = 'dummy.txt', BytesIO()

        self.zaak = ZaakFactory.create(
            zaakidentificatie=self.context['gemeentecode'] + self.context['creerzaak_identificatie_9'],
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            omschrijving='omschrijving'
        )
        self.edc_type2 = InformatieObjectTypeFactory.create(informatieobjecttypeomschrijving='omschrijving1')
        self.zaakdocument = EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype__informatieobjecttypeomschrijving='omschrijving',
            informatieobjectidentificatie=self.context['voegzaakdocumenttoe_identificatie_5'],
            formaat='formaat',
            creatiedatum=vandaag,
            titel='titel',
            taal='taal',
            vertrouwelijkaanduiding='VERTROUWELIJK',
            auteur='auteur',
            link=None
        )
        ZaakInformatieObjectFactory.create(zaak=self.zaak, informatieobject=self.zaakdocument)

        self.zaakdocument2 = EnkelvoudigInformatieObjectFactory.create(
            informatieobjectidentificatie=self.context['voegzaakdocumenttoe_identificatie_7'],
            vertrouwelijkaanduiding='VERTROUWELIJK',
            auteur='auteur',
        )
        ZaakInformatieObjectFactory.create(zaak=self.zaak, informatieobject=self.zaakdocument2)

        self.zaakdocument3 = EnkelvoudigInformatieObjectFactory.create(
            informatieobjectidentificatie=self.context['maakzaakdocument_identificatie_5'],
            vertrouwelijkaanduiding='VERTROUWELIJK',
            auteur='auteur',
        )
        ZaakInformatieObjectFactory.create(zaak=self.zaak, informatieobject=self.zaakdocument3)
    def test_existing_zaak(self, mock_client):
        zaak = ZaakFactory.create()
        mock_client.creeer_zaakfolder.assert_called_once_with(zaak)

        zaak.save()
        self.assertEqual(mock_client.creeer_zaakfolder.call_count, 1)

        # act as if it's new object to verify those get processed correctly
        zaak.pk = None
        zaak.zaakidentificatie = 'iets nieuws'
        zaak.save()
        self.assertEqual(mock_client.creeer_zaakfolder.call_count, 2)
    def test_existing_zaak(self, mock_client):
        zaak = ZaakFactory.create()
        mock_client.creeer_zaakfolder.assert_called_once_with(zaak)

        zaak.save()
        self.assertEqual(mock_client.creeer_zaakfolder.call_count, 1)

        # act as if it's new object to verify those get processed correctly
        zaak.pk = None
        zaak.zaakidentificatie = 'iets nieuws'
        zaak.save()
        self.assertEqual(mock_client.creeer_zaakfolder.call_count, 2)
    def setUp(self):
        super().setUp()
        self.zaak_1 = ZaakFactory.create(status_set__indicatie_laatst_gezette_status=JaNee.ja)
        self.zaak_3 = ZaakFactory.create(status_set__indicatie_laatst_gezette_status=JaNee.ja)
        self.zaak_5 = ZaakFactory.create(status_set__indicatie_laatst_gezette_status=JaNee.ja)

        self.edc_type = InformatieObjectTypeFactory.create(
            informatieobjecttypeomschrijving='omschrijving')
        self.edc_type2 = InformatieObjectTypeFactory.create(
            informatieobjecttypeomschrijving='Aanvraag burgerservicenummer behandelen'
        )

        self.context = {
            'gemeentecode': '',
            'referentienummer': self.genereerID(10),
            'datumVandaag': self.genereerdatum(),
            'datumEergisteren': self.genereerdatum(-2),

            'tijdstipRegistratie': self.genereerdatumtijd(),
            'zds_zaaktype_code': '12345678',
            'zds_zaaktype_omschrijving': 'Aanvraag burgerservicenummer behandelen',

            'maakzaakdocument_identificatie': '123456789ABC'
        }
    def test_relateer_aan_zaak(self):
        zaak = ZaakFactory.create(status_set__indicatie_laatst_gezette_status=JaNee.ja)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        zaak_folder = self.client.creeer_zaakfolder(zaak)
        self.client.maak_zaakdocument(document)
        document.refresh_from_db()

        result = self.client.relateer_aan_zaak(document, zaak)

        self.assertIsNone(result)
        cmis_doc = self.client._get_cmis_doc(document)
        parents = [parent.id for parent in cmis_doc.getObjectParents()]
        self.assertEqual(parents, [zaak_folder.id])
    def test_relateer_aan_zaak(self):
        zaak = ZaakFactory.create(status_set__indicatie_laatst_gezette_status=JaNee.ja)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        zaak_folder = self.client.creeer_zaakfolder(zaak)
        self.client.maak_zaakdocument(document)
        document.refresh_from_db()

        result = self.client.relateer_aan_zaak(document, zaak)

        self.assertIsNone(result)
        cmis_doc = self.client._get_cmis_doc(document)
        parents = [parent.id for parent in cmis_doc.getObjectParents()]
        self.assertEqual(parents, [zaak_folder.id])
    def test_cancel_checkout_invalid_checkout_id(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document, zaak)
        checkout_id, checkout_by = self.client.checkout(document)

        with self.assertRaises(DocumentConflictException):
            self.client.cancel_checkout(document, '')
    def test_check_lock_status_unlocked(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document, zaak)

        result = self.client.is_locked(document)

        self.assertFalse(result)
    def test_check_lock_status_unlocked(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document, zaak)

        result = self.client.is_locked(document)

        self.assertFalse(result)
    def test_cancel_checkout_invalid_checkout_id(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document, zaak)
        checkout_id, checkout_by = self.client.checkout(document)

        with self.assertRaises(DocumentConflictException):
            self.client.cancel_checkout(document, '')
    def test_update_checked_out_zaakdocument_with_incorrect_checkout_id(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)
        cmis_doc.checkout()
        inhoud = _create_binaire_inhoud(b'leaky abstraction...', filename='andere bestandsnaam.txt')

        with self.assertRaises(DocumentConflictException):
            self.client.update_zaakdocument(document, checkout_id='definitely not right', inhoud=inhoud)
    def test_update_checked_out_zaakdocument_with_incorrect_checkout_id(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        cmis_doc = self.client.maak_zaakdocument(document, zaak)
        cmis_doc.checkout()
        inhoud = _create_binaire_inhoud(b'leaky abstraction...', filename='andere bestandsnaam.txt')

        with self.assertRaises(DocumentConflictException):
            self.client.update_zaakdocument(document, checkout_id='definitely not right', inhoud=inhoud)
    def test_ontkoppel_zaakdocument(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        cmis_folder = self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document, zaak)

        result = self.client.ontkoppel_zaakdocument(document, zaak)

        self.assertIsNone(result)
        # check that the zaakfolder is empty
        self.assertFalse(cmis_folder.getChildren())
    def test_ontkoppel_zaakdocument(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        cmis_folder = self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document, zaak)

        result = self.client.ontkoppel_zaakdocument(document, zaak)

        self.assertIsNone(result)
        # check that the zaakfolder is empty
        self.assertFalse(cmis_folder.getChildren())
    def test_verwijder_document(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        zaak_folder = self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document, zaak)

        result = self.client.verwijder_document(document)

        self.assertIsNone(result)
        # check that it's gone
        trash_folder, _ = self.client._get_or_create_folder(self.client.TRASH_FOLDER)
        self.assertEqual(len(trash_folder.getChildren()), 0)
        self.assertEqual(len(zaak_folder.getChildren()), 0)
    def test_verwijder_document(self):
        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            zaakidentificatie='123456789',
            einddatum=None,
            zaaktype__zaaktypeidentificatie='998877',
            zaaktype__zaaktypeomschrijving='SOAP is leuk',
        )
        zaak_folder = self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(
            titel='testnaam', informatieobjectidentificatie='31415926535',
            beschrijving='Een beschrijving', zaak=zaak
        )
        self.client.maak_zaakdocument(document, zaak)

        result = self.client.verwijder_document(document)

        self.assertIsNone(result)
        # check that it's gone
        trash_folder, _ = self.client._get_or_create_folder(self.client.TRASH_FOLDER)
        self.assertEqual(len(trash_folder.getChildren()), 0)
        self.assertEqual(len(zaak_folder.getChildren()), 0)
    def test_lees_document(self):
        """
        Ref #83: geefZaakdocumentLezen vraagt een kopie van het bestand op.

        Van het bestand uit het DMS wordt opgevraagd: inhoud, bestandsnaam.
        """
        zaak = ZaakFactory.create(status_set__indicatie_laatst_gezette_status=JaNee.ja)
        self.client.creeer_zaakfolder(zaak)
        document = EnkelvoudigInformatieObjectFactory.create(informatieobjectidentificatie='123456', zaak=zaak)
        cmis_doc = self.client.maak_zaakdocument(document, zaak)

        # empty by default
        filename, file_obj = self.client.geef_inhoud(document)

        self.assertEqual(filename, document.titel)
        self.assertEqual(file_obj.read(), b'')

        cmis_doc.setContentStream(BytesIO(b'some content'), 'text/plain')

        filename, file_obj = self.client.geef_inhoud(document)

        self.assertEqual(filename, document.titel)
        self.assertEqual(file_obj.read(), b'some content')
예제 #43
0
 def setUp(self):
     self.zaak = ZaakFactory.create()
 def inner():
     zaak = ZaakFactory.create()
     self.assertIsNotNone(zaak.pk)
     raise Exception('Something went horribly wrong')
 def test_folder_created(self, mock_client):
     zaak = ZaakFactory.create()
     mock_client.creeer_zaakfolder.assert_called_once_with(zaak)
예제 #46
0
    def test_create(self):
        self._dms_client.geef_inhoud.return_value = ('doc 1', BytesIO())

        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja)
        client = self._get_client('OntvangAsynchroon')
        stuf_factory, zkn_factory, zds_factory = self._get_type_factories(
            client)
        today = date.today().strftime('%Y%m%d')

        response = client.service.maakZaakdocument_EdcLk01(
            parameters=stuf_factory['ParametersLk01'](
                indicatorOvername='V',
                mutatiesoort='T',
            ),
            stuurgegevens=stuf_factory['EDC-StuurgegevensLk01'](
                berichtcode='Lk01',
                entiteittype='EDC',
                zender=self.zender,
                ontvanger=self.ontvanger,
                referentienummer='1234',
                tijdstipBericht=stuf_datetime.now(),
            ),
            object=zkn_factory['MaakZaakdocument-EDC-kennisgeving'](
                **{
                    'entiteittype':
                    'EDC',
                    'verwerkingssoort':
                    'T',
                    'identificatie':
                    '12345ABC',
                    'dct.omschrijving':
                    self.iot.informatieobjecttypeomschrijving,
                    'creatiedatum':
                    today,
                    'ontvangstdatum':
                    today,
                    'titel':
                    'To be Everywhere is to be Nowhere',
                    'beschrijving':
                    '2016 album',
                    'formaat':
                    'CD',
                    'taal':
                    'Engels',
                    'versie':
                    '1',
                    'status':
                    'Gepubliceerd',
                    'verzenddatum':
                    today,
                    'vertrouwelijkAanduiding':
                    'OPENBAAR',
                    'auteur':
                    'Thrice',
                    # 'link': ''
                    'inhoud':
                    stuf_factory.BinaireInhoud(
                        b'',
                        bestandsnaam='to_be_everywhere.flac',
                        contentType='audio/flac',
                    ),
                    # 'tijdvakGeldigheid': stuf_factory.tijdvakGeldigheid(
                    #     beginGeldigheid=today,
                    # ),
                    # 'tijdstipRegistratie': '',
                    # 'extraElementend': None,
                    'isRelevantVoor':
                    zkn_factory['EDCZAK-kennisgeving'](
                        entiteittype='EDCZAK',
                        verwerkingssoort='T',
                        gerelateerde=zkn_factory[
                            'ZAK-kerngegevensKennisgeving'](
                                entiteittype='ZAK',
                                verwerkingssoort='I',
                                identificatie=zaak.zaakidentificatie,
                                omschrijving=zaak.omschrijving,
                                # isVan=None
                            ),
                        # titel
                        # beschrijving
                        # registratiedatum
                        # stt.volgnummer
                        # stt.omschrijving
                        # sta.datumStatusGezet
                        # tijdvakRelatie
                        # tijdvakGeldigheid
                        # tijdstipRegistratie
                        # extraElementen
                    )
                }))

        self.assertIsNotNone(response)
        self.assertEquals(EnkelvoudigInformatieObject.objects.count(), 1)
        zaakdocument = ZaakInformatieObject.objects.get()
        self.assertEquals(zaakdocument.zaak, zaak)
        self.assertIsNotNone(zaakdocument.informatieobject)
 def test_folder_created(self, mock_client):
     zaak = ZaakFactory.create()
     mock_client.creeer_zaakfolder.assert_called_once_with(zaak)
 def inner():
     zaak = ZaakFactory.create()
     self.assertIsNotNone(zaak.pk)
     raise Exception('Something went horribly wrong')
    def handle(self, *args, **options):

        # Needed for all tests.
        ZaakType.objects.filter(
            zaaktypeomschrijving='Aanvraag burgerservicenummer behandelen',
            zaaktypeidentificatie='12345678',
        ).delete()

        # Medewerker.objects.get_or_create(
        #     medewerkeridentificatie='123456789',
        #     achternaam='achternaam',
        #     voorvoegsel_achternaam='voorvoeg',
        #     voorletters='voorletters',
        #     defaults={
        #         'organisatorische_eenheid': None,
        #     }
        # )

        ZaakTypeFactory.create(
            zaaktypeomschrijving='Aanvraag burgerservicenummer behandelen',
            zaaktypeidentificatie='12345678',
            datum_begin_geldigheid_zaaktype='20171001')

        # Required for 'creeerZaak_zakLk01 volgnummer 3'

        # First do cleanup.
        Medewerker.objects.filter(
            medewerkeridentificatie='7007',
            organisatorische_eenheid__isnull=True).delete()
        ZaakType.objects.filter(
            zaaktypeomschrijving='Aanvraag burgerservicenummer behandelen',
            zaaktypeidentificatie='12345679',
        ).delete()

        try:
            organisatorische_eenheid = OrganisatorischeEenheid.objects.filter(
                identificatie='organisatorischeEenheid',
                naam='Naam',
                organisatieeenheididentificatie='organisatorischeEenheid',
                organisatieidentificatie='0',
                gevestigd_in__is_specialisatie_van__identificatie=
                '012345678910',
                gevestigd_in__is_specialisatie_van__handelsnaam=[
                    'handelsnaam',
                ],
            ).get()
        except OrganisatorischeEenheid.DoesNotExist:
            pass
        else:
            if organisatorische_eenheid.gevestigd_in.is_specialisatie_van:
                organisatorische_eenheid.gevestigd_in.is_specialisatie_van.delete(
                )
            if organisatorische_eenheid.gevestigd_in:
                organisatorische_eenheid.gevestigd_in.delete()

        OverigeAdresseerbaarObjectAanduidingObject.objects.filter(
            identificatie='0123456789101112',
            woonplaatsnaam='woonplaatsNaam',
            naam_openbare_ruimte='openbareRuimteNaam',
            huisnummer=99999,
            huisletter='A',
            huisnummertoevoeging='',
        ).delete()

        MedewerkerFactory.create(
            medewerkeridentificatie='7007',
            organisatorische_eenheid=None,
        )
        zaak_type = ZaakTypeFactory.create(
            zaaktypeomschrijving='Aanvraag burgerservicenummer behandelen',
            zaaktypeidentificatie='12345679')

        status_type1 = StatusType.objects.get_or_create(
            statustypeomschrijving='Intake afgerond',
            statustypevolgnummer='1',
            zaaktype=zaak_type,
        )

        status_type2 = StatusType.objects.get_or_create(
            statustypeomschrijving='Afgerekend',
            statustypevolgnummer='3',
            zaaktype=zaak_type,
        )

        status_type3 = StatusType.objects.get_or_create(
            statustypeomschrijving='Product opgesteld',
            statustypevolgnummer='5',
            zaaktype=zaak_type,
        )

        status_type4 = StatusType.objects.get_or_create(
            statustypeomschrijving='Zaak afgerond',
            statustypevolgnummer='7',
            zaaktype=zaak_type,
        )

        organisatorische_eenheid = OrganisatorischeEenheidFactory.create(
            identificatie='organisatorischeEenheid',
            naam='Naam',
            organisatieeenheididentificatie='organisatorischeEenheid',
            organisatieidentificatie='0',
            gevestigd_in__is_specialisatie_van__identificatie='012345678910',
            gevestigd_in__is_specialisatie_van__handelsnaam=[
                'handelsnaam',
            ],
        )

        # OverigeAdresseerbaarObjectAanduidingObjectFactory.create(
        #     identificatie='0123456789101112',
        #     woonplaatsnaam='woonplaatsNaam',
        #     naam_openbare_ruimte='openbareRuimteNaam',
        #     huisnummer=99999,
        #     huisletter='A',
        #     huisnummertoevoeging='',
        # )

        # Required for creeerZaak_zakLk01 volgnummer 5

        # Deelzaak en Andere zaak
        ZaakFactory.create(
            zaakidentificatie='0123456789',
            omschrijving='omschrijving',
        )

        NatuurlijkPersoon.objects.filter(
            burgerservicenummer=self.context['gemeentecode'] +
            '56789').delete()
        NatuurlijkPersoonFactory.create(
            burgerservicenummer=self.context['gemeentecode'] + '56789')

        # Required for creeerZaak_zakLk01 volgnummer 7
        NietNatuurlijkPersoon.objects.filter(
            rsin=self.context['gemeentecode'] + '56789').delete()
        NietNatuurlijkPersoonFactory.create(rsin=self.context['gemeentecode'] +
                                            '56789')

        # Required for creeerZaak_zakLk01 volgnummer 9, 11 and 13
        Vestiging.objects.filter(identificatie='010203040506').delete()
        VestigingFactory.create(identificatie='010203040506')

        # Required for creeerZaak_zakLk01 volgnummer 13
        medewerkers = [
            {
                'medewerkeridentificatie':
                self.context['gemeentecode'] + '56791',
                'achternaam': 'achternaam22',
                'voorletters': 'voorletters22',
                'voorvoegsel_achternaam': 'voorvoeg22',
                'organisatorische_eenheid': None,
            },
            {
                'medewerkeridentificatie':
                self.context['gemeentecode'] + '56790',
                'achternaam': 'achternaam20',
                'voorletters': 'voorletters20',
                'voorvoegsel_achternaam': 'voorvoeg20',
                'organisatorische_eenheid': None,
            },
            {
                'medewerkeridentificatie':
                self.context['gemeentecode'] + '56789',
                'achternaam': 'achternaam22',
                'voorletters': 'voorletters22',
                'voorvoegsel_achternaam': 'voorvoeg22',
                'organisatorische_eenheid': None,
            },
            {
                'medewerkeridentificatie':
                self.context['gemeentecode'] + '56788',
                'achternaam': 'achternaam2',
                'voorletters': 'voorletters2',
                'voorvoegsel_achternaam': 'voorvoeg2',
                'organisatorische_eenheid': None,
            },
            {
                'medewerkeridentificatie':
                self.context['gemeentecode'] + '56787',
                'achternaam': 'achternaam22',
                'voorletters': 'voorletters22',
                'voorvoegsel_achternaam': 'voorvoeg22',
                'organisatorische_eenheid': None,
            },
            {
                'medewerkeridentificatie':
                self.context['gemeentecode'] + '56786',
                'achternaam': 'achternaam6',
                'voorletters': 'voorletters6',
                'voorvoegsel_achternaam': 'voorvoeg6',
                'organisatorische_eenheid': None,
            },
            {
                'medewerkeridentificatie':
                self.context['gemeentecode'] + '56785',
                'achternaam': 'unknown',
                'voorletters': 'unknown',
                'voorvoegsel_achternaam': 'unknown',
                'organisatorische_eenheid': None,
            },
            {
                'medewerkeridentificatie':
                self.context['gemeentecode'] + '56784',
                'achternaam': 'achternaam22',
                'voorletters': 'voorletters22',
                'voorvoegsel_achternaam': 'voorvoeg22',
                'organisatorische_eenheid': None,
            },
            {
                'medewerkeridentificatie':
                self.context['gemeentecode'] + '56783',
                'achternaam': 'achternaam2',
                'voorletters': 'voorletters2',
                'voorvoegsel_achternaam': 'voorvoeg2',
                'organisatorische_eenheid': None,
            },
            {
                'medewerkeridentificatie':
                self.context['gemeentecode'] + '56782',
                'achternaam': 'achternaam22',
                'voorletters': 'voorletters22',
                'voorvoegsel_achternaam': 'voorvoeg22',
                'organisatorische_eenheid': None,
            },
            {
                'medewerkeridentificatie':
                self.context['gemeentecode'] + '56781',
                'achternaam': 'achternaam2',
                'voorletters': 'voorletters2',
                'voorvoegsel_achternaam': 'voorvoeg2',
                'organisatorische_eenheid': None,
            },
        ]
        for medewerker in medewerkers:
            Medewerker.objects.get_or_create(defaults={
                'geslachtsaanduiding':
                GeslachtsAanduiding.onbekend,
            },
                                             **medewerker)

        InformatieObjectType.objects.filter(
            informatieobjecttypeomschrijving='omschrijving').delete()
        InformatieObjectType.objects.filter(
            informatieobjecttypeomschrijving=
            'Aanvraag burgerservicenummer behandelen').delete()
        InformatieObjectTypeFactory.create(
            informatieobjecttypeomschrijving='omschrijving')
        InformatieObjectTypeFactory.create(
            informatieobjecttypeomschrijving=
            'Aanvraag burgerservicenummer behandelen')

        oeh2_defaults = {
            'organisatieeenheididentificatie': "0123456785",
            'organisatieidentificatie': "0123456785"[:4],
            'naam': 'naam2',
            'gevestigd_in': organisatorische_eenheid.gevestigd_in,
        }

        organisatorische_eenheid, _ = OrganisatorischeEenheid.objects.get_or_create(
            identificatie="0123456785",
            defaults=oeh2_defaults,
        )

        # For actualiseerZaakstatus volgnummer 1
        OrganisatorischeEenheid.objects.get_or_create(
            identificatie='0123456789',
            organisatieeenheididentificatie="0123456789",
            organisatieidentificatie="0123456789"[:4],
            defaults={
                'naam': '0123456789',
                'gevestigd_in': organisatorische_eenheid.gevestigd_in,
            })

        # For actualiseerZaakstatus volgnummer 5
        # TODO [KING]: Deze organisatorische eenheid is volgens de test ergens anders
        # gevestigd.
        OrganisatorischeEenheid.objects.get_or_create(
            identificatie='01234567890',
            organisatieeenheididentificatie="01234567890",
            organisatieidentificatie="01234567890"[:4],
            defaults={
                'naam': '01234567890',
                'gevestigd_in': organisatorische_eenheid.gevestigd_in,
            })

        NatuurlijkPersoon.objects.filter(
            burgerservicenummer='012345678').delete()
        natuurlijk_persoon = NatuurlijkPersoonFactory.create(
            burgerservicenummer='012345678',
            naam_geslachtsnaam='geslachtsnaam5',
            naam_voorvoegsel_geslachtsnaam_voorvoegsel='voorvoeg5',
            naam_aanschrijving_voorletters_aanschrijving='voorletters5',
            naam_voornamen='voornamen5',
            geslachtsaanduiding='M',
            geboortedatum_ingeschreven_persoon=self.genereerdatum(),
        )

        NietNatuurlijkPersoon.objects.filter(
            rsin='012345678', statutaire_naam='statutaireNaam').delete()
        niet_natuurlijk_persoon = NietNatuurlijkPersoonFactory.create(
            rsin='012345678', statutaire_naam='statutaireNaam')

        # This is the default BesluitType.
        BesluitType.objects.get_or_create(
            besluittypeomschrijving=None,
            defaults={
                'domein': 'dom',
                'rsin': 12345,
                'reactietermijn': 5,
                'publicatie_indicatie': 'J',
                'datum_begin_geldigheid_besluittype': self.genereerdatum(),
            })

        BesluitType.objects.get_or_create(
            besluittypeomschrijving='omschrijving',
            defaults={
                'domein': 'dom',
                'rsin': 12345,
                'reactietermijn': 5,
                'publicatie_indicatie': 'J',
                'datum_begin_geldigheid_besluittype': self.genereerdatum(),
            })
        BesluitType.objects.get_or_create(
            besluittypeomschrijving='bst.omschrijving',
            defaults={
                'domein': 'dom',
                'rsin': 12345,
                'reactietermijn': 5,
                'publicatie_indicatie': 'J',
                'datum_begin_geldigheid_besluittype': self.genereerdatum(),
            })

        BesluitType.objects.get_or_create(
            besluittypeomschrijving='bst.omschrijving3',
            defaults={
                'domein': 'dom',
                'rsin': 12345,
                'reactietermijn': 5,
                'publicatie_indicatie': 'J',
                'datum_begin_geldigheid_besluittype': self.genereerdatum(),
            })
예제 #50
0
 def setUp(self):
     self.zaak = ZaakFactory.create(zaakidentificatie='123')
     self.zaak2 = ZaakFactory.create(zaakidentificatie='555')
     self.status = StatusFactory.create(zaak=self.zaak)
     self.status2 = StatusFactory.create(zaak=self.zaak2)
    def setUp(self):
        super().setUp()

        vandaag = self.genereerdatum()
        self.context = {
            'gemeentecode': '1234',
            'datumVandaag': vandaag,
            'datumGisteren': self.genereerdatum(-1),
            'datumEergisteren': self.genereerdatum(-2),
            'tijdstipRegistratie': self.genereerdatumtijd(),
            'zds_zaaktype_code': '12345678',
            'zds_zaaktype_omschrijving':
            'Aanvraag burgerservicenummer behandelen',
            'referentienummer': self.genereerID(10),
            'creerzaak_identificatie_9': self.genereerID(10),
            'voegzaakdocumenttoe_identificatie_5': self.genereerID(10),
            'voegzaakdocumenttoe_identificatie_7': self.genereerID(10),
            'maakzaakdocument_identificatie_5': self.genereerID(10),
        }

        self._dms_client.geef_inhoud.return_value = 'dummy.txt', BytesIO()

        self.zaak = ZaakFactory.create(
            zaakidentificatie=self.context['gemeentecode'] +
            self.context['creerzaak_identificatie_9'],
            status_set__indicatie_laatst_gezette_status=JaNee.ja,
            omschrijving='omschrijving')
        self.edc_type2 = InformatieObjectTypeFactory.create(
            informatieobjecttypeomschrijving='omschrijving1')
        self.zaakdocument = EnkelvoudigInformatieObjectFactory.create(
            informatieobjecttype__informatieobjecttypeomschrijving=
            'omschrijving',
            informatieobjectidentificatie=self.
            context['voegzaakdocumenttoe_identificatie_5'],
            formaat='formaat',
            creatiedatum=vandaag,
            titel='titel',
            taal='taal',
            vertrouwlijkaanduiding='VERTROUWELIJK',
            auteur='auteur',
            link=None)
        ZaakInformatieObjectFactory.create(zaak=self.zaak,
                                           informatieobject=self.zaakdocument)

        self.zaakdocument2 = EnkelvoudigInformatieObjectFactory.create(
            informatieobjectidentificatie=self.
            context['voegzaakdocumenttoe_identificatie_7'],
            vertrouwlijkaanduiding='VERTROUWELIJK',
            auteur='auteur',
        )
        ZaakInformatieObjectFactory.create(zaak=self.zaak,
                                           informatieobject=self.zaakdocument2)

        self.zaakdocument3 = EnkelvoudigInformatieObjectFactory.create(
            informatieobjectidentificatie=self.
            context['maakzaakdocument_identificatie_5'],
            vertrouwlijkaanduiding='VERTROUWELIJK',
            auteur='auteur',
        )
        ZaakInformatieObjectFactory.create(zaak=self.zaak,
                                           informatieobject=self.zaakdocument3)
    def test_zs_dms_interaction2_no_inhoud(self):
        """
        Het ZS maakt gebruik van de CMIS-documentservices om de wijzigingen met
        het DMS te synchroniseren.

        Het ZS zorgt ervoor dat het document dat is aangeboden door de DSC
        wordt vastgelegd in het DMS. Hiervoor maakt het ZS gebruik van de
        CMIS-services die aangeboden worden door het DMS. Hierbij gelden de
        volgende eisen:

        * Het document wordt gerelateerd aan de juiste Zaakfolder (Zie 5.1)
        * Het document wordt opgeslagen als objecttype EDC (Zie 5.2)
        * Minimaal de vereiste metadata voor een EDC wordt vastgelegd in de
          daarvoor gedefinieerde objectproperties. In Tabel 3 is een mapping
          aangegeven tussen de StUF-ZKN-elementen en CMIS-objectproperties.
        """
        self._dms_client.geef_inhoud.return_value = ('doc 1', BytesIO())

        zaak = ZaakFactory.create(status_set__indicatie_laatst_gezette_status=JaNee.ja)
        client = self._get_client('OntvangAsynchroon')
        stuf_factory, zkn_factory, zds_factory = self._get_type_factories(client)
        today = date.today().strftime('%Y%m%d')

        response = client.service.maakZaakdocument_EdcLk01(
            parameters=stuf_factory['ParametersLk01'](
                indicatorOvername='V',
                mutatiesoort='T',
            ),
            stuurgegevens=stuf_factory['EDC-StuurgegevensLk01'](
                berichtcode='Lk01',
                entiteittype='EDC',
                zender=self.zender,
                ontvanger=self.ontvanger,
                referentienummer='1234',
                tijdstipBericht=stuf_datetime.now(),
            ),
            object=zkn_factory['MaakZaakdocument-EDC-kennisgeving'](**{
                'entiteittype': 'EDC',
                'verwerkingssoort': 'T',
                'identificatie': '12345ABC',
                'dct.omschrijving': self.iot.informatieobjecttypeomschrijving,
                'creatiedatum': today,
                'ontvangstdatum': today,
                'titel': 'To be Everywhere is to be Nowhere',
                'beschrijving': '2016 album',
                'formaat': 'CD',
                'taal': 'Engels',
                'versie': '1',
                'status': 'Gepubliceerd',
                'verzenddatum': today,
                'vertrouwelijkAanduiding': 'OPENBAAR',
                'auteur': 'Thrice',
                # 'link': ''
                # 'tijdvakGeldigheid': stuf_factory.tijdvakGeldigheid(
                #     beginGeldigheid=today,
                # ),
                # 'tijdstipRegistratie': '',
                # 'extraElementend': None,
                'isRelevantVoor': zkn_factory['EDCZAK-kennisgeving'](
                    entiteittype='EDCZAK',
                    verwerkingssoort='T',
                    gerelateerde=zkn_factory['ZAK-kerngegevensKennisgeving'](
                        entiteittype='ZAK',
                        verwerkingssoort='I',
                        identificatie=zaak.zaakidentificatie,
                        omschrijving=zaak.omschrijving,
                        # isVan=None
                    ),
                    # titel
                    # beschrijving
                    # registratiedatum
                    # stt.volgnummer
                    # stt.omschrijving
                    # sta.datumStatusGezet
                    # tijdvakRelatie
                    # tijdvakGeldigheid
                    # tijdstipRegistratie
                    # extraElementen
                )
            })
        )

        self.assertIsNotNone(response)
        # assert that the correct DMS client calls were made
        document = EnkelvoudigInformatieObject.objects.get()

        # the document should have been registered in the DMS
        self._service_dms_client.maak_zaakdocument.assert_called_once_with(
            document, filename=None, sender='*****@*****.**')

        # the document should have been moved to the correct folder
        self._service_dms_client.relateer_aan_zaak.assert_called_once_with(document, zaak)
예제 #53
0
    def test_zs_dms_interaction2_no_inhoud(self):
        """
        Het ZS maakt gebruik van de CMIS-documentservices om de wijzigingen met
        het DMS te synchroniseren.

        Het ZS zorgt ervoor dat het document dat is aangeboden door de DSC
        wordt vastgelegd in het DMS. Hiervoor maakt het ZS gebruik van de
        CMIS-services die aangeboden worden door het DMS. Hierbij gelden de
        volgende eisen:

        * Het document wordt gerelateerd aan de juiste Zaakfolder (Zie 5.1)
        * Het document wordt opgeslagen als objecttype EDC (Zie 5.2)
        * Minimaal de vereiste metadata voor een EDC wordt vastgelegd in de
          daarvoor gedefinieerde objectproperties. In Tabel 3 is een mapping
          aangegeven tussen de StUF-ZKN-elementen en CMIS-objectproperties.
        """
        self._dms_client.geef_inhoud.return_value = ('doc 1', BytesIO())

        zaak = ZaakFactory.create(
            status_set__indicatie_laatst_gezette_status=JaNee.ja)
        client = self._get_client('OntvangAsynchroon')
        stuf_factory, zkn_factory, zds_factory = self._get_type_factories(
            client)
        today = date.today().strftime('%Y%m%d')

        response = client.service.maakZaakdocument_EdcLk01(
            parameters=stuf_factory['ParametersLk01'](
                indicatorOvername='V',
                mutatiesoort='T',
            ),
            stuurgegevens=stuf_factory['EDC-StuurgegevensLk01'](
                berichtcode='Lk01',
                entiteittype='EDC',
                zender=self.zender,
                ontvanger=self.ontvanger,
                referentienummer='1234',
                tijdstipBericht=stuf_datetime.now(),
            ),
            object=zkn_factory['MaakZaakdocument-EDC-kennisgeving'](
                **{
                    'entiteittype':
                    'EDC',
                    'verwerkingssoort':
                    'T',
                    'identificatie':
                    '12345ABC',
                    'dct.omschrijving':
                    self.iot.informatieobjecttypeomschrijving,
                    'creatiedatum':
                    today,
                    'ontvangstdatum':
                    today,
                    'titel':
                    'To be Everywhere is to be Nowhere',
                    'beschrijving':
                    '2016 album',
                    'formaat':
                    'CD',
                    'taal':
                    'Engels',
                    'versie':
                    '1',
                    'status':
                    'Gepubliceerd',
                    'verzenddatum':
                    today,
                    'vertrouwelijkAanduiding':
                    'OPENBAAR',
                    'auteur':
                    'Thrice',
                    # 'link': ''
                    # 'tijdvakGeldigheid': stuf_factory.tijdvakGeldigheid(
                    #     beginGeldigheid=today,
                    # ),
                    # 'tijdstipRegistratie': '',
                    # 'extraElementend': None,
                    'isRelevantVoor':
                    zkn_factory['EDCZAK-kennisgeving'](
                        entiteittype='EDCZAK',
                        verwerkingssoort='T',
                        gerelateerde=zkn_factory[
                            'ZAK-kerngegevensKennisgeving'](
                                entiteittype='ZAK',
                                verwerkingssoort='I',
                                identificatie=zaak.zaakidentificatie,
                                omschrijving=zaak.omschrijving,
                                # isVan=None
                            ),
                        # titel
                        # beschrijving
                        # registratiedatum
                        # stt.volgnummer
                        # stt.omschrijving
                        # sta.datumStatusGezet
                        # tijdvakRelatie
                        # tijdvakGeldigheid
                        # tijdstipRegistratie
                        # extraElementen
                    )
                }))

        self.assertIsNotNone(response)
        # assert that the correct DMS client calls were made
        document = EnkelvoudigInformatieObject.objects.get()

        # the document should have been registered in the DMS
        self._service_dms_client.maak_zaakdocument.assert_called_once_with(
            document, filename=None, sender='*****@*****.**')

        # the document should have been moved to the correct folder
        self._service_dms_client.relateer_aan_zaak.assert_called_once_with(
            document, zaak)
    def test_create(self):
        self._dms_client.geef_inhoud.return_value = ('doc 1', BytesIO())

        zaak = ZaakFactory.create(status_set__indicatie_laatst_gezette_status=JaNee.ja)
        client = self._get_client('OntvangAsynchroon')
        stuf_factory, zkn_factory, zds_factory = self._get_type_factories(client)
        today = date.today().strftime('%Y%m%d')

        response = client.service.maakZaakdocument_EdcLk01(
            parameters=stuf_factory['ParametersLk01'](
                indicatorOvername='V',
                mutatiesoort='T',
            ),
            stuurgegevens=stuf_factory['EDC-StuurgegevensLk01'](
                berichtcode='Lk01',
                entiteittype='EDC',
                zender=self.zender,
                ontvanger=self.ontvanger,
                referentienummer='1234',
                tijdstipBericht=stuf_datetime.now(),
            ),
            object=zkn_factory['MaakZaakdocument-EDC-kennisgeving'](**{
                'entiteittype': 'EDC',
                'verwerkingssoort': 'T',
                'identificatie': '12345ABC',
                'dct.omschrijving': self.iot.informatieobjecttypeomschrijving,
                'creatiedatum': today,
                'ontvangstdatum': today,
                'titel': 'To be Everywhere is to be Nowhere',
                'beschrijving': '2016 album',
                'formaat': 'CD',
                'taal': 'Engels',
                'versie': '1',
                'status': 'Gepubliceerd',
                'verzenddatum': today,
                'vertrouwelijkAanduiding': 'OPENBAAR',
                'auteur': 'Thrice',
                # 'link': ''
                'inhoud': stuf_factory.BinaireInhoud(
                    b'',
                    bestandsnaam='to_be_everywhere.flac',
                    contentType='audio/flac',
                ),
                # 'tijdvakGeldigheid': stuf_factory.tijdvakGeldigheid(
                #     beginGeldigheid=today,
                # ),
                # 'tijdstipRegistratie': '',
                # 'extraElementend': None,
                'isRelevantVoor': zkn_factory['EDCZAK-kennisgeving'](
                    entiteittype='EDCZAK',
                    verwerkingssoort='T',
                    gerelateerde=zkn_factory['ZAK-kerngegevensKennisgeving'](
                        entiteittype='ZAK',
                        verwerkingssoort='I',
                        identificatie=zaak.zaakidentificatie,
                        omschrijving=zaak.omschrijving,
                        # isVan=None
                    ),
                    # titel
                    # beschrijving
                    # registratiedatum
                    # stt.volgnummer
                    # stt.omschrijving
                    # sta.datumStatusGezet
                    # tijdvakRelatie
                    # tijdvakGeldigheid
                    # tijdstipRegistratie
                    # extraElementen
                )
            })
        )

        self.assertIsNotNone(response)
        self.assertEquals(EnkelvoudigInformatieObject.objects.count(), 1)
        zaakdocument = ZaakInformatieObject.objects.get()
        self.assertEquals(zaakdocument.zaak, zaak)
        self.assertIsNotNone(zaakdocument.informatieobject)
    def handle(self, *args, **options):

        # Needed for all tests.
        ZaakType.objects.filter(
            zaaktypeomschrijving='Aanvraag burgerservicenummer behandelen',
            zaaktypeidentificatie='12345678',
        ).delete()

        # Medewerker.objects.get_or_create(
        #     medewerkeridentificatie='123456789',
        #     achternaam='achternaam',
        #     voorvoegsel_achternaam='voorvoeg',
        #     voorletters='voorletters',
        #     defaults={
        #         'organisatorische_eenheid': None,
        #     }
        # )

        ZaakTypeFactory.create(
            zaaktypeomschrijving='Aanvraag burgerservicenummer behandelen',
            zaaktypeidentificatie='12345678',
            datum_begin_geldigheid_zaaktype='20171001')

        # Required for 'creeerZaak_zakLk01 volgnummer 3'

        # First do cleanup.
        Medewerker.objects.filter(
            medewerkeridentificatie='7007',
            organisatorische_eenheid__isnull=True
        ).delete()
        ZaakType.objects.filter(
            zaaktypeomschrijving='Aanvraag burgerservicenummer behandelen',
            zaaktypeidentificatie='12345679',
        ).delete()

        try:
            organisatorische_eenheid = OrganisatorischeEenheid.objects.filter(
                identificatie='organisatorischeEenheid',
                naam='Naam',
                organisatieeenheididentificatie='organisatorischeEenheid',
                organisatieidentificatie='0',
                gevestigd_in__is_specialisatie_van__identificatie='012345678910',
                gevestigd_in__is_specialisatie_van__handelsnaam=['handelsnaam', ],
            ).get()
        except OrganisatorischeEenheid.DoesNotExist:
            pass
        else:
            if organisatorische_eenheid.gevestigd_in.is_specialisatie_van:
                organisatorische_eenheid.gevestigd_in.is_specialisatie_van.delete()
            if organisatorische_eenheid.gevestigd_in:
                organisatorische_eenheid.gevestigd_in.delete()

        OverigeAdresseerbaarObjectAanduidingObject.objects.filter(
            identificatie='0123456789101112',
            woonplaatsnaam='woonplaatsNaam',
            naam_openbare_ruimte='openbareRuimteNaam',
            huisnummer=99999,
            huisletter='A',
            huisnummertoevoeging='',
        ).delete()

        MedewerkerFactory.create(
            medewerkeridentificatie='7007',
            organisatorische_eenheid=None,
        )
        zaak_type = ZaakTypeFactory.create(
            zaaktypeomschrijving='Aanvraag burgerservicenummer behandelen',
            zaaktypeidentificatie='12345679')

        status_type1 = StatusType.objects.get_or_create(
            statustypeomschrijving='Intake afgerond',
            statustypevolgnummer='1',
            zaaktype=zaak_type,
        )

        status_type2 = StatusType.objects.get_or_create(
            statustypeomschrijving='Afgerekend',
            statustypevolgnummer='3',
            zaaktype=zaak_type,
        )

        status_type3 = StatusType.objects.get_or_create(
            statustypeomschrijving='Product opgesteld',
            statustypevolgnummer='5',
            zaaktype=zaak_type,
        )

        status_type4 = StatusType.objects.get_or_create(
            statustypeomschrijving='Zaak afgerond',
            statustypevolgnummer='7',
            zaaktype=zaak_type,
        )

        organisatorische_eenheid = OrganisatorischeEenheidFactory.create(
            identificatie='organisatorischeEenheid',
            naam='Naam',
            organisatieeenheididentificatie='organisatorischeEenheid',
            organisatieidentificatie='0',
            gevestigd_in__is_specialisatie_van__identificatie='012345678910',
            gevestigd_in__is_specialisatie_van__handelsnaam=['handelsnaam', ],
        )

        # OverigeAdresseerbaarObjectAanduidingObjectFactory.create(
        #     identificatie='0123456789101112',
        #     woonplaatsnaam='woonplaatsNaam',
        #     naam_openbare_ruimte='openbareRuimteNaam',
        #     huisnummer=99999,
        #     huisletter='A',
        #     huisnummertoevoeging='',
        # )

        # Required for creeerZaak_zakLk01 volgnummer 5

        # Deelzaak en Andere zaak
        ZaakFactory.create(
            zaakidentificatie='0123456789',
            omschrijving='omschrijving',
        )

        NatuurlijkPersoon.objects.filter(
            burgerservicenummer=self.context['gemeentecode'] + '56789'
        ).delete()
        NatuurlijkPersoonFactory.create(burgerservicenummer=self.context['gemeentecode'] + '56789')

        # Required for creeerZaak_zakLk01 volgnummer 7
        NietNatuurlijkPersoon.objects.filter(
            rsin=self.context['gemeentecode'] + '56789'
        ).delete()
        NietNatuurlijkPersoonFactory.create(rsin=self.context['gemeentecode'] + '56789')

        # Required for creeerZaak_zakLk01 volgnummer 9, 11 and 13
        Vestiging.objects.filter(identificatie='010203040506').delete()
        VestigingFactory.create(identificatie='010203040506')

        # Required for creeerZaak_zakLk01 volgnummer 13
        medewerkers = [{
            'medewerkeridentificatie': self.context['gemeentecode'] + '56791',
            'achternaam': 'achternaam22',
            'voorletters': 'voorletters22',
            'voorvoegsel_achternaam': 'voorvoeg22',
            'organisatorische_eenheid': None,
        }, {
            'medewerkeridentificatie': self.context['gemeentecode'] + '56790',
            'achternaam': 'achternaam20',
            'voorletters': 'voorletters20',
            'voorvoegsel_achternaam': 'voorvoeg20',
            'organisatorische_eenheid': None,
        }, {
            'medewerkeridentificatie': self.context['gemeentecode'] + '56789',
            'achternaam': 'achternaam22',
            'voorletters': 'voorletters22',
            'voorvoegsel_achternaam': 'voorvoeg22',
            'organisatorische_eenheid': None,
        }, {
            'medewerkeridentificatie': self.context['gemeentecode'] + '56788',
            'achternaam': 'achternaam2',
            'voorletters': 'voorletters2',
            'voorvoegsel_achternaam': 'voorvoeg2',
            'organisatorische_eenheid': None,
        }, {
            'medewerkeridentificatie': self.context['gemeentecode'] + '56787',
            'achternaam': 'achternaam22',
            'voorletters': 'voorletters22',
            'voorvoegsel_achternaam': 'voorvoeg22',
            'organisatorische_eenheid': None,
        }, {
            'medewerkeridentificatie': self.context['gemeentecode'] + '56786',
            'achternaam': 'achternaam6',
            'voorletters': 'voorletters6',
            'voorvoegsel_achternaam': 'voorvoeg6',
            'organisatorische_eenheid': None,
        }, {
            'medewerkeridentificatie': self.context['gemeentecode'] + '56785',
            'achternaam': 'unknown',
            'voorletters': 'unknown',
            'voorvoegsel_achternaam': 'unknown',
            'organisatorische_eenheid': None,
        }, {
            'medewerkeridentificatie': self.context['gemeentecode'] + '56784',
            'achternaam': 'achternaam22',
            'voorletters': 'voorletters22',
            'voorvoegsel_achternaam': 'voorvoeg22',
            'organisatorische_eenheid': None,
        }, {
            'medewerkeridentificatie': self.context['gemeentecode'] + '56783',
            'achternaam': 'achternaam2',
            'voorletters': 'voorletters2',
            'voorvoegsel_achternaam': 'voorvoeg2',
            'organisatorische_eenheid': None,
        }, {
            'medewerkeridentificatie': self.context['gemeentecode'] + '56782',
            'achternaam': 'achternaam22',
            'voorletters': 'voorletters22',
            'voorvoegsel_achternaam': 'voorvoeg22',
            'organisatorische_eenheid': None,
        }, {
            'medewerkeridentificatie': self.context['gemeentecode'] + '56781',
            'achternaam': 'achternaam2',
            'voorletters': 'voorletters2',
            'voorvoegsel_achternaam': 'voorvoeg2',
            'organisatorische_eenheid': None,
        }, ]
        for medewerker in medewerkers:
            Medewerker.objects.get_or_create(defaults={
                'geslachtsaanduiding': GeslachtsAanduiding.onbekend,
            }, **medewerker)

        InformatieObjectType.objects.filter(informatieobjecttypeomschrijving='omschrijving').delete()
        InformatieObjectType.objects.filter(informatieobjecttypeomschrijving='Aanvraag burgerservicenummer behandelen').delete()
        InformatieObjectTypeFactory.create(informatieobjecttypeomschrijving='omschrijving')
        InformatieObjectTypeFactory.create(informatieobjecttypeomschrijving='Aanvraag burgerservicenummer behandelen')

        oeh2_defaults = {
            'organisatieeenheididentificatie': "0123456785",
            'organisatieidentificatie': "0123456785"[:4],
            'naam': 'naam2',
            'gevestigd_in': organisatorische_eenheid.gevestigd_in,
        }

        organisatorische_eenheid, _ = OrganisatorischeEenheid.objects.get_or_create(
            identificatie="0123456785",
            defaults=oeh2_defaults,
        )

        # For actualiseerZaakstatus volgnummer 1
        OrganisatorischeEenheid.objects.get_or_create(
            identificatie='0123456789',
            organisatieeenheididentificatie="0123456789",
            organisatieidentificatie="0123456789"[:4],
            defaults={
                'naam': '0123456789',
                'gevestigd_in': organisatorische_eenheid.gevestigd_in,
            }
        )

        # For actualiseerZaakstatus volgnummer 5
        # TODO [KING]: Deze organisatorische eenheid is volgens de test ergens anders
        # gevestigd.
        OrganisatorischeEenheid.objects.get_or_create(
            identificatie='01234567890',
            organisatieeenheididentificatie="01234567890",
            organisatieidentificatie="01234567890"[:4],
            defaults={
                'naam': '01234567890',
                'gevestigd_in': organisatorische_eenheid.gevestigd_in,
            }
        )

        NatuurlijkPersoon.objects.filter(
            burgerservicenummer='012345678'
        ).delete()
        natuurlijk_persoon = NatuurlijkPersoonFactory.create(
            burgerservicenummer='012345678',
            naam_geslachtsnaam='geslachtsnaam5',
            naam_voorvoegsel_geslachtsnaam_voorvoegsel='voorvoeg5',
            naam_aanschrijving_voorletters_aanschrijving='voorletters5',
            naam_voornamen='voornamen5',
            geslachtsaanduiding='M',
            geboortedatum_ingeschreven_persoon=self.genereerdatum(),
        )

        NietNatuurlijkPersoon.objects.filter(
            rsin='012345678',
            statutaire_naam='statutaireNaam'
        ).delete()
        niet_natuurlijk_persoon = NietNatuurlijkPersoonFactory.create(
            rsin='012345678',
            statutaire_naam='statutaireNaam'
        )

        # This is the default BesluitType.
        BesluitType.objects.get_or_create(
            besluittypeomschrijving=None,
            defaults={
                'domein': 'dom',
                'rsin': 12345,
                'reactietermijn': 5,
                'publicatie_indicatie': 'J',
                'datum_begin_geldigheid_besluittype': self.genereerdatum(),
            }
        )

        BesluitType.objects.get_or_create(
            besluittypeomschrijving='omschrijving',
            defaults={
                'domein': 'dom',
                'rsin': 12345,
                'reactietermijn': 5,
                'publicatie_indicatie': 'J',
                'datum_begin_geldigheid_besluittype': self.genereerdatum(),
            }
        )
        BesluitType.objects.get_or_create(
            besluittypeomschrijving='bst.omschrijving',
            defaults={
                'domein': 'dom',
                'rsin': 12345,
                'reactietermijn': 5,
                'publicatie_indicatie': 'J',
                'datum_begin_geldigheid_besluittype': self.genereerdatum(),
            }
        )


        BesluitType.objects.get_or_create(
            besluittypeomschrijving='bst.omschrijving3',
            defaults={
                'domein': 'dom',
                'rsin': 12345,
                'reactietermijn': 5,
                'publicatie_indicatie': 'J',
                'datum_begin_geldigheid_besluittype': self.genereerdatum(),
            }
        )