Merge branch 'main' into fiori-ext

This commit is contained in:
Christian Georgi
2022-09-23 10:25:25 +02:00
committed by GitHub
5 changed files with 87 additions and 40 deletions

View File

@@ -5,7 +5,7 @@ service UserService {
/** /**
* The current user * The current user
*/ */
@odata.singleton entity me { @odata.singleton entity me @cds.persistence.skip {
id : String; // user id id : String; // user id
locale : String; locale : String;
tenant : String; tenant : String;

View File

@@ -2,12 +2,12 @@
* Exposes data + entity metadata * Exposes data + entity metadata
*/ */
@requires:'authenticated-user' @requires:'authenticated-user'
service DataService @( path:'-data' ) { @odata service DataService @( path:'-data' ) {
/** /**
* Metadata like name and columns/elements * Metadata like name and columns/elements
*/ */
entity Entities { entity Entities @cds.persistence.skip {
key name : String; key name : String;
columns: Composition of many { columns: Composition of many {
name : String; name : String;
@@ -19,7 +19,7 @@ service DataService @( path:'-data' ) {
/** /**
* The actual data, organized by column name * The actual data, organized by column name
*/ */
entity Data { entity Data @cds.persistence.skip {
record : array of { record : array of {
column : String; column : String;
data : String; data : String;

33
package-lock.json generated
View File

@@ -24,6 +24,7 @@
} }
}, },
"bookshop": { "bookshop": {
"name": "@capire/bookshop",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"@sap/cds": ">=5.9", "@sap/cds": ">=5.9",
@@ -32,6 +33,7 @@
} }
}, },
"bookstore": { "bookstore": {
"name": "@capire/bookstore",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"@capire/bookshop": "*", "@capire/bookshop": "*",
@@ -44,18 +46,21 @@
} }
}, },
"common": { "common": {
"name": "@capire/common",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"@sap/cds": "*" "@sap/cds": "*"
} }
}, },
"data-viewer": { "data-viewer": {
"name": "@capire/data-viewer",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"@sap/cds": ">=5.0.4" "@sap/cds": ">=5.0.4"
} }
}, },
"fiori": { "fiori": {
"name": "@capire/fiori",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"@capire/bookstore": "*", "@capire/bookstore": "*",
@@ -83,6 +88,7 @@
} }
}, },
"hello": { "hello": {
"name": "@capire/hello-world",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"@sap/cds": ">=5.0.4" "@sap/cds": ">=5.0.4"
@@ -94,6 +100,7 @@
} }
}, },
"media": { "media": {
"name": "@capire/media",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"lokijs": "^1.5.6" "lokijs": "^1.5.6"
@@ -448,9 +455,9 @@
} }
}, },
"node_modules/@sap/cds": { "node_modules/@sap/cds": {
"version": "6.1.1", "version": "6.1.3",
"resolved": "https://registry.npmjs.org/@sap/cds/-/cds-6.1.1.tgz", "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-6.1.3.tgz",
"integrity": "sha512-oOdwHpzPnpt10bJ94E8Umq8Y9uuA+1mpEH9zjQNB/jynNqSMuvM1/68ZAsndhL1pSgw49o8W6b83cKJNUVyzfw==", "integrity": "sha512-yvL9lPonVwUx9Md1eylAtpY0JrlSMyoxZXnCA2q9lNoVNudmjPMynO5CJBfAYEaThZSqd2yMJg/+xyKy/mn3wg==",
"dependencies": { "dependencies": {
"@sap/cds-compiler": "^3.0.0", "@sap/cds-compiler": "^3.0.0",
"@sap/cds-foss": "^4" "@sap/cds-foss": "^4"
@@ -4038,9 +4045,9 @@
} }
}, },
"node_modules/sqlite3": { "node_modules/sqlite3": {
"version": "5.0.11", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.1.tgz",
"integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", "integrity": "sha512-mMinkrQr/LKJqFiFF+AF7imPSzRCCpTCreusZO3D/ssJHVjZOrbu2Caz+zPH5KTmGGXBxXMGSRDssL+44CLxvg==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
@@ -4440,6 +4447,7 @@
} }
}, },
"orders": { "orders": {
"name": "@capire/orders",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"@capire/common": "*", "@capire/common": "*",
@@ -4447,6 +4455,7 @@
} }
}, },
"reviews": { "reviews": {
"name": "@capire/reviews",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"@sap/cds": ">=5", "@sap/cds": ">=5",
@@ -4780,9 +4789,9 @@
} }
}, },
"@sap/cds": { "@sap/cds": {
"version": "6.1.1", "version": "6.1.3",
"resolved": "https://registry.npmjs.org/@sap/cds/-/cds-6.1.1.tgz", "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-6.1.3.tgz",
"integrity": "sha512-oOdwHpzPnpt10bJ94E8Umq8Y9uuA+1mpEH9zjQNB/jynNqSMuvM1/68ZAsndhL1pSgw49o8W6b83cKJNUVyzfw==", "integrity": "sha512-yvL9lPonVwUx9Md1eylAtpY0JrlSMyoxZXnCA2q9lNoVNudmjPMynO5CJBfAYEaThZSqd2yMJg/+xyKy/mn3wg==",
"requires": { "requires": {
"@sap/cds-compiler": "^3.0.0", "@sap/cds-compiler": "^3.0.0",
"@sap/cds-foss": "^4" "@sap/cds-foss": "^4"
@@ -7615,9 +7624,9 @@
} }
}, },
"sqlite3": { "sqlite3": {
"version": "5.0.11", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.1.tgz",
"integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", "integrity": "sha512-mMinkrQr/LKJqFiFF+AF7imPSzRCCpTCreusZO3D/ssJHVjZOrbu2Caz+zPH5KTmGGXBxXMGSRDssL+44CLxvg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@mapbox/node-pre-gyp": "^1.0.0", "@mapbox/node-pre-gyp": "^1.0.0",

View File

@@ -411,19 +411,68 @@ describe('cds.ql → cqn', () => {
] ]
}}) }})
const ql_with_groups_fix = !!cds.ql.Query.prototype.flat
if (ql_with_groups_fix) {
expect ( expect (
SELECT.from(Foo).where({x:1,or:{y:2}}) SELECT.from(Foo).where({x:1}).or({y:2}).and({z:3})
).to.eql (
CQL`SELECT from Foo where x=1 or y=2`
).to.eql ({ SELECT: { ).to.eql ({ SELECT: {
from: {ref:['Foo']}, from: {ref:['Foo']},
where: [ where: [
{ref:['x']}, '=', {val:1}, {ref:['x']}, '=', {val:1},
'or', 'or',
{ref:['y']}, '=', {val:2} {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 ( expect (
SELECT.from(Foo).where({x:1,and:{y:2}}).or({z:3}) SELECT.from(Foo).where({x:1,and:{y:2}}).or({z:3})
).to.eql ( ).to.eql (

View File

@@ -5,21 +5,10 @@ describe('cap/samples - Localized Data', () => {
else cds.User = cds.User.Privileged // hard core monkey patch for older cds releases else cds.User = cds.User.Privileged // hard core monkey patch for older cds releases
it('serves localized $metadata documents', async () => { 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('<Annotation Term="Common.Label" String="Währung"/>') expect(data).to.contain('<Annotation Term="Common.Label" String="Währung"/>')
}) })
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 () => { it('supports accept-language header', async () => {
const { data } = await GET(`/browse/Books?$select=title,author`, { const { data } = await GET(`/browse/Books?$select=title,author`, {
headers: { 'Accept-Language': 'de' }, headers: { 'Accept-Language': 'de' },