Compare commits
40 Commits
CAA265-nod
...
openSAP-we
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7b31657f69 | ||
|
|
2f52cbd918 | ||
|
|
71742e1e35 | ||
|
|
25e3d5261c | ||
|
|
edc2fdae91 | ||
|
|
13480ad99e | ||
|
|
8071faa62d | ||
|
|
9ea294586a | ||
|
|
a56a11ff3e | ||
|
|
b4084b45cb | ||
|
|
26e3c0d753 | ||
|
|
6d0194acc0 | ||
|
|
db75a99808 | ||
|
|
a04755efed | ||
|
|
6a9a1bc4d6 | ||
|
|
a0847e603f | ||
|
|
b1270bc0eb | ||
|
|
ba72d7f478 | ||
|
|
cd808c76dd | ||
|
|
3a77707f49 | ||
|
|
583c97a494 | ||
|
|
eb7431afed | ||
|
|
630bb2b19c | ||
|
|
f9a7aa59de | ||
|
|
c0bce5ae5b | ||
|
|
ad05e2b9db | ||
|
|
b7c2eee961 | ||
|
|
9205e0893a | ||
|
|
7137bf227e | ||
|
|
c2d0fba1d8 | ||
|
|
345d7fa37b | ||
|
|
88c1aa0282 | ||
|
|
c4cd02dbe9 | ||
|
|
b9269ad437 | ||
|
|
2783197f1c | ||
|
|
3238b8b045 | ||
|
|
dcac8fe7d2 | ||
|
|
cc3aca29ef | ||
|
|
baaa5ef7d7 | ||
|
|
e657683322 |
@@ -6,7 +6,7 @@
|
|||||||
"jest": true
|
"jest": true
|
||||||
},
|
},
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"ecmaVersion": 2017
|
"ecmaVersion": 2018
|
||||||
},
|
},
|
||||||
"globals": {
|
"globals": {
|
||||||
"SELECT": true,
|
"SELECT": true,
|
||||||
|
|||||||
37
.vscode/launch.json
vendored
Normal file
37
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "bookshop", "request": "launch", "type": "node", "runtimeExecutable": "npx", "runtimeArgs": [ "-n" ],
|
||||||
|
"args": [ "--", "cds", "run", "--in-memory" ],
|
||||||
|
"cwd": "${workspaceFolder}/packages/bookshop",
|
||||||
|
"console": "integratedTerminal",
|
||||||
|
"skipFiles": ["<node_internals>/**"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cds run ...", "request": "launch", "type": "node", "runtimeExecutable": "npx", "runtimeArgs": [ "-n" ],
|
||||||
|
"args": [ "--", "cds", "run", "--with-mocks", "--in-memory?" ],
|
||||||
|
"cwd": "${workspaceFolder}/packages/${input:service}",
|
||||||
|
"console": "integratedTerminal",
|
||||||
|
"skipFiles": ["<node_internals>/**"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"type": "pickString",
|
||||||
|
"id": "service",
|
||||||
|
"description": "Which service do you want to start?",
|
||||||
|
"options": [
|
||||||
|
"bookshop",
|
||||||
|
"bookstore",
|
||||||
|
"media-server",
|
||||||
|
"office-supplies",
|
||||||
|
"reviews-service"
|
||||||
|
],
|
||||||
|
"default": "bookshop"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
6
.vscode/settings.json
vendored
Normal file
6
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"files.exclude": {
|
||||||
|
"**/.gitignore": true,
|
||||||
|
"**/.vscode": true
|
||||||
|
}
|
||||||
|
}
|
||||||
17
.vscode/tasks.json
vendored
Normal file
17
.vscode/tasks.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||||
|
// for the documentation about the tasks.json format
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"type": "npm", "script": "watch", "path": "packages/bookshop/",
|
||||||
|
"options": { "env": { "PORT": "4004" }},
|
||||||
|
"presentation": { "group": "A" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "npm", "script": "watch", "path": "packages/reviews-service/",
|
||||||
|
"options": { "env": { "PORT": "5005" }},
|
||||||
|
"presentation": { "group": "A" }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
43
README.md
43
README.md
@@ -1,3 +1,42 @@
|
|||||||
# Initial branch for CAA265 - Rapid Service Development with SAP Cloud Application Programming Model
|
# Welcome to SAP Cloud Application Programming model samples
|
||||||
|
|
||||||
**DO NOT MERGE IN MASTER**
|
Find here the samples for the openSAP course [Building Applications with the SAP Cloud Application Programming Model](https://open.sap.com/courses/cp7).
|
||||||
|
|
||||||
|
## Get Access to SAP Business Application Studio
|
||||||
|
The recommended environment for the course is SAP Business Application Studio. Watch [unit 2 of week 1](https://open.sap.com/courses/cp7/items/51pzQUzbXHr2kdbOmVs6jI) for how to get access.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
In SAP Business Application Studio, open a terminal.
|
||||||
|
Then clone the repo with this specific branch:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git clone https://github.com/sap-samples/cloud-cap-samples projects/cloud-cap-samples -b openSAP-week3-unit6
|
||||||
|
cd projects/cloud-cap-samples
|
||||||
|
```
|
||||||
|
|
||||||
|
In the `cloud-cap-samples` folder run:
|
||||||
|
```sh
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
## Run
|
||||||
|
|
||||||
|
Now you're ready to run the samples, for example:
|
||||||
|
```sh
|
||||||
|
cd packages/bookshop
|
||||||
|
cds watch
|
||||||
|
```
|
||||||
|
|
||||||
|
After that, watch out for the little popup in the lower right corner of SAP Business Application Studio that asks you to open the application in your browser.
|
||||||
|
|
||||||
|
|
||||||
|
## Get Support
|
||||||
|
|
||||||
|
Check out the cap docs at https://cap.cloud.sap. <br>
|
||||||
|
In case you find a bug or need support, please [open an issue in here](https://github.com/SAP-samples/cloud-cap-samples/issues/new).
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under SAP Sample Code License Agreement, except as noted otherwise in the [LICENSE](/LICENSE) file.
|
||||||
|
|||||||
@@ -1,7 +1 @@
|
|||||||
{
|
{"packages":["packages/*"],"version":"1.0.0"}
|
||||||
"packages": [
|
|
||||||
"packages/*",
|
|
||||||
"shared/*"
|
|
||||||
],
|
|
||||||
"version": "0.0.0"
|
|
||||||
}
|
|
||||||
|
|||||||
2064
package-lock.json
generated
Normal file
2064
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
25
package.json
25
package.json
@@ -1,16 +1,25 @@
|
|||||||
{
|
{
|
||||||
"name": "@sap/capire-samples",
|
"name": "@sap/capire-samples",
|
||||||
"description": "The umbrella project for all samples to easily setup for local development and tests.",
|
"description": "The umbrella project for all samples to easily setup for local development and tests.",
|
||||||
"repository": "https://github.wdf.sap.corp/capire/samples.git",
|
"repository": "https://github.com/SAP-samples/cloud-cap-samples.git",
|
||||||
"author": "daniel.hutzel@sap.com",
|
"author": "daniel.hutzel@sap.com",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"install": "(npx --no-install lerna -v || npm i lerna --no-save) && lerna bootstrap --hoist --ignore tests-env --loglevel warn",
|
"lerna": "npx --no-install lerna -v > /dev/null || npm i lerna --no-save",
|
||||||
"reset": "lerna clean -y && rm -fr node_modules",
|
"install": "(npm -s run lerna) && lerna bootstrap --hoist",
|
||||||
"test": "jest",
|
"cleanup": "lerna clean -y && rm -fr node_modules",
|
||||||
"bookstore": "cds run packages/bookstore --in-memory",
|
"bookshop": "cds watch packages/bookshop"
|
||||||
"products-service": "cds run packages/products-service --in-memory",
|
|
||||||
"reviews-service": "cds run packages/reviews-service --in-memory"
|
|
||||||
},
|
},
|
||||||
"license": "ISC"
|
"dependencies": {
|
||||||
|
"@sap/cds": "^3",
|
||||||
|
"express": "^4"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"sqlite3": "*"
|
||||||
|
},
|
||||||
|
"--add-these-to-devDependencies-for-tests": {
|
||||||
|
"@types/jest": "*",
|
||||||
|
"jest": "*"
|
||||||
|
},
|
||||||
|
"license": "SAP SAMPLE CODE LICENSE"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"cds_version": "^3.17.4"
|
|
||||||
}
|
|
||||||
23
packages/bookshop/db/schema.cds
Normal file
23
packages/bookshop/db/schema.cds
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
namespace sap.capire.bookshop;
|
||||||
|
|
||||||
|
@cds.persistence.exists
|
||||||
|
entity Books {
|
||||||
|
key ID: Integer;
|
||||||
|
title : String(111);
|
||||||
|
descr : String(1111);
|
||||||
|
author : String(50);
|
||||||
|
rating : Integer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@cds.persistence.exists
|
||||||
|
entity BooksDescr {
|
||||||
|
key id : Integer;
|
||||||
|
book_descr : String(2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
@cds.persistence.exists
|
||||||
|
entity BooksInfo (REQ_RATING : Integer) {
|
||||||
|
key id : Integer;
|
||||||
|
rating : Integer;
|
||||||
|
book_author_info : String;
|
||||||
|
}
|
||||||
10
packages/bookshop/db/src/.hdiconfig
Normal file
10
packages/bookshop/db/src/.hdiconfig
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"file_suffixes": {
|
||||||
|
"hdbtable": { "plugin_name": "com.sap.hana.di.table", "plugin_version": "11.1.0" },
|
||||||
|
"hdbview": { "plugin_name": "com.sap.hana.di.view" },
|
||||||
|
"hdbfunction": { "plugin_name": "com.sap.hana.di.function" },
|
||||||
|
"hdbtabletype": { "plugin_name": "com.sap.hana.di.tabletype", "plugin_version": "11.1.0" },
|
||||||
|
"hdbtabledata": { "plugin_name": "com.sap.hana.di.tabledata", "plugin_version": "11.1.0" },
|
||||||
|
"csv": { "plugin_name" : "com.sap.hana.di.tabledata.source" }
|
||||||
|
}
|
||||||
|
}
|
||||||
4
packages/bookshop/db/src/.hdinamespace
Normal file
4
packages/bookshop/db/src/.hdinamespace
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"subfolder": "ignore"
|
||||||
|
}
|
||||||
4
packages/bookshop/db/src/data/Books.csv
Normal file
4
packages/bookshop/db/src/data/Books.csv
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
ID;TITLE;DESCR;AUTHOR;RATING
|
||||||
|
301;Anna Karenina;"Anna Karenina (Russian: «Анна Каренина», IPA: [ˈanːə kɐˈrʲenʲɪnə])[1] is a novel by the Russian author Leo Tolstoy, first published in book form in 1878. Many writers consider Anna Karenina the greatest work of literature ever,[2] and Tolstoy himself called it his first true novel. It was initially released in serial installments from 1873 to 1877 in the periodical The Russian Messenger.";Leo Tolstoy;4
|
||||||
|
307;The Great Gatsby;"The Great Gatsby is a 1925 novel written by American author F. Scott Fitzgerald that follows a cast of characters living in the fictional towns of West Egg and East Egg on prosperous Long Island in the summer of 1922. The story primarily concerns the young and mysterious millionaire Jay Gatsby and his quixotic passion and obsession with the beautiful former debutante Daisy Buchanan. Considered to be Fitzgerald's magnum opus, The Great Gatsby explores themes of decadence, idealism, resistance to change, social upheaval and excess, creating a portrait of the Roaring Twenties that has been described as a cautionary[a] tale regarding the American Dream.";F. Scott Fitzgerald;4
|
||||||
|
406;Harry Potter;"Harry Potter is a series of fantasy novels written by British author J. K. Rowling. The novels chronicle the lives of a young wizard, Harry Potter, and his friends Hermione Granger and Ron Weasley, all of whom are students at Hogwarts School of Witchcraft and Wizardry. The main story arc concerns Harry's struggle against Lord Voldemort, a dark wizard who intends to become immortal, overthrow the wizard governing body known as the Ministry of Magic and subjugate all wizards and Muggles (non-magical people).";J. K. Rowling;5
|
||||||
|
@@ -0,0 +1,8 @@
|
|||||||
|
COLUMN TABLE SAP_CAPIRE_BOOKSHOP_BOOKS (
|
||||||
|
ID INTEGER NOT NULL,
|
||||||
|
TITLE NVARCHAR(111),
|
||||||
|
DESCR NVARCHAR(1111),
|
||||||
|
AUTHOR NVARCHAR(50),
|
||||||
|
RATING INTEGER,
|
||||||
|
PRIMARY KEY(ID)
|
||||||
|
)
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"format_version": 1,
|
||||||
|
"imports": [
|
||||||
|
{
|
||||||
|
"target_table": "SAP_CAPIRE_BOOKSHOP_BOOKS",
|
||||||
|
"source_data": {
|
||||||
|
"data_type": "CSV",
|
||||||
|
"file_name": "Books.csv",
|
||||||
|
"has_header": true,
|
||||||
|
"no_data_import": false,
|
||||||
|
"delete_existing_foreign_data": false,
|
||||||
|
"dialect": "HANA",
|
||||||
|
"type_config": {
|
||||||
|
"delimiter": ";"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
FUNCTION SAP_CAPIRE_BOOKSHOP_BOOKSDESCR
|
||||||
|
RETURNS TABLE (ID integer, BOOK_DESCR nvarchar(2000))
|
||||||
|
LANGUAGE SQLSCRIPT
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
RETURN SELECT
|
||||||
|
100 + ID AS ID,
|
||||||
|
'From my HANA function: A summary for the book ' || TITLE || ': ' || DESCR AS BOOK_DESCR
|
||||||
|
FROM SAP_CAPIRE_BOOKSHOP_BOOKS;
|
||||||
|
END
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
VIEW SAP_CAPIRE_BOOKSHOP_BOOKSINFO (in REQ_RATING integer) AS SELECT
|
||||||
|
ID,
|
||||||
|
RATING,
|
||||||
|
'From my HANA view: The book ' || TITLE || ' is authored by ' || AUTHOR AS BOOK_AUTHOR_INFO
|
||||||
|
FROM SAP_CAPIRE_BOOKSHOP_BOOKS
|
||||||
|
WHERE RATING = :REQ_RATING;
|
||||||
25
packages/bookshop/package.json
Normal file
25
packages/bookshop/package.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "@sap/capire-bookshop",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "A simple bookshop application, build in a self-contained all-in-one fashion, i.e. w/o reusing other packages.",
|
||||||
|
"license": "SAP SAMPLE CODE LICENSE",
|
||||||
|
"dependencies": {
|
||||||
|
"@sap/cds": "^3",
|
||||||
|
"express": "^4",
|
||||||
|
"hdb": "^0.17.1"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "cds run --in-memory?",
|
||||||
|
"watch": "cds watch"
|
||||||
|
},
|
||||||
|
"cds": {
|
||||||
|
"requires": {
|
||||||
|
"db": {
|
||||||
|
"kind": "sql"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@sap/hdi-deploy": "3.7.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
packages/bookshop/srv/cat-service.cds
Normal file
9
packages/bookshop/srv/cat-service.cds
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
using { sap.capire.bookshop as db } from '../db/schema';
|
||||||
|
|
||||||
|
service CatalogService {
|
||||||
|
entity Books as projection on db.Books;
|
||||||
|
|
||||||
|
entity BooksInfo (RATING : Integer) as select from db.BooksInfo(REQ_RATING: :RATING) {*};
|
||||||
|
|
||||||
|
entity BooksDescr as select from db.BooksDescr;
|
||||||
|
}
|
||||||
8
packages/bookshop/tests/CatalogService.http
Normal file
8
packages/bookshop/tests/CatalogService.http
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Get all books
|
||||||
|
GET http://localhost:4004/catalog/Books
|
||||||
|
|
||||||
|
# Get books description from the HANA function
|
||||||
|
GET http://localhost:4004/catalog/BooksDescr
|
||||||
|
|
||||||
|
# Get books with rating 4 via the HANA view
|
||||||
|
GET http://localhost:4004/catalog/BooksInfo(RATING=4)/Set
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"build": {
|
|
||||||
"target": ".",
|
|
||||||
"tasks": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
15
packages/bookstore/.gitignore
vendored
15
packages/bookstore/.gitignore
vendored
@@ -1,15 +0,0 @@
|
|||||||
.che/
|
|
||||||
.gen/
|
|
||||||
gen/
|
|
||||||
mta_archives/
|
|
||||||
node_modules/
|
|
||||||
target/
|
|
||||||
|
|
||||||
.cds_gen.log
|
|
||||||
connection.properties
|
|
||||||
*.db
|
|
||||||
.DS_Store
|
|
||||||
*.orig
|
|
||||||
_out
|
|
||||||
default-*.json
|
|
||||||
package-lock.json
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "bookstore",
|
|
||||||
"description": "Generated by cds init",
|
|
||||||
"repository": "<Add your repository here>",
|
|
||||||
"license": "ISC",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"engines": {
|
|
||||||
"node": "^8.9"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@sap/cds": "^3.17.4",
|
|
||||||
"express": "^4.17.1"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"build": "cds build/all --clean",
|
|
||||||
"deploy": "cds deploy",
|
|
||||||
"start": "cds run"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
12
packages/products-service/.gitignore
vendored
12
packages/products-service/.gitignore
vendored
@@ -1,12 +0,0 @@
|
|||||||
gen/
|
|
||||||
.gen/
|
|
||||||
node_modules/
|
|
||||||
target/
|
|
||||||
*.db
|
|
||||||
.DS_Store
|
|
||||||
_out
|
|
||||||
.che/
|
|
||||||
.cds_gen.log
|
|
||||||
package-lock.json
|
|
||||||
*.orig
|
|
||||||
mta_archives/
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
namespace sap.capire.products;
|
|
||||||
|
|
||||||
using { Currency, cuid, managed, sap.common.CodeList } from '@sap/cds/common';
|
|
||||||
|
|
||||||
entity Products : cuid, managed {
|
|
||||||
key ID : String(36);
|
|
||||||
title : localized String(111);
|
|
||||||
descr : localized String(1111);
|
|
||||||
stock : Integer;
|
|
||||||
price : Decimal(9,2);
|
|
||||||
currency : Currency;
|
|
||||||
category : Association to Categories;
|
|
||||||
}
|
|
||||||
|
|
||||||
entity Categories : CodeList {
|
|
||||||
key ID : Integer;
|
|
||||||
parent : Association to Categories;
|
|
||||||
children : Composition of many Categories on children.parent = $self;
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
using from './db/schema';
|
|
||||||
using from './srv/admin-service';
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@sap/capire-products",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "A reuse package providing domain models and services to manage product catalogs.",
|
|
||||||
"repository": "https://github.wdf.sap.corp/caps/products-service.git",
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@sap/cds": "^3.17.4",
|
|
||||||
"express": "^4.17.1"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"db",
|
|
||||||
"srv",
|
|
||||||
"index.cds"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
using { sap.capire.products as db } from '../db/schema';
|
|
||||||
namespace sap.capire.products;
|
|
||||||
|
|
||||||
service AdminService @(_requires:'admin') {
|
|
||||||
entity Products as projection on db.Products;
|
|
||||||
entity Categories as projection on db.Categories;
|
|
||||||
}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
const cds = require ('@sap/cds')
|
|
||||||
|
|
||||||
describe('reading/writing hierarchies', ()=>{
|
|
||||||
|
|
||||||
it ('should prepare to sqlite in-memory', async()=>{
|
|
||||||
await cds.deploy (__dirname+'/../db') .to ('sqlite::memory:')
|
|
||||||
expect (cds.model) .toBeDefined()
|
|
||||||
})
|
|
||||||
|
|
||||||
it ('should insert hierarchy of categories', ()=>{
|
|
||||||
const { Categories } = cds.entities
|
|
||||||
return INSERT.into (Categories) .entries (
|
|
||||||
{ ID:100, name:'Some Sample Categories...', children:[
|
|
||||||
{ ID:101, name:'Cat', children:[
|
|
||||||
{ ID:102, name:'Kitty', children:[
|
|
||||||
{ ID:103, name:'Kitty Cat', children:[
|
|
||||||
{ ID:104, name:'Aristocat' } ]},
|
|
||||||
{ ID:105, name:'Kitty Bat' } ]},
|
|
||||||
{ ID:106, name:'Catwoman', children:[
|
|
||||||
{ ID:107, name:'Catalina' } ]} ]},
|
|
||||||
{ ID:108, name:'Catweazle' }
|
|
||||||
]}
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it ('should read categories with children', async()=>{
|
|
||||||
const { Categories } = cds.entities
|
|
||||||
expect (await
|
|
||||||
|
|
||||||
SELECT.one.from (Categories, c=>{
|
|
||||||
c.ID, c.name.as('parent'), c.children (c=>{
|
|
||||||
c.name.as('child')
|
|
||||||
})
|
|
||||||
}) .where ({name:'Cat'})
|
|
||||||
|
|
||||||
) .toMatchObject (
|
|
||||||
|
|
||||||
{ ID:101, parent:'Cat', children:[
|
|
||||||
{ child:'Kitty' },
|
|
||||||
{ child:'Catwoman' },
|
|
||||||
]}
|
|
||||||
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it ('should read hierarchy of categories', async()=>{
|
|
||||||
const { Categories } = cds.entities
|
|
||||||
expect (await
|
|
||||||
|
|
||||||
SELECT.one.from (Categories, c=>{
|
|
||||||
c.ID, c.name, c.children (c=>{ c.name },{levels:3})
|
|
||||||
}) .where ({name:'Cat'})
|
|
||||||
|
|
||||||
) .toMatchObject (
|
|
||||||
|
|
||||||
{ ID:101, name:'Cat', children:[
|
|
||||||
{ name:'Kitty', children:[
|
|
||||||
{ name:'Kitty Cat', children:[
|
|
||||||
{ name:'Aristocat' }, ]},
|
|
||||||
{ name:'Kitty Bat' }, ]},
|
|
||||||
{ name:'Catwoman', children:[
|
|
||||||
{ name:'Catalina' } ]},
|
|
||||||
]}
|
|
||||||
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
ID;parent_ID;name
|
|
||||||
0;;Some Sample Categories...
|
|
||||||
1;;Cat
|
|
||||||
2;1;Kitty
|
|
||||||
3;2;Kitty Cat
|
|
||||||
4;3;Aristocat
|
|
||||||
5;2;Kitty Bat
|
|
||||||
6;1;Catwoman
|
|
||||||
7;6;Catalina
|
|
||||||
8;;Catweazle
|
|
||||||
|
@@ -1,157 +0,0 @@
|
|||||||
{
|
|
||||||
"info": {
|
|
||||||
"_postman_id": "0f8d4e79-a1c2-47fe-aeab-0319fb4ce180",
|
|
||||||
"name": "@sap/capire-products",
|
|
||||||
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
|
||||||
},
|
|
||||||
"item": [
|
|
||||||
{
|
|
||||||
"name": "Categories",
|
|
||||||
"request": {
|
|
||||||
"method": "POST",
|
|
||||||
"header": [
|
|
||||||
{
|
|
||||||
"key": "Content-Type",
|
|
||||||
"value": "application/json"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"body": {
|
|
||||||
"mode": "raw",
|
|
||||||
"raw": "{ \"ID\":0, \"name\":\"Some Sample Categories...\", \"children\":[\n { \"ID\":1, \"name\":\"Cat\", \"children\":[\n { \"ID\":2, \"name\":\"Kitty\", \"children\":[\n { \"ID\":3, \"name\":\"Kitty Cat\", \"children\":[\n { \"ID\":4, \"name\":\"Aristocat\" }\n ]},\n { \"ID\":5, \"name\":\"Kitty Bat\" }\n ]},\n { \"ID\":6, \"name\":\"Catwoman\", \"children\":[\n { \"ID\":7, \"name\":\"Catalina\" }\n ]}\n ] },\n { \"ID\":8, \"name\":\"Catweazle\" }\n]}\n"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"raw": "http://localhost:4004/admin/cats",
|
|
||||||
"protocol": "http",
|
|
||||||
"host": [
|
|
||||||
"localhost"
|
|
||||||
],
|
|
||||||
"port": "4004",
|
|
||||||
"path": [
|
|
||||||
"admin",
|
|
||||||
"cats"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"response": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Categories",
|
|
||||||
"request": {
|
|
||||||
"method": "GET",
|
|
||||||
"header": [],
|
|
||||||
"body": {
|
|
||||||
"mode": "raw",
|
|
||||||
"raw": ""
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"raw": "http://localhost:4004/admin/cats/0?$expand=children($expand=children($expand=children($expand=children)))",
|
|
||||||
"protocol": "http",
|
|
||||||
"host": [
|
|
||||||
"localhost"
|
|
||||||
],
|
|
||||||
"port": "4004",
|
|
||||||
"path": [
|
|
||||||
"admin",
|
|
||||||
"cats",
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"query": [
|
|
||||||
{
|
|
||||||
"key": "$expand",
|
|
||||||
"value": "children($expand=children($expand=children($expand=children)))"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"response": [
|
|
||||||
{
|
|
||||||
"name": "Categories",
|
|
||||||
"originalRequest": {
|
|
||||||
"method": "GET",
|
|
||||||
"header": [],
|
|
||||||
"body": {
|
|
||||||
"mode": "raw",
|
|
||||||
"raw": ""
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"raw": "http://localhost:4004/admin/cats/0?$expand=children($expand=children($expand=children($expand=children)))",
|
|
||||||
"protocol": "http",
|
|
||||||
"host": [
|
|
||||||
"localhost"
|
|
||||||
],
|
|
||||||
"port": "4004",
|
|
||||||
"path": [
|
|
||||||
"admin",
|
|
||||||
"cats",
|
|
||||||
"0"
|
|
||||||
],
|
|
||||||
"query": [
|
|
||||||
{
|
|
||||||
"key": "$expand",
|
|
||||||
"value": "children($expand=children($expand=children($expand=children)))"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"status": "OK",
|
|
||||||
"code": 200,
|
|
||||||
"_postman_previewlanguage": "json",
|
|
||||||
"header": [
|
|
||||||
{
|
|
||||||
"key": "X-Powered-By",
|
|
||||||
"value": "Express"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "OData-Version",
|
|
||||||
"value": "4.0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "content-type",
|
|
||||||
"value": "application/json;odata.metadata=minimal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "Date",
|
|
||||||
"value": "Tue, 21 May 2019 19:20:24 GMT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "Connection",
|
|
||||||
"value": "keep-alive"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "Content-Length",
|
|
||||||
"value": "767"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"cookie": [],
|
|
||||||
"body": "{\n \"@odata.context\": \"$metadata#cats(children(children(children(children()))))/$entity\",\n \"@odata.metadataEtag\": \"W/\\\"+AAp4JKNOcr+OusjrdQo55RCfM+UHKpTh8EbhsxyPhM=\\\"\",\n \"name\": \"Some Sample Categories...\",\n \"descr\": null,\n \"ID\": 0,\n \"parent_ID\": null,\n \"children\": [\n {\n \"name\": \"Cat\",\n \"descr\": null,\n \"ID\": 1,\n \"parent_ID\": 0,\n \"children\": [\n {\n \"name\": \"Kitty\",\n \"descr\": null,\n \"ID\": 2,\n \"parent_ID\": 1,\n \"children\": [\n {\n \"name\": \"Kitty Cat\",\n \"descr\": null,\n \"ID\": 3,\n \"parent_ID\": 2,\n \"children\": [\n {\n \"name\": \"Aristocat\",\n \"descr\": null,\n \"ID\": 4,\n \"parent_ID\": 3\n }\n ]\n },\n {\n \"name\": \"Kitty Bat\",\n \"descr\": null,\n \"ID\": 5,\n \"parent_ID\": 2,\n \"children\": []\n }\n ]\n },\n {\n \"name\": \"Catwoman\",\n \"descr\": null,\n \"ID\": 6,\n \"parent_ID\": 1,\n \"children\": [\n {\n \"name\": \"Catalina\",\n \"descr\": null,\n \"ID\": 7,\n \"parent_ID\": 6,\n \"children\": []\n }\n ]\n }\n ]\n },\n {\n \"name\": \"Catweazle\",\n \"descr\": null,\n \"ID\": 8,\n \"parent_ID\": 0,\n \"children\": []\n }\n ]\n}"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Categories",
|
|
||||||
"request": {
|
|
||||||
"method": "DELETE",
|
|
||||||
"header": [],
|
|
||||||
"body": {
|
|
||||||
"mode": "raw",
|
|
||||||
"raw": ""
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"raw": "http://localhost:4004/admin/cats/0",
|
|
||||||
"protocol": "http",
|
|
||||||
"host": [
|
|
||||||
"localhost"
|
|
||||||
],
|
|
||||||
"port": "4004",
|
|
||||||
"path": [
|
|
||||||
"admin",
|
|
||||||
"cats",
|
|
||||||
"0"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"response": []
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "dev-env",
|
|
||||||
"author": "daniel.hutzel@sap.com",
|
|
||||||
"dependencies": {
|
|
||||||
"@sap/cds": "^3.17.4"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"sqlite3": "5.0.0"
|
|
||||||
},
|
|
||||||
"license": "ISC"
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "tests-env",
|
|
||||||
"author": "daniel.hutzel@sap.com",
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/jest": "*",
|
|
||||||
"jest": "^24.8.0",
|
|
||||||
"supertest": "^4.0.2"
|
|
||||||
},
|
|
||||||
"license": "ISC"
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user