diff --git a/alfa-client/apps/alfa-e2e/cypress.config.ts b/alfa-client/apps/alfa-e2e/cypress.config.ts index 295e1555d5ec2b698d90e570b76ba63fbbe13d7c..51783ad96c857f6e8f3989c8aac7692ce9c4e188 100644 --- a/alfa-client/apps/alfa-e2e/cypress.config.ts +++ b/alfa-client/apps/alfa-e2e/cypress.config.ts @@ -45,3 +45,19 @@ export default defineConfig({ runMode: true, }, }); + +export interface CypressConfig { + baseUrl: string; + env: Env; +} + +export interface Env { + dbUrl: string; + database: string; + userManager: UserManager; +} + +export interface UserManager { + dbUrl: string; + database: string; +} diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-anhang/vorgang-anhang-herunterladen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-anhang/vorgang-anhang-herunterladen.cy.ts index 5c35d68799e7acaa6229dec4f6be990a81b2da05..f2dd9e0c5d7154ae951368e83bbc4011fd94003f 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-anhang/vorgang-anhang-herunterladen.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-anhang/vorgang-anhang-herunterladen.cy.ts @@ -34,12 +34,12 @@ import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main. import { VorgangPage } from '../../../page-objects/vorgang.po'; import { createJpgAttachment, - createJpgGridFsData, + createJpgFileData, createPdfAttachment, - createPdfGridFsData, - createXmlGridFsData, + createPdfFileData, + createXmlFileData, createXmlRepresentation, - initGridFs, + initFile, } from '../../../support/binary-file-util'; import { countDownloadFiles, @@ -51,12 +51,7 @@ import { } from '../../../support/cypress-helper'; import { exist, notExist } from '../../../support/cypress.util'; import { loginAsSabine } from '../../../support/user-util'; -import { - buildVorgang, - createVorgang, - initVorgaenge, - objectIds, -} from '../../../support/vorgang-util'; +import { buildVorgang, createVorgang, initVorgaenge, objectIds } from '../../../support/vorgang-util'; describe('Vorgang Anhänge', () => { const mainPage: MainPage = new MainPage(); @@ -66,17 +61,17 @@ describe('Vorgang Anhänge', () => { const vorgangHeader: VorgangDetailHeaderE2EComponent = vorgangPage.getVorgangDetailHeader(); const subnavigation: VorgangSubnavigationE2EComponent = vorgangPage.getSubnavigation(); const attachmentContainer: AttachmentContainerE2EComponent = vorgangPage.getAttachmentContainer(); + const attachmentList: AttachmentListE2EComponent = new AttachmentListE2EComponent(); - const formularDatenContainer: VorgangFormularDatenE2EComponent = - vorgangPage.getFormularDatenContainer(); - const vorgangDatenFormular: VorgangFormularDatenE2EComponent = - vorgangPage.getFormularDatenContainer(); + const formularDatenContainer: VorgangFormularDatenE2EComponent = vorgangPage.getFormularDatenContainer(); const xmlRepresentation: FileDataE2E = createXmlRepresentation(); + const jpgAttachment: FileDataE2E = createJpgAttachment(); + const pdfAttachment: FileDataE2E = createPdfAttachment(); const sonstigeAttachment = { name: 'datei_sonstiges', - files: [createJpgAttachment(), createPdfAttachment()], + files: [jpgAttachment, pdfAttachment], }; const vorgangKeinAnhang: VorgangE2E = createVorgang(); @@ -93,7 +88,7 @@ describe('Vorgang Anhänge', () => { }; before(() => { - initGridFs([createXmlGridFsData(), createPdfGridFsData(), createJpgGridFsData()]); + initFile([createXmlFileData(), createPdfFileData(), createJpgFileData()]); initVorgaenge([vorgangKeinAnhang, vorgangAnhangVorhanden]); loginAsSabine(); @@ -104,6 +99,7 @@ describe('Vorgang Anhänge', () => { after(() => { dropCollections(); + deleteDownloadFolder(); }); describe('Download Attachment', () => { @@ -122,36 +118,32 @@ describe('Vorgang Anhänge', () => { }); it('should download jpg', () => { - const jpgAttachmentName: string = getJpgAttachment().name; - attachmentContainer.getList().getItem(jpgAttachmentName).getRoot().click(); + attachmentContainer.getList().getItem(jpgAttachment.name).getRoot().click(); waitForSpinnerToDisappear(); - exist(readFileFromDownloads(buildDownloadFileName(jpgAttachmentName))); + exist(readFileFromDownloads(buildDownloadFileName(jpgAttachment.name))); }); it('should download pdf', () => { - const pdfAttachmentName: string = getPdfAttachment().name; - attachmentContainer - .getList() - .getItem(convertToDataTestId(pdfAttachmentName)) - .getRoot() - .click(); + attachmentContainer.getList().getItem(convertToDataTestId(pdfAttachment.name)).getRoot().click(); waitForSpinnerToDisappear(); - exist(readFileFromDownloads(buildDownloadFileName(pdfAttachmentName))); + exist(readFileFromDownloads(buildDownloadFileName(pdfAttachment.name))); }); it('should download attachment zip file', () => { - deleteDownloadFolder().then(() => { - attachmentList.downloadAttachments(); - }); + attachmentList.downloadAttachments(); + + waitForSpinnerToDisappear(); + + exist(readFileFromDownloads(`${vorgangAnhangVorhanden.nummer}_Anhaenge.zip`)); }); it('should unzip attachment file', () => { getDownloadFiles().then((files) => { unzipDownloadFile(files[0]).then(() => { countDownloadFiles().then((count) => { - expect(count).to.eq(3); + expect(count).to.eq(5); }); }); }); @@ -163,14 +155,6 @@ describe('Vorgang Anhänge', () => { exist(vorgangList.getRoot()); }); - - function getJpgAttachment(): FileDataE2E { - return sonstigeAttachment.files[1]; - } - - function getPdfAttachment(): FileDataE2E { - return sonstigeAttachment.files[0]; - } }); describe('Download Representation', () => { diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-dateien-tab.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-dateien-tab.cy.ts index a509bde697a20d4b91a641169ced8ac651ea52be..c93d89d9e08a0433aa15dc52a59e02b8a848f3c1 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-dateien-tab.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-dateien-tab.cy.ts @@ -32,26 +32,17 @@ import { createJpgAttachment, createPdfAttachment, createXmlRepresentation, - initGridFs, + initFile, } from 'apps/alfa-e2e/src/support/binary-file-util'; import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component'; import { EingangE2E, VorgangE2E } from '../../../model/vorgang'; import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po'; import { VorgangPage } from '../../../page-objects/vorgang.po'; -import { - createJpgGridFsData, - createPdfGridFsData, - createXmlGridFsData, -} from '../../../support/binary-file-util'; +import { createJpgFileData, createPdfFileData, createXmlFileData } from '../../../support/binary-file-util'; import { dropCollections } from '../../../support/cypress-helper'; import { contains, exist, notExist } from '../../../support/cypress.util'; import { loginAsSabine } from '../../../support/user-util'; -import { - buildVorgang, - createVorgang, - initVorgaenge, - objectIds, -} from '../../../support/vorgang-util'; +import { buildVorgang, createVorgang, initVorgaenge, objectIds } from '../../../support/vorgang-util'; registerLocaleData(localeDe, 'de', localeDeExtra); @@ -60,8 +51,7 @@ describe('Dateien Tab', () => { const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList(); const vorgangPage: VorgangPage = new VorgangPage(); - const vorgangDatenFormular: VorgangFormularDatenE2EComponent = - vorgangPage.getFormularDatenContainer(); + const vorgangDatenFormular: VorgangFormularDatenE2EComponent = vorgangPage.getFormularDatenContainer(); const vorgangSubnavigation: VorgangSubnavigationE2EComponent = vorgangPage.getSubnavigation(); const attachmentList: AttachmentListE2EComponent = new AttachmentListE2EComponent(); @@ -101,7 +91,7 @@ describe('Dateien Tab', () => { }; before(() => { - initGridFs([createXmlGridFsData(), createPdfGridFsData(), createJpgGridFsData()]); + initFile([createXmlFileData(), createPdfFileData(), createJpgFileData()]); initVorgaenge([vorgangRepresentation, vorgangWithAttachments]); loginAsSabine(); diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/attachment/jpg.json b/alfa-client/apps/alfa-e2e/src/fixtures/attachment/jpg.json index 4c029ded7b8e5f33c7ecf24ed68e66b057848b01..dfc9cd633294f0f8568e74dcce44b1e555455c54 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/attachment/jpg.json +++ b/alfa-client/apps/alfa-e2e/src/fixtures/attachment/jpg.json @@ -3,6 +3,5 @@ "vendorId": "assistants.C45A300C4E5B1B764AE597F6C5DE9B445849AAA5", "name": "win.jpg", "contentType": "image/jpeg", - "size": 10129, - "content": "" + "size": 10129 } diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/attachment/pdf.json b/alfa-client/apps/alfa-e2e/src/fixtures/attachment/pdf.json index 741e703ad15e902db71930a846ebd2b9698748d1..785d5e3631ce9442ff971ac88c2046e0b3949923 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/attachment/pdf.json +++ b/alfa-client/apps/alfa-e2e/src/fixtures/attachment/pdf.json @@ -3,6 +3,5 @@ "vendorId": "assistants.2546462108DD4C61C52C7FC31AE62F7E740315AB", "name": "Anlage Vollmacht.pdf", "contentType": "application/pdf", - "size": 187585, - "content": "" + "size": 187585 } diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/jpg/file.json b/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/jpg/file.json index 7c11a540fe7abb57393df51727f7bc5d63e4a7c2..88949dc44c4f27b899e4b62a1a3ba0551a2dc2c7 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/jpg/file.json +++ b/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/jpg/file.json @@ -10,7 +10,7 @@ }, "metadata": { "vorgangId": "602566a807bb665df9a86111", - "client": "alfa", + "client": "Alfa", "fieldName": "vorgangAttachment", "contentType": "image/jpeg", "name": "win.jpg", diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/pdf/file.json b/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/pdf/file.json index 398ce180a658e2d422edcc4b79ecc79da03d83b5..7aae05bf5c2a691ac039569a2865beb186535cf1 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/pdf/file.json +++ b/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/pdf/file.json @@ -10,7 +10,7 @@ }, "metadata": { "vorgangId": "602566a807bb665df9a86111", - "client": "alfa", + "client": "Alfa", "fieldName": "vorgangAttachment", "contentType": "application/pdf", "name": "Anlage Vollmacht.pdf", diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/xml/file.json b/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/xml/file.json index b7c9bf892a60293fcdb086358959d249ff08617b..957013ed092ec82feec7dd074d0df5212f27b550 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/xml/file.json +++ b/alfa-client/apps/alfa-e2e/src/fixtures/grid-fs/xml/file.json @@ -10,7 +10,7 @@ }, "metadata": { "vorgangId": "602566a807bb665df9a86111", - "client": "eingangAdapter", + "client": "Alfa", "fieldName": "vorgangAttachment", "contentType": "text/xml", "name": "XML-Daten.xml", diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/ozgcloud-file/jpg-file.json b/alfa-client/apps/alfa-e2e/src/fixtures/ozgcloud-file/jpg-file.json new file mode 100644 index 0000000000000000000000000000000000000000..5e8cd63c5601d1a34339326699dadbd47bdbfaa2 --- /dev/null +++ b/alfa-client/apps/alfa-e2e/src/fixtures/ozgcloud-file/jpg-file.json @@ -0,0 +1,14 @@ +{ + "_id": { + "$oid": "6270c62e261af555e8f4f904" + }, + "client": "Alfa", + "contentId": "6270c62e261af555e8f4f904", + "contentType": "image/jpeg'", + "createdBy": "", + "fieldName": "vorgangAttachment", + "name": "win.jpg", + "size": 10129, + "version": 0, + "vorgangId": "602566a807bb665df9a86111" +} diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/ozgcloud-file/pdf-file.json b/alfa-client/apps/alfa-e2e/src/fixtures/ozgcloud-file/pdf-file.json new file mode 100644 index 0000000000000000000000000000000000000000..9c92dc28b5b8c3a94c2b269cd13068065d0aeba8 --- /dev/null +++ b/alfa-client/apps/alfa-e2e/src/fixtures/ozgcloud-file/pdf-file.json @@ -0,0 +1,14 @@ +{ + "_id": { + "$oid": "6270c62e261af555e8f4f900" + }, + "client": "Alfa", + "contentId": "6270c62e261af555e8f4f900", + "contentType": "application/pdf'", + "createdBy": "", + "fieldName": "vorgangAttachment", + "name": "Anlage Vollmacht.pdf", + "size": 187585, + "version": 0, + "vorgangId": "602566a807bb665df9a86111" +} diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/ozgcloud-file/xml-file.json b/alfa-client/apps/alfa-e2e/src/fixtures/ozgcloud-file/xml-file.json new file mode 100644 index 0000000000000000000000000000000000000000..360761985975e3ce2c69f24a256467a8cb495da0 --- /dev/null +++ b/alfa-client/apps/alfa-e2e/src/fixtures/ozgcloud-file/xml-file.json @@ -0,0 +1,14 @@ +{ + "_id": { + "$oid": "626e444157089b0cc5dceddc" + }, + "client": "Alfa", + "contentId": "626e444157089b0cc5dceddc", + "fieldName": "vorgangAttachment", + "contentType": "text/xml", + "name": "XML-Daten.xml", + "createdBy": "", + "size": 3145, + "version": 0, + "vorgangId": "602566a807bb665df9a86111" +} diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/representation/xml.json b/alfa-client/apps/alfa-e2e/src/fixtures/representation/xml.json index 264adc7122f9d139ecc1047dad40061bdc069459..83d654319adf14b3436b93f1b157f4850a63e219 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/representation/xml.json +++ b/alfa-client/apps/alfa-e2e/src/fixtures/representation/xml.json @@ -3,11 +3,5 @@ "vendorId": "myForm-xml", "name": "XML-Daten.xml", "contentType": "text/xml", - "size": 5520, - "content": { - "$binary": { - "base64": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG15Rm9ybSB4bWxuczpwZGY9Imh0dHA6Ly94bWxucy5jaXQuZGUvYXNzaXN0YW50cy9wZGYiIHhtbG5zOnQ9Imh0dHA6Ly94bWxucy5jaXQuZGUvaW50ZWxsaWZvcm0vdHJhbnNhY3Rpb24iIHQ6dXVpZD0iZWFjMjQ4MGUtNzE2Ni00YjE2LWJkZGQtODgwNTkxZTdkOTNiIiB0OmlkPSIyMDIxMDQxNTMwNzAyMDQxNDcwMSIgdDp0aW1lc3RhbXA9IjIwMjEtMDQtMTVUMDg6MzE6NDIuMzk4WiIgdDpzZW5kZXI9ImludGVsbGlmb3JtLm96Zy1zaC5kZSIgdDpmb3JtPSJTaW1wbGVGb3JtU2VuZGV0QW5Ib21lU2VydmVyVm9uVG9yc3RlbiIgdDpmb3JtLWlkPSJTaW1wbGVGb3JtU2VuZGV0QW5Ib21lU2VydmVyVm9uVG9yc3RlbiIgdDpjdXN0b21lcj0iS2llbCIgdDpjdXN0b21lci1pZD0iS2llbCIgdDpjbGllbnQ9InNoLWRldiIgdDpjbGllbnQtaWQ9InNoLWRldiI+PEtvbnRha3RzeXN0ZW1UeXBBPjIzMzAzNDYwMDwvS29udGFrdHN5c3RlbVR5cEE+PEtvbnRha3RzeXN0ZW1UeXBCPjIzMzAzNDYwMTwvS29udGFrdHN5c3RlbVR5cEI+PEFubGllZ2VuSUQ+ODk2NjY3MTwvQW5saWVnZW5JRD48YW50cmFnc3RlbGxlcj48c2hfc3RyYXNzZT5BbiBkZXIgU2NobmVpZGVyZWk8L3NoX3N0cmFzc2U+PHNoX2hhdXNudW1tZXI+MTwvc2hfaGF1c251bW1lcj48c2hfcGx6PjI0MTAzPC9zaF9wbHo+PG9ydF9hdXN3YWhsPjkwMDY0MDIkMDEwMDIwMDA8L29ydF9hdXN3YWhsPjxvcnQ+S2llbDwvb3J0PjxHZWJpZXRJRD45MDA2NDAyPC9HZWJpZXRJRD48R2ViaWV0QkVaRUlDSE5VTkc+S2llbDwvR2ViaWV0QkVaRUlDSE5VTkc+PEdlYmlldEdOUjk0X0dOUj4wMTAwMjAwMDwvR2ViaWV0R05SOTRfR05SPjxzdGFhdD4wMDA8L3N0YWF0Pjxpc28zMTY2bnVtZXJpc2NoPjI3NjwvaXNvMzE2Nm51bWVyaXNjaD48a29udF90ZWxlZm9ubnVtbWVyLz48a29udF9tb2JpbG51bW1lci8+PGtvbnRfdGVsZWZheG51bW1lci8+PGtvbnRfZW1haWwvPjxrb250X2RlbWFpbC8+PC9hbnRyYWdzdGVsbGVyPjxVcGxvYWQxPjxmaWxlIGNvbnRlbnQtdHlwZT0iaW1hZ2UvanBlZyIgZGVzY3JpcHRpb249IiIgaWQ9ImFzc2lzdGFudHMuRTBGQkEzNjFDMTkxRjhCNzIzOTQ5NDY3QUUzMDJCRUEyNEU0NzQ1RSIgbGVuZ3RoPSIxNTUyNTEiPkhlbGdlMS5qcGc8L2ZpbGU+PC9VcGxvYWQxPjxVcGxvYWQyPjxmaWxlIGNvbnRlbnQtdHlwZT0iYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0IiBkZXNjcmlwdGlvbj0iIiBpZD0iYXNzaXN0YW50cy41MkQ3OUU1QjIxMThEMTc0MDA0NUFCODcxNTE1MzVEQ0FEMjRFOUE3IiBsZW5ndGg9Ijc5OTMiPkhlbGdldGV4dDIub2R0PC9maWxlPjwvVXBsb2FkMj48R2ViaWV0SUQ+OTAwNjQwMjwvR2ViaWV0SUQ+PHp1c3RhZW5kaWdlc3RlbGxlPjxPcmdhbmlzYXRpb25zZWluaGVpdGVuQXVzd2FobD4xMDM2MzQ1NTwvT3JnYW5pc2F0aW9uc2VpbmhlaXRlbkF1c3dhaGw+PE9yZ2FuaXNhdGlvbnNlaW5oZWl0ZW5JRD4xMDM2MzQ1NTwvT3JnYW5pc2F0aW9uc2VpbmhlaXRlbklEPjxPcmdhbmlzYXRpb25zZWluaGVpdGVuQkVaRUlDSE5VTkc+TGFuZGVzaGF1cHRzdGFkdCBLaWVsIC0gQsO8cmdlci0gdW5kIE9yZG51bmdzYW10LCBTYWNoYmVyZWljaCBHZWZhaHJlbmFid2VociwgV2FmZmVuYW5nZWxlZ2VuaGVpdGVuLCBKYWdkYmVow7ZyZGUsIEJlc3RhdHR1bmdzYW5nZWxlZ2VuaGVpdGVuPC9PcmdhbmlzYXRpb25zZWluaGVpdGVuQkVaRUlDSE5VTkc+PHN0cmFzc2U+U3RyZXNlbWFubnBsYXR6PC9zdHJhc3NlPjxoYXVzbnVtbWVyPjU8L2hhdXNudW1tZXI+PHBvc3RsZWl0emFobD4yNDEwMzwvcG9zdGxlaXR6YWhsPjxvcnRJRD45MDA2NDAyPC9vcnRJRD48b3J0PktpZWw8L29ydD48dGVsZWZvbm51bW1lci8+PHRlbGVmYXhudW1tZXI+KzQ5IDQzMSA5MDEtNjIxODE8L3RlbGVmYXhudW1tZXI+PGVtYWlsYWRyZXNzZT5HZWZhaHJlbmFid2VockBLaWVsLmRlPC9lbWFpbGFkcmVzc2U+PGRlbWFpbGFkcmVzc2UvPjxrb250YWt0c3lzdGVtX2tlbm51bmcvPjxrb250YWt0c3lzdGVtX2tlbm51bmd6dXNhdHovPjxBbmxpZWdlbkJFWkVJQ0hOVU5HPldhZmZlbnNjaGVpbiAvIEtsZWluZXIgV2FmZmVuc2NoZWluPC9BbmxpZWdlbkJFWkVJQ0hOVU5HPjxsZWlrYUtFWUxJU1Q+OTkwODkwMDgwMDAwMDA7OTkwODkwMDgwMDEwMDA8L2xlaWthS0VZTElTVD48L3p1c3RhZW5kaWdlc3RlbGxlPjxlbXBmYW5nZW5kZXN0ZWxsZT48T3JnYW5pc2F0aW9uc2VpbmhlaXRlbkF1c3dhaGw+OTA2ODg3MzwvT3JnYW5pc2F0aW9uc2VpbmhlaXRlbkF1c3dhaGw+PE9yZ2FuaXNhdGlvbnNlaW5oZWl0ZW5JRD45MDY4ODczPC9PcmdhbmlzYXRpb25zZWluaGVpdGVuSUQ+PE9yZ2FuaXNhdGlvbnNlaW5oZWl0ZW5CRVpFSUNITlVORz5FaW5oZWl0bGljaGVyIEFuc3ByZWNocGFydG5lciBTY2hsZXN3aWctSG9sc3RlaW48L09yZ2FuaXNhdGlvbnNlaW5oZWl0ZW5CRVpFSUNITlVORz48c3RyYXNzZT5SZXZlbnRsb3VhbGxlZTwvc3RyYXNzZT48aGF1c251bW1lcj42PC9oYXVzbnVtbWVyPjxwb3N0bGVpdHphaGw+MjQxMDU8L3Bvc3RsZWl0emFobD48b3J0SUQ+OTAwNjQwMjwvb3J0SUQ+PG9ydD5LaWVsPC9vcnQ+PHRlbGVmb25udW1tZXI+KzQ5IDQzMSA5ODgtODY1MDwvdGVsZWZvbm51bW1lcj48dGVsZWZheG51bW1lcj4rNDkgNDMxIDk4OC02MTYxMTExPC90ZWxlZmF4bnVtbWVyPjxlbWFpbGFkcmVzc2U+aW5mb0BlYS1zaC5kZTwvZW1haWxhZHJlc3NlPjxkZW1haWxhZHJlc3NlPmVhLXBvc3RzdGVsbGVAZWEtc2guZGUtbWFpbC5kZTwvZGVtYWlsYWRyZXNzZT48a29udGFrdHN5c3RlbV9rZW5udW5nPmFmbXNoOjkwNjg4NzNfQXVzbmFobWVMS1dGYWhydmVyYm90PC9rb250YWt0c3lzdGVtX2tlbm51bmc+PGtvbnRha3RzeXN0ZW1fa2VubnVuZ3p1c2F0ej5hbGxlPC9rb250YWt0c3lzdGVtX2tlbm51bmd6dXNhdHo+PC9lbXBmYW5nZW5kZXN0ZWxsZT48ZXJrbGFlcnVuZ2VuPjxjaGVja19nZWJ1ZWhyZW4+dHJ1ZTwvY2hlY2tfZ2VidWVocmVuPjxjaGVja19yaWNodGlna2VpdD50cnVlPC9jaGVja19yaWNodGlna2VpdD48Y2hlY2tfZGF0ZW5zY2h1dHo+dHJ1ZTwvY2hlY2tfZGF0ZW5zY2h1dHo+PGNoZWNrX21pc3NicmF1Y2g+dHJ1ZTwvY2hlY2tfbWlzc2JyYXVjaD48Yl9nZWJ1ZWhyZW5fYmVzY2hyaWZ0dW5nPiogTWlyIGlzdCBiZWthbm50LCBkYXNzIGR1cmNoIGRhcyBFaW5yZWljaGVuIGRlcyBlbGVrdHJvbmlzY2hlbiBBbnRyYWdlcyB2b24gZGVyIHp1c3TDpG5kaWdlbiBTdGVsbGUgR2Viw7xocmVuIGVyaG9iZW4gd2VyZGVuIGvDtm5uZW4uPC9iX2dlYnVlaHJlbl9iZXNjaHJpZnR1bmc+PGJfZ2VidWVocmVuX2ludHJvPkdlYsO8aHIgYmVpIEF1c3N0ZWxsdW5nIGRlcyBrbGVpbmVuIFdhZmZlbnNjaGVpbnM6IDYwLDAwIEV1cm8uIEJlYXJiZWl0dW5nc2dlYsO8aHIgYmVpIFZlcnNhZ3VuZzogNDUsMDAgRXVyby4gClNpZSBzaW5kIGdlbcOkw58gwqcgMzkgV2FmZkcgdmVycGZsaWNodGV0LCBkZXIgenVzdMOkbmRpZ2VuIEJlaMO2cmRlIGRpZSB6dXIgRHVyY2hmw7xocnVuZyBkZXMgR2VzZXR6ZXMgZXJmb3JkZXJsaWNoZW4gQXVza8O8bmZ0ZSB6dSBlcnRlaWxlbi4gWnVyIFByw7xmdW5nIElocmVyIHdhZmZlbnJlY2h0bGljaGVuIFp1dmVybMOkc3NpZ2tlaXQgdW5kIEVpZ251bmcgaG9sdCBkaWUgQmVow7ZyZGUgZWluZSB1bmJlc2NocsOkbmt0ZSBBdXNrdW5mdCBhdXMgZGVtIEJ1bmRlc3plbnRyYWxyZWdpc3RlciwgZWluZSBBdXNrdW5mdCBhdXMgZGVtIHplbnRyYWxlbiBzdGFhdHNhbndhbHRzY2hhZnRsaWNoZW4gVmVyZmFocmVuc3JlZ2lzdGVyLCBlaW5lIFN0ZWxsdW5nbmFobWUgZGVyIMO2cnRsaWNoZW4gUG9saXplaWRpZW5zdHN0ZWxsZSB1bmQgSWhyZXIgV29obnNpdHpnZW1laW5kZSBlaW4uPC9iX2dlYnVlaHJlbl9pbnRybz48Yl9yaWNodGlna2VpdD4qIEljaCBiZXN0w6R0aWdlIGRpZSBSaWNodGlna2VpdCBtZWluZXIgQW5nYWJlbi48L2JfcmljaHRpZ2tlaXQ+PGJfZGF0ZW5zY2h1dHo+KiBJY2ggZXJrbMOkcmUgbWljaCBkYW1pdCBlaW52ZXJzdGFuZGVuLCBkYXNzIGRlciBFaW5oZWl0bGljaGVyIEFuc3ByZWNocGFydG5lciBTY2hsZXN3aWctSG9sc3RlaW4genVyIEVyZsO8bGx1bmcgc2VpbmVyIEF1ZmdhYmVuIG1laW5lIERhdGVuIHVudGVyIEVpbmhhbHR1bmcgZGVyIEJlc3RpbW11bmdlbiBkZXIgRGF0ZW5zY2h1dHotR3J1bmR2ZXJvcmRudW5nIChEUy1HVk8pIHVuZCBkZXMgTGFuZGVzZGF0ZW5zY2h1dHpnZXNldHplcyBTY2hsZXN3aWctSG9sc3RlaW4gKExEU0ctU0gpIHNwZWljaGVydCwgdmVyYXJiZWl0ZXQgIHVuZCBkaWVzZSBpbSBSYWhtZW4gZGVyIGdlc2V0emxpY2hlbiBCZXN0aW1tdW5nZW4gYW4gZGllIGbDvHIgZGllIEVudHNjaGVpZHVuZyB6dXN0w6RuZGlnZSBTdGVsbGUgd2VpdGVybGVpdGV0LiBFYmVuc28gYmluIGljaCBtaXQgZGVyIHJlY2h0c2tvbmZvcm1lbiAgRGF0ZW52ZXJhcmJlaXR1bmcgdW5kIFNwZWljaGVydW5nIGR1cmNoIGRpZSB6dXN0w6RuZGlnZSBTdGVsbGUgZWludmVyc3RhbmRlbi4gTWlyIGlzdCBiZWthbm50LCBkYXNzIGljaCBkaWUgRWlud2lsbGlndW5nIGluIGRpZSBWZXJhcmJlaXR1bmcgdW5kIMOcYmVybWl0dGx1bmcgamVkZXJ6ZWl0IGdlZ2Vuw7xiZXIgZGVtIEVpbmhlaXRsaWNoZXIgQW5zcHJlY2hwYXJ0bmVyIFNjaGxlc3dpZy1Ib2xzdGVpbiwgUmV2ZW50bG91YWxsZWUgNiwgMjQxMDUgS2llbCB3aWRlcnJ1ZmVuIGthbm4uIEVpbiBXaWRlcnJ1ZiBpc3QgYWJlciBudXIgd2lya3NhbSBmw7xyIGRpZSBadWt1bmZ0LiBWZXJhcmJlaXR1bmdlbiwgZGllIHZvciBkZW0gV2lkZXJydWYgZXJmb2xndCBzaW5kLCBzaW5kIGRhdm9uIG5pY2h0IGJldHJvZmZlbi4gw5xiZXIgZGllIFZlcmFyYmVpdHVuZyBtZWluZXIgcGVyc29uZW5iZXpvZ2VuZW4gRGF0ZW4gdW5kIGRpZSBtaXIgbmFjaCBkZW4gZGF0ZW5zY2h1dHpyZWNodGxpY2hlbiBSZWdlbHVuZ2VuIHp1c3RlaGVuZGVuIEFuc3Byw7xjaGUgdW5kIFJlY2h0ZSBoYWJlIGljaCB1bnRlciBEYXRlbnNjaHV0emVya2zDpHJ1bmcgS2VubnRuaXMgZXJsYW5ndC48L2JfZGF0ZW5zY2h1dHo+PGJfbWlzc2JyYXVjaD4qIE1pciBpc3QgYmVrYW5udCwgZGFzcyB6dXIgVmVyZm9sZ3VuZyB3aWRlcnJlY2h0bGljaGVyIE51dHp1bmcgZGllIERhdGVuIG1laW5lcyB6dXIgRGF0ZW5laW5nYWJlIGdlbnV0enRlbiBFbmRnZXLDpHRlcyBhdWZnZXplaWNobmV0IHVuZCB2ZXJ3ZW5kZXQgd2VyZGVuIGvDtm5uZW4uPC9iX21pc3NicmF1Y2g+PHBvbGljeXVybD5odHRwOi8vd3d3LmVhLXNoLmluZm8vZGF0ZW5zY2h1dHovZGF0ZW5zY2h1dHplcmtsYWVydW5nRUFfZGUuZG9jPC9wb2xpY3l1cmw+PC9lcmtsYWVydW5nZW4+PGxvZ291cmw+aHR0cDovL3d3dy5lYS1zaC5pbmZvL2xvZ29zL2tvcGZfOTA2ODg3My5kb2M8L2xvZ291cmw+PC9teUZvcm0+", - "subType": "00" - } - } + "size": 5520 } diff --git a/alfa-client/apps/alfa-e2e/src/model/binary-file.ts b/alfa-client/apps/alfa-e2e/src/model/binary-file.ts index 339d1d09768fb8704f0e1cf41d30a38e202c8ea4..9593eb229c6ec779cfe6f355b4b95da6ebfdb945 100644 --- a/alfa-client/apps/alfa-e2e/src/model/binary-file.ts +++ b/alfa-client/apps/alfa-e2e/src/model/binary-file.ts @@ -39,12 +39,12 @@ export class FileDataE2E { name: string; size: number; contentType: string; - content: BinaryBase64E2E; //TODO Entfernen -> content wird jetzt im GridFs gespeichert } -export interface GridFsFileDataE2E { +export interface CreateFileDataE2E { file: GridFsFileE2E; chunks: GridFsChunkE2E[]; + ozgcloudFile: OzgCloudFileE2E; } export interface GridFsFileE2E { @@ -74,3 +74,21 @@ export interface GridFsChunkE2E { export class BinaryBase64E2E { $binary: { base64: string }; } + +export interface InitOzgCloudFileTaskData { + collection: string; + data: OzgCloudFileE2E[]; +} + +export class OzgCloudFileE2E { + _id: ObjectIdE2E; + client: string; + contentId: string; + contentType: string; + createdBy: string; + fieldName: string; + name: string; + size: number; + version: number; + vorgangId: string; +} diff --git a/alfa-client/apps/alfa-e2e/src/support/binary-file-util.ts b/alfa-client/apps/alfa-e2e/src/support/binary-file-util.ts index 5e3fb63c240c9863ed67da88a3a161f6136bd032..fed2f548552d26cd63b4bd544829a6a695d07247 100644 --- a/alfa-client/apps/alfa-e2e/src/support/binary-file-util.ts +++ b/alfa-client/apps/alfa-e2e/src/support/binary-file-util.ts @@ -21,8 +21,8 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { FileDataE2E, GridFsFileDataE2E } from '../model/binary-file'; -import { initGridFsData } from './cypress-helper'; +import { CreateFileDataE2E, FileDataE2E } from '../model/binary-file'; +import { initFileData } from './cypress-helper'; const xmlRepresentation = require('../fixtures/representation/xml.json'); @@ -31,12 +31,15 @@ const pdfAttachment = require('../fixtures/attachment/pdf.json'); const xmlFile = require('../fixtures/grid-fs/xml/file.json'); const xmlChunk = require('../fixtures/grid-fs/xml/chunk.json'); +const xmlOzgCloudFile = require('../fixtures/ozgcloud-file/xml-file.json'); const jpgFile = require('../fixtures/grid-fs/jpg/file.json'); const jpgChunk = require('../fixtures/grid-fs/jpg/chunk.json'); +const jpgOzgCloudFile = require('../fixtures/ozgcloud-file/jpg-file.json'); const pdfFile = require('../fixtures/grid-fs/pdf/file.json'); const pdfChunk = require('../fixtures/grid-fs/pdf/chunk.json'); +const pdfOzgCloudFile = require('../fixtures/ozgcloud-file/pdf-file.json'); export function createXmlRepresentation(): FileDataE2E { return xmlRepresentation; @@ -50,18 +53,18 @@ export function createPdfAttachment(): FileDataE2E { return pdfAttachment; } -export function createXmlGridFsData(): GridFsFileDataE2E { - return { file: xmlFile, chunks: [xmlChunk] }; +export function createXmlFileData(): CreateFileDataE2E { + return { file: xmlFile, chunks: [xmlChunk], ozgcloudFile: xmlOzgCloudFile }; } -export function createJpgGridFsData(): GridFsFileDataE2E { - return { file: jpgFile, chunks: [jpgChunk] }; +export function createJpgFileData(): CreateFileDataE2E { + return { file: jpgFile, chunks: [jpgChunk], ozgcloudFile: jpgOzgCloudFile }; } -export function createPdfGridFsData(): GridFsFileDataE2E { - return { file: pdfFile, chunks: [pdfChunk] }; +export function createPdfFileData(): CreateFileDataE2E { + return { file: pdfFile, chunks: [pdfChunk], ozgcloudFile: pdfOzgCloudFile }; } -export function initGridFs(gridFsData: GridFsFileDataE2E[]): void { - initGridFsData(gridFsData); +export function initFile(createFileData: CreateFileDataE2E[]): void { + initFileData(createFileData); } diff --git a/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts b/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts index 85919497c268712ac183a2cf2af6b08b4d4c7cec..9c2bd2f7944d04ee78e668cf89f1cbe9c396689f 100644 --- a/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts +++ b/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Interception, RouteHandler, RouteMatcher } from 'cypress/types/net-stubbing'; -import { GridFsChunkE2E, GridFsFileDataE2E, GridFsFileE2E } from '../model/binary-file'; +import { CreateFileDataE2E, GridFsChunkE2E, GridFsFileE2E, OzgCloudFileE2E } from '../model/binary-file'; import { CommandE2E } from '../model/command'; import { SmockerMocks } from '../model/smocker'; import { UsermanagerUserE2E } from '../model/usermanager'; @@ -35,6 +35,7 @@ enum CypressTasks { INIT_COMMAND_DATA = 'initCommandData', INIT_GRID_FS_FILE_DATA = 'initGridFsFileData', INIT_GRID_FS_CHUNK_DATA = 'initGridFsChunkData', + INIT_OZG_CLOUD_FILE = 'initOzgCloudFileData', INIT_VORGANG_DATA = 'initVorgangData', INIT_VORGANG_ATTACHED_ITEM_DATA = 'initVorgangAttachedItemData', INIT_USERMANAGER_DATA = 'initUsermanagerData', @@ -49,6 +50,7 @@ enum MongoCollections { COMMAND = 'command', FS_CHUNKS = 'fs.chunks', FS_FILES = 'fs.files', + OZG_CLOUD_FILE = 'ozgCloudFile', VORGANG = 'vorgang', VORGANG_ATTACHED_ITEM = 'vorgangAttachedItem', USER = 'User', @@ -67,35 +69,43 @@ export function visitUrl(url: string): void { } export function initCommandData(data: CommandE2E[]): void { - cy.task(CypressTasks.DROP_COLLECTIONS, [MongoCollections.COMMAND]); + dropCollection(MongoCollections.COMMAND); cy.task(CypressTasks.INIT_COMMAND_DATA, { collection: MongoCollections.COMMAND, data }); } -export function initGridFsData(data: GridFsFileDataE2E[]): void { +export function initFileData(data: CreateFileDataE2E[]): void { const files: GridFsFileE2E[] = []; + const ozgCloudFiles: OzgCloudFileE2E[] = []; let chunks: GridFsChunkE2E[] = []; data.forEach((singleData) => { files.push(singleData.file); + ozgCloudFiles.push(singleData.ozgcloudFile); chunks = chunks.concat(singleData.chunks); }); initGridFsFileData(files); initGridFsChunkData(chunks); + initOzgCloudFileData(ozgCloudFiles); } function initGridFsFileData(data: GridFsFileE2E[]): void { - cy.task(CypressTasks.DROP_COLLECTIONS, [MongoCollections.FS_FILES]); + dropCollection(MongoCollections.FS_FILES); cy.task(CypressTasks.INIT_GRID_FS_FILE_DATA, { collection: MongoCollections.FS_FILES, data }); } function initGridFsChunkData(data: GridFsChunkE2E[]): void { - cy.task(CypressTasks.DROP_COLLECTIONS, [MongoCollections.FS_CHUNKS]); + dropCollection(MongoCollections.FS_CHUNKS); cy.task(CypressTasks.INIT_GRID_FS_CHUNK_DATA, { collection: MongoCollections.FS_CHUNKS, data }); } +function initOzgCloudFileData(data: OzgCloudFileE2E[]): void { + dropCollection(MongoCollections.OZG_CLOUD_FILE); + cy.task(CypressTasks.INIT_OZG_CLOUD_FILE, { collection: MongoCollections.OZG_CLOUD_FILE, data }); +} + export function initVorgangAttachedItemData(data: VorgangAttachedItemE2E[]): void { - cy.task(CypressTasks.DROP_COLLECTIONS, [MongoCollections.VORGANG_ATTACHED_ITEM]); + dropCollection(MongoCollections.VORGANG_ATTACHED_ITEM); cy.task(CypressTasks.INIT_VORGANG_ATTACHED_ITEM_DATA, { collection: MongoCollections.VORGANG_ATTACHED_ITEM, data, @@ -103,10 +113,14 @@ export function initVorgangAttachedItemData(data: VorgangAttachedItemE2E[]): voi } export function initVorgangData(data: VorgangE2E[]): void { - cy.task(CypressTasks.DROP_COLLECTIONS, [MongoCollections.VORGANG]); + dropCollection(MongoCollections.VORGANG); cy.task(CypressTasks.INIT_VORGANG_DATA, { collection: MongoCollections.VORGANG, data }); } +function dropCollection(collectionName: string): void { + cy.task(CypressTasks.DROP_COLLECTIONS, [collectionName]); +} + export function initSearchIndexData(vorgaenge: VorgangE2E[]): void { vorgaenge.forEach((vorgang) => cy.addVorgangToSearchIndex(vorgang)); } diff --git a/alfa-client/apps/alfa-e2e/src/support/cypress-tasks.ts b/alfa-client/apps/alfa-e2e/src/support/cypress-tasks.ts index df7ae46a29c361be0665c83fa9aa962a7ed37a35..0c4ad2fdcb4914807629b2432bbb76c43e4743f6 100644 --- a/alfa-client/apps/alfa-e2e/src/support/cypress-tasks.ts +++ b/alfa-client/apps/alfa-e2e/src/support/cypress-tasks.ts @@ -21,15 +21,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { CypressConfig } from 'apps/alfa-e2e/cypress.config'; import { readdir, remove } from 'fs-extra'; import { Db, Document, Long, MongoClient, ObjectId, WithId } from 'mongodb'; +import { InitOzgCloudFileTaskData, OzgCloudFileE2E } from '../model/binary-file'; +import { dropCollections, insert, insertWithDrop } from './mongodb-util'; const fs = require('fs'); const decompress = require('decompress'); const Binary = require('mongodb').Binary; -module.exports = (on: any, config: any) => { +module.exports = (on: any, config: CypressConfig): CypressConfig => { on('task', { initCommandData({ collection, data }) { console.log('initCommandData'); @@ -46,6 +49,11 @@ module.exports = (on: any, config: any) => { insertIntoDatabase(config, collection, parseGridFsChunkData(data)); return 0; }, + initOzgCloudFileData(taskData: InitOzgCloudFileTaskData): number { + console.log('initOzgCloudFileData'); + insertIntoDatabase(config, taskData.collection, parseOzgCloudFileData(taskData.data)); + return 0; + }, initVorgangData({ collection, data }) { console.log('initVorgangData'); insertIntoDatabase(config, collection, parseVorgangData(data)); @@ -61,7 +69,7 @@ module.exports = (on: any, config: any) => { insertIntoUserManagerDatabase(config, collection, parseUserData(data)); return 0; }, - dropCollections(collections) { + dropCollections(collections: string[]): number { console.log('dropCollections: ', collections); dropCollectionsFromDatabase(config, collections); return 0; @@ -183,6 +191,17 @@ function parseGridFsChunk(gridFsChunk) { gridFsChunk.data = createBinData(gridFsChunk.data); } +function parseOzgCloudFileData(ozgCloudFiles: OzgCloudFileE2E[]) { + ozgCloudFiles.forEach((ozgCloudFile: OzgCloudFileE2E) => parseOzgCloudFile(ozgCloudFile)); + return ozgCloudFiles; +} + +function parseOzgCloudFile(ozgCloudFile) { + ozgCloudFile._id = createObjectId(ozgCloudFile); + ozgCloudFile.size = createNumberLong(ozgCloudFile.size); + ozgCloudFile.version = createNumberLong(ozgCloudFile.version); +} + function parseVorgangData(data) { data.forEach((vorgang) => parseVorgang(vorgang)); return data; @@ -204,32 +223,12 @@ function parseVorgang(vorgang) { function parseEingang(eingang) { eingang.header.createdAt = createDate(eingang.header.createdAt); - - if (eingang.attachments) { - eingang.attachments.forEach((attachment) => parseAttachment(attachment)); - } - if (eingang.representations) { - eingang.representations.forEach((representation) => parseRepresentations(representation)); - } -} - -function parseAttachment(attachment) { - attachment.files[0].content = createBinData(''); } function createBinData(encoded64Value) { return Binary(Buffer.from(encoded64Value, 'base64'), 0); } -function parseRepresentations(representation) { - representation.content = createBinary(representation); -} - -//TODO Code entfernen und stattdessen createBinData(value) nutzen -function createBinary(field) { - return Binary(field.content.$binary.base64, 'base64'); -} - function parseWiedervorlage(wiedervorlage) { wiedervorlage.frist = createDate(wiedervorlage.frist); wiedervorlage.createdAt = createDate(wiedervorlage.createdAt); @@ -268,114 +267,42 @@ function createObjectId(field) { return new ObjectId(field._id.$oid); } -function createNumberLong(numberValue) { +function createNumberLong(numberValue: number): Long { return Long.fromNumber(numberValue); } -function insertIntoDatabase(config, collection, data) { - insert(getDatabaseUrl(config), getDatabase(config), collection, data); +function insertIntoDatabase(config: CypressConfig, collection: string, data): void { + insertWithDrop(getDatabaseUrl(config), getDatabase(config), collection, data); } -function insertIntoUserManagerDatabase(config, collection, data) { - insertWithoutDrop(getUserManagerDatabaseUrl(config), getUserManagerDatabase(config), collection, data); -} - -function insertWithoutDrop(databaseUrl, databaseName, collection, data) { - MongoClient.connect(databaseUrl, (error, connection) => { - console.log(`connect to ${databaseName} database with ${databaseUrl}`); - if (!error) { - console.log('success'); - const db: Db = connection.db(databaseName); - - db.createCollection(collection, (error) => handleCreateCollection(db, connection, collection, data, error)); - } else { - console.error('Error: ', error); - } - }); +function insertIntoUserManagerDatabase(config: CypressConfig, collection: string, data): void { + insert(getUserManagerDatabaseUrl(config), getUserManagerDatabase(config), collection, data); } -function insert(databaseUrl, databaseName, collection, data) { - MongoClient.connect(databaseUrl, (error, connection) => { - console.log(`connect to ${databaseName} database with ${databaseUrl}`); - if (!error) { - console.log('success'); - const db: Db = connection.db(databaseName); - - db.collection(collection).drop(() => { - db.createCollection(collection, (error) => handleCreateCollection(db, connection, collection, data, error)); - }); - } else { - console.error('Error: ', error); - } - }); -} - -function handleCreateCollection(db, connection, collection, data, error) { - if (error) { - console.error(`Fehler beim Erstellen der Collection "${collection}": `, error); - } else { - console.log(`Collection ${collection} erfolgreich erstellt`); - insertManyToDatabase(db, connection, collection, data); - } -} - -function insertManyToDatabase(db, connection, collection, data) { - db.collection(collection).insertMany(data, (error) => handleInsertMany(connection, error)); -} - -function handleInsertMany(connection, error) { - if (error) { - console.error('Fehler beim Einlesen der Daten: ', error); - } else { - console.log('Die Daten wurden erfolgreich eingelesen.'); - } - connection.close(); -} - -function dropCollectionsFromDatabase(config, collections) { +function dropCollectionsFromDatabase(config: CypressConfig, collections: string[]): void { dropCollections(getDatabaseUrl(config), getDatabase(config), collections); } -function getDatabaseUrl(config) { +function getDatabaseUrl(config: CypressConfig): string { return config.env.dbUrl; } -function getDatabase(config) { +function getDatabase(config: CypressConfig): string { return config.env.database; } -function dropUserManagerCollectionsFromDatabase(config, collections) { +function dropUserManagerCollectionsFromDatabase(config: CypressConfig, collections) { dropCollections(getUserManagerDatabaseUrl(config), getUserManagerDatabase(config), collections); } -function getUserManagerDatabaseUrl(config) { +function getUserManagerDatabaseUrl(config: CypressConfig): string { return config.env.userManager.dbUrl; } -function getUserManagerDatabase(config) { +function getUserManagerDatabase(config: CypressConfig): string { return config.env.userManager.database; } -function dropCollections(databaseUrl, databaseName, collections) { - MongoClient.connect(databaseUrl, (error, connection) => { - if (!error) { - const db = connection.db(databaseName); - collections.forEach((oneCollection, index) => { - console.log('drop collection', oneCollection); - db.collection(oneCollection).drop(() => { - //CHECKME Ist die Abfrage notwendig? - if (index == collections.length) { - console.log('close connection'); - connection.close(); - } - }); - }); - } else { - console.error('Error: ', error); - } - }); -} - function countFiles(folderName) { return readdir(folderName) .then((files) => files.length) diff --git a/alfa-client/apps/alfa-e2e/src/support/mongodb-util.ts b/alfa-client/apps/alfa-e2e/src/support/mongodb-util.ts new file mode 100644 index 0000000000000000000000000000000000000000..07b558512b4f32b00e9788b313553060ff729608 --- /dev/null +++ b/alfa-client/apps/alfa-e2e/src/support/mongodb-util.ts @@ -0,0 +1,56 @@ +import { Db, MongoClient } from 'mongodb'; + +export function insertWithDrop(databaseUrl: string, databaseName: string, collection: string, data): void { + connectoToDb(databaseUrl, databaseName, async (database: Db) => { + try { + console.log('drop collection and insert data'); + await database.dropCollection(collection); + await database.collection(collection).insertMany(data); + } catch (error) { + console.error('Failed to insert data: ', error); + } + }); +} + +export async function insert(databaseUrl: string, databaseName: string, collection: string, data): Promise<void> { + connectoToDb(databaseUrl, databaseName, async (database: Db) => { + try { + console.log('insert data'); + await database.collection(collection).insertMany(data); + } catch (error) { + console.error('Failed to insert data: ', error); + } + }); +} + +export function dropCollections(databaseUrl: string, databaseName: string, collections: string[]): void { + connectoToDb(databaseUrl, databaseName, async (database: Db) => { + for (let collection of collections) { + await dropCollection(database, collection); + } + }); +} + +async function dropCollection(database: Db, collection: string): Promise<void> { + try { + console.log('drop collection', collection); + await database.collection(collection).drop(); + } catch (err) { + console.warn(`Failed to drop collection ${collection}:`, err.message); + } +} + +async function connectoToDb(databaseUrl: string, databaseName: string, execution: (database: Db) => void): Promise<void> { + const client: MongoClient = new MongoClient(databaseUrl); + try { + console.log('open db connection'); + const client: MongoClient = await MongoClient.connect(databaseUrl); + const database: Db = client.db(databaseName); + await execution(database); + } catch (error) { + console.error('Error:', error); + } finally { + console.log('close db connection'); + await client.close(); + } +} diff --git a/alfa-client/pnpm-lock.yaml b/alfa-client/pnpm-lock.yaml index 9ff1eea46810db9efacb973e06d4db04bd98f748..f875d36ba7bae2db40b66c5570722a489edb5300 100644 --- a/alfa-client/pnpm-lock.yaml +++ b/alfa-client/pnpm-lock.yaml @@ -4081,8 +4081,8 @@ packages: resolution: {integrity: sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.2.1': + resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} '@vitejs/plugin-basic-ssl@1.1.0': resolution: {integrity: sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==} @@ -5198,6 +5198,10 @@ packages: resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} engines: {node: '>= 8'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + crypto-browserify@3.12.1: resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} engines: {node: '>= 0.10'} @@ -16032,7 +16036,7 @@ snapshots: '@typescript-eslint/types': 8.13.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.0': {} + '@ungap/structured-clone@1.2.1': {} '@vitejs/plugin-basic-ssl@1.1.0(vite@5.4.6(@types/node@20.17.6)(less@4.2.0)(sass@1.77.6)(stylus@0.59.0)(terser@5.31.6))': dependencies: @@ -17373,6 +17377,12 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crypto-browserify@3.12.1: dependencies: browserify-cipher: 1.0.1 @@ -18140,10 +18150,10 @@ snapshots: '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.2.1 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.5 + cross-spawn: 7.0.6 debug: 4.3.7(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0