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_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_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_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_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_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_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 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_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_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_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_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 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)