126 lines
4.0 KiB
JavaScript
126 lines
4.0 KiB
JavaScript
const cds = require('@sap/cds/lib')
|
|
const { GET, expect, axios } = cds.test(__dirname)
|
|
|
|
// Fetch API disallows GET|HEAD requests with body
|
|
if (axios.constructor.name === 'Naxios') it = it.skip
|
|
|
|
describe ('GET w/ query in body', () => {
|
|
|
|
it ('serves CQN query objects in body', async () => {
|
|
const {data:books} = await GET ('/hcql/admin', {
|
|
headers: { 'Content-Type': 'application/json' },
|
|
data: cds.ql `SELECT from Books`
|
|
})
|
|
expect(books).to.be.an('array').of.length(5)
|
|
})
|
|
|
|
it ('serves plain CQL strings in body', async () => {
|
|
const {data:books} = await GET ('/hcql/admin', {
|
|
headers: { 'Content-Type': 'text/plain' },
|
|
data: `SELECT from Books`
|
|
})
|
|
expect(books).to.be.an('array').of.length(5)
|
|
})
|
|
|
|
it ('serves complex and deep queries', async () => {
|
|
const {data:books} = await GET ('/hcql/admin', {
|
|
headers: { 'Content-Type': 'text/plain' },
|
|
data: `SELECT from Authors {
|
|
name,
|
|
books [order by title] {
|
|
title,
|
|
genre.name as genre
|
|
}
|
|
}`
|
|
})
|
|
expect(books).to.deep.equal([
|
|
{
|
|
name: "Emily Brontë",
|
|
books: [
|
|
{ title: "Wuthering Heights", genre: 'Drama' }
|
|
]
|
|
},
|
|
{
|
|
name: "Charlotte Brontë",
|
|
books: [
|
|
{ title: "Jane Eyre", genre: 'Drama' }
|
|
]
|
|
},
|
|
{
|
|
name: "Edgar Allen Poe",
|
|
books: [
|
|
{ title: "Eleonora", genre: 'Romance' },
|
|
{ title: "The Raven", genre: 'Mystery' },
|
|
]
|
|
},
|
|
{
|
|
name: "Richard Carpenter",
|
|
books: [
|
|
{ title: "Catweazle", genre: 'Fantasy' }
|
|
]
|
|
}
|
|
])
|
|
})
|
|
|
|
})
|
|
|
|
|
|
describe ('Sluggified variants', () => {
|
|
|
|
test ('GET /Books', async () => {
|
|
const {data:books} = await GET ('/hcql/admin/Books')
|
|
expect(books).to.be.an('array').of.length(5)
|
|
expect(books.length).to.eql(5) //.of.length(5)
|
|
})
|
|
|
|
|
|
test ('GET /Books/201', async () => {
|
|
const {data:book} = await GET ('/hcql/admin/Books/201')
|
|
expect(book).to.be.an('object')
|
|
expect(book).to.have.property ('title', "Wuthering Heights")
|
|
})
|
|
|
|
test ('GET /Books { title, author.name as author }' , async () => {
|
|
const {data:books} = await GET ('/hcql/admin/Books { title, author.name as author } order by ID')
|
|
expect(books).to.deep.equal ([
|
|
{ title: "Wuthering Heights", 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" }
|
|
])
|
|
})
|
|
|
|
test ('GET /Books/201 w/ CQL tail in URL' , async () => {
|
|
const {data:book} = await GET ('/hcql/admin/Books/201 { title, author.name as author } order by ID')
|
|
expect(book).to.deep.equal ({ title: "Wuthering Heights", author: "Emily Brontë" })
|
|
})
|
|
|
|
it ('GET /Books/201 w/ CQL fragment in body' , async () => {
|
|
const {data:book} = await GET ('/hcql/admin/Books/201', {
|
|
headers: { 'Content-Type': 'text/plain' },
|
|
data: `{ title, author.name as author }`
|
|
})
|
|
expect(book).to.deep.equal ({ title: "Wuthering Heights", author: "Emily Brontë" })
|
|
})
|
|
|
|
it ('GET /Books/201 w/ CQN fragment in body' , async () => {
|
|
const {data:book} = await GET ('/hcql/admin/Books/201', {
|
|
data: cds.ql `SELECT title, author.name as author` .SELECT
|
|
})
|
|
expect(book).to.deep.equal ({ title: "Wuthering Heights", author: "Emily Brontë" })
|
|
})
|
|
|
|
it ('GET /Books/201 w/ tail in URL plus CQL/CQN fragments in body' , async () => {
|
|
const {data:[b1]} = await GET ('/hcql/admin/Books where ID=201', {
|
|
data: cds.ql `SELECT title, author.name as author` .SELECT
|
|
})
|
|
expect(b1).to.deep.equal ({ title: "Wuthering Heights", author: "Emily Brontë" })
|
|
const {data:[b2]} = await GET ('/hcql/admin/Books where ID=201', {
|
|
headers: { 'Content-Type': 'text/plain' },
|
|
data: `{ title, author.name as author }`
|
|
})
|
|
expect(b2).to.deep.equal ({ title: "Wuthering Heights", author: "Emily Brontë" })
|
|
})
|
|
|
|
}) |