diff --git a/bookshop/srv/user-service.cds b/bookshop/srv/user-service.cds index 47f58971..09b7676f 100644 --- a/bookshop/srv/user-service.cds +++ b/bookshop/srv/user-service.cds @@ -5,7 +5,7 @@ service UserService { /** * The current user */ - @odata.singleton entity me { + @odata.singleton entity me @cds.persistence.skip { id : String; // user id locale : String; tenant : String; diff --git a/data-viewer/srv/data-service.cds b/data-viewer/srv/data-service.cds index 0420d309..d03cfce4 100644 --- a/data-viewer/srv/data-service.cds +++ b/data-viewer/srv/data-service.cds @@ -2,12 +2,12 @@ * Exposes data + entity metadata */ @requires:'authenticated-user' -service DataService @( path:'-data' ) { +@odata service DataService @( path:'-data' ) { /** * Metadata like name and columns/elements */ - entity Entities { + entity Entities @cds.persistence.skip { key name : String; columns: Composition of many { name : String; @@ -19,7 +19,7 @@ service DataService @( path:'-data' ) { /** * The actual data, organized by column name */ - entity Data { + entity Data @cds.persistence.skip { record : array of { column : String; data : String; diff --git a/package-lock.json b/package-lock.json index 1d2018ab..96b18bcc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ } }, "bookshop": { + "name": "@capire/bookshop", "version": "1.0.0", "dependencies": { "@sap/cds": ">=5.9", @@ -32,6 +33,7 @@ } }, "bookstore": { + "name": "@capire/bookstore", "version": "1.0.0", "dependencies": { "@capire/bookshop": "*", @@ -44,18 +46,21 @@ } }, "common": { + "name": "@capire/common", "version": "1.0.0", "dependencies": { "@sap/cds": "*" } }, "data-viewer": { + "name": "@capire/data-viewer", "version": "0.1.0", "dependencies": { "@sap/cds": ">=5.0.4" } }, "fiori": { + "name": "@capire/fiori", "version": "1.0.0", "dependencies": { "@capire/bookstore": "*", @@ -83,6 +88,7 @@ } }, "hello": { + "name": "@capire/hello-world", "version": "1.0.0", "dependencies": { "@sap/cds": ">=5.0.4" @@ -94,6 +100,7 @@ } }, "media": { + "name": "@capire/media", "version": "1.0.0", "dependencies": { "lokijs": "^1.5.6" @@ -448,9 +455,9 @@ } }, "node_modules/@sap/cds": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-6.1.1.tgz", - "integrity": "sha512-oOdwHpzPnpt10bJ94E8Umq8Y9uuA+1mpEH9zjQNB/jynNqSMuvM1/68ZAsndhL1pSgw49o8W6b83cKJNUVyzfw==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-6.1.3.tgz", + "integrity": "sha512-yvL9lPonVwUx9Md1eylAtpY0JrlSMyoxZXnCA2q9lNoVNudmjPMynO5CJBfAYEaThZSqd2yMJg/+xyKy/mn3wg==", "dependencies": { "@sap/cds-compiler": "^3.0.0", "@sap/cds-foss": "^4" @@ -4038,9 +4045,9 @@ } }, "node_modules/sqlite3": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", - "integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.1.tgz", + "integrity": "sha512-mMinkrQr/LKJqFiFF+AF7imPSzRCCpTCreusZO3D/ssJHVjZOrbu2Caz+zPH5KTmGGXBxXMGSRDssL+44CLxvg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -4440,6 +4447,7 @@ } }, "orders": { + "name": "@capire/orders", "version": "1.0.0", "dependencies": { "@capire/common": "*", @@ -4447,6 +4455,7 @@ } }, "reviews": { + "name": "@capire/reviews", "version": "1.0.0", "dependencies": { "@sap/cds": ">=5", @@ -4780,9 +4789,9 @@ } }, "@sap/cds": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-6.1.1.tgz", - "integrity": "sha512-oOdwHpzPnpt10bJ94E8Umq8Y9uuA+1mpEH9zjQNB/jynNqSMuvM1/68ZAsndhL1pSgw49o8W6b83cKJNUVyzfw==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-6.1.3.tgz", + "integrity": "sha512-yvL9lPonVwUx9Md1eylAtpY0JrlSMyoxZXnCA2q9lNoVNudmjPMynO5CJBfAYEaThZSqd2yMJg/+xyKy/mn3wg==", "requires": { "@sap/cds-compiler": "^3.0.0", "@sap/cds-foss": "^4" @@ -7615,9 +7624,9 @@ } }, "sqlite3": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", - "integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.1.tgz", + "integrity": "sha512-mMinkrQr/LKJqFiFF+AF7imPSzRCCpTCreusZO3D/ssJHVjZOrbu2Caz+zPH5KTmGGXBxXMGSRDssL+44CLxvg==", "dev": true, "requires": { "@mapbox/node-pre-gyp": "^1.0.0", diff --git a/test/cds.ql.test.js b/test/cds.ql.test.js index c9f3f6dc..e3c76e42 100644 --- a/test/cds.ql.test.js +++ b/test/cds.ql.test.js @@ -411,18 +411,67 @@ describe('cds.ql → cqn', () => { ] }}) - expect ( - SELECT.from(Foo).where({x:1,or:{y:2}}) - ).to.eql ( - CQL`SELECT from Foo where x=1 or y=2` - ).to.eql ({ SELECT: { - from: {ref:['Foo']}, - where: [ - {ref:['x']}, '=', {val:1}, - 'or', - {ref:['y']}, '=', {val:2} - ] - }}) + const ql_with_groups_fix = !!cds.ql.Query.prototype.flat + if (ql_with_groups_fix) { + + expect ( + SELECT.from(Foo).where({x:1}).or({y:2}).and({z:3}) + ).to.eql ({ SELECT: { + from: {ref:['Foo']}, + where: [ + {ref:['x']}, '=', {val:1}, + 'or', + {ref:['y']}, '=', {val:2}, + 'and', + {ref:['z']}, '=', {val:3}, + ] + }}) + + expect ( + SELECT.from(Foo).where({x:1,or:{y:2}}).and({z:3}) + ).to.eql ({ SELECT: { + from: {ref:['Foo']}, + where: [ + {xpr:[ + {ref:['x']}, '=', {val:1}, + 'or', + {ref:['y']}, '=', {val:2}, + ]}, + 'and', + {ref:['z']}, '=', {val:3}, + ] + }}) + + expect ( + SELECT.from(Foo).where({a:1}).or({x:1,or:{y:2}}).and({z:3}) + ).to.eql ({ SELECT: { + from: {ref:['Foo']}, + where: [ + {ref:['a']}, '=', {val:1}, + 'or', + {xpr:[ + {ref:['x']}, '=', {val:1}, + 'or', + {ref:['y']}, '=', {val:2}, + ]}, + 'and', + {ref:['z']}, '=', {val:3}, + ] + }}) + + expect ( + { SELECT: SELECT.from(Foo).where({x:1,or:{y:2}}).SELECT } + ).to.eql ({ SELECT: { + from: {ref:['Foo']}, + where: [ + {ref:['x']}, '=', {val:1}, + 'or', + {ref:['y']}, '=', {val:2}, + ] + }}) + + } + expect ( SELECT.from(Foo).where({x:1,and:{y:2}}).or({z:3}) diff --git a/test/localized-data/services.test.js b/test/localized-data/services.test.js index 4781148e..a440e60e 100644 --- a/test/localized-data/services.test.js +++ b/test/localized-data/services.test.js @@ -5,21 +5,10 @@ describe('cap/samples - Localized Data', () => { else cds.User = cds.User.Privileged // hard core monkey patch for older cds releases it('serves localized $metadata documents', async () => { - const { data } = await GET`/browse/$metadata?sap-language=de` + const { data } = await GET(`/browse/$metadata?sap-language=de`, { headers: { 'accept-language': 'de' }}) expect(data).to.contain('') }) - it('supports sap-language param', async () => { - const { data } = await GET(`/browse/Books?$select=title,author` + '&sap-language=de') - expect(data.value).to.containSubset([ - { title: 'Sturmhöhe', author: 'Emily Brontë' }, - { title: 'Jane Eyre', author: 'Charlotte Brontë' }, - { title: 'The Raven', author: 'Edgar Allen Poe' }, - { title: 'Eleonora', author: 'Edgar Allen Poe' }, - { title: 'Catweazle', author: 'Richard Carpenter' }, - ]) - }) - it('supports accept-language header', async () => { const { data } = await GET(`/browse/Books?$select=title,author`, { headers: { 'Accept-Language': 'de' },