diff --git a/test/notes.test.js b/test/notes.test.js deleted file mode 100644 index e522fd73..00000000 --- a/test/notes.test.js +++ /dev/null @@ -1,275 +0,0 @@ -const cds = require("@sap/cds/lib"); -const express = require("express"); -if (cds.User.default) cds.User.default = cds.User.Privileged; -// hard core monkey patch -else cds.User = cds.User.Privileged; // hard core monkey patch for older cds releases - -// TODO: remove hack -process.env.S4_APIKEY = "-"; - -const envelope = (entity, value) => { - const result = {"@odata.context": entity.match(/\$metadata/) ? entity : `$metadata#${entity}`}; - - if (Array.isArray(value)) { - result.value = value; - } else { - Object.assign(result, value); - } - return result; -} - -const BPs = [ - { - BusinessPartner: "11", - BusinessPartnerFullName: "Alice Wonder", - BusinessPartnerType: "CUSTOMER", - }, - { - BusinessPartner: "9980000082", - BusinessPartnerFullName: "Hugo Hollandaise", - BusinessPartnerType: "CUSTOMER", - }, -]; - -const Suppliers = [ - { - ID: "11", - fullName: "Alice Wonder", - customerType: "CUSTOMER", - }, - { - ID: "9980000082", - fullName: "Hugo Hollandaise", - customerType: "CUSTOMER", - }, - ]; - -const SuppliersExpandNotes = [ - { - ID: "11", - fullName: "Alice Wonder", - customerType: "CUSTOMER", - notes: [ - { - ID: "545A3CF9-84CF-46C8-93DC-E29F0F2BC6BE", - note: "note2 for 11", - supplier_ID: "11", - }, - { - ID: "D632D4EE-E772-454A-913E-26A7B8DAA7FB", - note: "note1 for 11", - supplier_ID: "11", - }, - ], - }, - { - ID: "9980000082", - fullName: "Hugo Hollandaise", - customerType: "CUSTOMER", - notes: [ - { - ID: "24B58115-E394-423B-BEAB-53419A32B927", - note: "note3", - supplier_ID: "9980000082", - }, - ], - }, - ]; - -const NotesExpandSuppliers = [ - { - "ID": "24B58115-E394-423B-BEAB-53419A32B927", - "note": "note3", - "supplier_ID": "9980000082", - "supplier": { - "ID": "9980000082", - "fullName": "Hugo Hollandaise", - "customerType": "CUSTOMER" - } - }, - { - "ID": "545A3CF9-84CF-46C8-93DC-E29F0F2BC6BE", - "note": "note2 for 11", - "supplier_ID": "11", - "supplier": { - "ID": "11", - "fullName": "Alice Wonder", - "customerType": "CUSTOMER" - } - }, - { - "ID": "D632D4EE-E772-454A-913E-26A7B8DAA7FB", - "note": "note1 for 11", - "supplier_ID": "11", - "supplier": { - "ID": "11", - "fullName": "Alice Wonder", - "customerType": "CUSTOMER" - } - } - ]; - -const BPMock = { - url: /.*/, - data: BPs -}; - -const BP11Mock = { - url: /\/A_BusinessPartner\?.*\$filter=BusinessPartner%20eq%20%2711%27/, - data: [ BPs[0] ] -}; - -class MockServer { - async start() { - const http = require('http'); - - this.app = express(); - this.server = http.createServer(this.app).listen(); - this.app.set('port', this.server.address().port); - this.mocks = []; - - this.app.get("*", (req, res) => { - const mock = this.mocks.shift(); - if (!mock || !req.url.match(mock.url)) { - res.writeHead(404); - res.end(); - return; - } - - res.writeHead(200); - res.end(JSON.stringify(mock.data)); - }); - } - - reset() { - this.mocks = []; - } - - add(mock) { - this.mocks.push(mock); - } - - url() { - return `http://localhost:${this.server.address().port}`; - } - - close() { - this.server.close(); - } -} - -if (!global.beforeAll) global.beforeAll = global.before; - -describe("Notes", () => { - const mockServer = new MockServer(); - - beforeAll( async () => { - mockServer.start(); - - // TODO: Need better solution. Does it conflict with other tests? - cds.env.add({ - requires: { - API_BUSINESS_PARTNER: { - kind: "odata", - model: "srv/external/API_BUSINESS_PARTNER", - credentials: { - url: mockServer.url() - }, - }, - }, - }); - - }); - - beforeEach( () => { - mockServer.reset(); - }); - - const { expect, GET, PATCH } = require(".").run( - "serve", - "--project", - "notes", - "--with-mocks", - "--in-memory" - ); - - - it("get notes", async () => { - const { status, data } = await GET("/notes/Notes"); - - expect({ status, data }).to.containSubset({ - status: 200, - data: { - "@odata.context": "$metadata#Notes", - value: [ - { - ID: "24B58115-E394-423B-BEAB-53419A32B927", - note: "note3", - supplier_ID: "9980000082", - }, - { - ID: "545A3CF9-84CF-46C8-93DC-E29F0F2BC6BE", - note: "note2 for 11", - supplier_ID: "11", - }, - { - ID: "D632D4EE-E772-454A-913E-26A7B8DAA7FB", - note: "note1 for 11", - supplier_ID: "11", - }, - ], - }, - }); - }); - - it("get remote suppliers", async () => { - mockServer.add(BPMock); - const { status, data } = await GET("/notes/Suppliers"); - - expect({ status, data }).to.containSubset({ - status: 200, - data: envelope("Suppliers", Suppliers) - }); - }); - - it("get remote suppliers with notes", async () => { - mockServer.add(BPMock); - const { status, data } = await GET("/notes/Suppliers?$expand=notes"); - - expect({ status, data }).to.containSubset({ - status: 200, - data: envelope('Suppliers(notes())', SuppliersExpandNotes), - }); - }); - - it("get notes via navigation", async () => { - mockServer.add(BPMock); - const { status, data } = await GET("/notes/Suppliers('11')/notes"); - - expect({ status, data }).to.containSubset({ - status: 200, - data: envelope('../$metadata#Notes', SuppliersExpandNotes[0].notes) - }); - }); - - it("get notes with suppliers", async () => { - mockServer.add(BPMock); - const { status, data } = await GET("/notes/Notes?$expand=supplier"); - - expect({ status, data }).to.containSubset({ - status: 200, - data: envelope('Notes(supplier())', NotesExpandSuppliers) - }); - }); - - it("get supplier via navigation", async () => { - mockServer.add(BP11Mock); - const { status, data } = await GET(`/notes/Notes(${ NotesExpandSuppliers[1].ID })/supplier`); - expect({ status, data }).to.containSubset({ - status: 200, - data: envelope("../$metadata#Suppliers/$entity", NotesExpandSuppliers[1].supplier ) - }); - }); - - afterAll(() => mockServer.close()); -});