2020-10-27 11:27:17 +01:00
|
|
|
'use strict';
|
|
|
|
|
2020-10-01 17:47:08 +02:00
|
|
|
// Test an API with all the possible filed types and simple filterings (no deep filtering, no relations)
|
2024-02-28 14:15:24 +01:00
|
|
|
const { omit } = require('lodash/fp');
|
2023-04-05 10:32:20 +02:00
|
|
|
const { createTestBuilder } = require('api-tests/builder');
|
|
|
|
const { createStrapiInstance } = require('api-tests/strapi');
|
|
|
|
const { createAuthRequest } = require('api-tests/request');
|
2020-10-01 17:47:08 +02:00
|
|
|
|
2021-09-22 17:04:57 +02:00
|
|
|
const CREATOR_FIELDS = ['updatedBy', 'createdBy'];
|
2020-11-17 15:38:41 +01:00
|
|
|
|
|
|
|
const builder = createTestBuilder();
|
|
|
|
let strapi;
|
2020-10-01 17:47:08 +02:00
|
|
|
let rq;
|
2022-08-08 15:50:34 +02:00
|
|
|
const data = {
|
2020-10-01 17:47:08 +02:00
|
|
|
beds: [],
|
|
|
|
};
|
|
|
|
|
|
|
|
const bedModel = {
|
2021-09-13 16:57:04 +02:00
|
|
|
displayName: 'Bed',
|
|
|
|
singularName: 'bed',
|
|
|
|
pluralName: 'beds',
|
2020-10-01 17:47:08 +02:00
|
|
|
kind: 'collectionType',
|
2023-06-01 10:17:00 +02:00
|
|
|
options: {
|
2023-06-21 18:09:16 +02:00
|
|
|
noStageAttribute: true,
|
2023-06-01 10:17:00 +02:00
|
|
|
},
|
2020-10-01 17:47:08 +02:00
|
|
|
attributes: {
|
|
|
|
name: {
|
|
|
|
type: 'string',
|
|
|
|
},
|
|
|
|
weight: {
|
|
|
|
type: 'decimal',
|
|
|
|
},
|
|
|
|
shortDescription: {
|
|
|
|
type: 'text',
|
|
|
|
},
|
|
|
|
description: {
|
|
|
|
type: 'richtext',
|
|
|
|
},
|
|
|
|
sku: {
|
|
|
|
type: 'uid',
|
|
|
|
},
|
|
|
|
savEmail: {
|
|
|
|
type: 'email',
|
|
|
|
},
|
|
|
|
type: {
|
|
|
|
enum: ['spring', 'foam', 'feather'],
|
|
|
|
type: 'enumeration',
|
|
|
|
},
|
|
|
|
serialNumber: {
|
|
|
|
type: 'biginteger',
|
|
|
|
},
|
|
|
|
peopleNumber: {
|
|
|
|
type: 'integer',
|
|
|
|
},
|
|
|
|
fabricThickness: {
|
|
|
|
type: 'float',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
const bedFixtures = [
|
|
|
|
{
|
2023-11-14 18:56:03 +01:00
|
|
|
documentId: 'fixture-a',
|
2020-10-01 17:47:08 +02:00
|
|
|
name: 'Sleepy Bed',
|
|
|
|
weight: 12.4,
|
|
|
|
shortDescription: 'Is a good bed to sleep in.',
|
|
|
|
description: '**Is a very good bed to sleep in.** We promise.',
|
|
|
|
sku: 'sleepybed_0152',
|
|
|
|
savEmail: 'sav@bed.fr',
|
|
|
|
type: 'foam',
|
2022-08-08 23:33:39 +02:00
|
|
|
serialNumber: '9999999999999999',
|
2020-10-01 17:47:08 +02:00
|
|
|
peopleNumber: 6,
|
|
|
|
fabricThickness: 1.14157,
|
2024-01-25 18:43:08 +01:00
|
|
|
publishedAt: null,
|
2020-10-01 17:47:08 +02:00
|
|
|
},
|
|
|
|
{
|
2023-11-14 18:56:03 +01:00
|
|
|
documentId: 'fixture-b',
|
2020-10-01 17:47:08 +02:00
|
|
|
name: 'Tired Bed',
|
|
|
|
weight: 11.1,
|
|
|
|
shortDescription: 'You will never wake up again.',
|
|
|
|
description: '**You will never wake up again.** Never.',
|
|
|
|
sku: 'tiredbed_0001',
|
|
|
|
savEmail: 'sav@sleep.fr',
|
|
|
|
type: 'feather',
|
|
|
|
serialNumber: 1111111111111111,
|
|
|
|
peopleNumber: 1,
|
|
|
|
fabricThickness: 1.0001,
|
2024-01-25 18:43:08 +01:00
|
|
|
publishedAt: null,
|
2020-10-01 17:47:08 +02:00
|
|
|
},
|
|
|
|
{
|
2023-11-14 18:56:03 +01:00
|
|
|
documentId: 'fixture-c',
|
2020-10-01 17:47:08 +02:00
|
|
|
name: 'Zombie Bed',
|
|
|
|
weight: null,
|
|
|
|
shortDescription: null,
|
|
|
|
description: null,
|
|
|
|
sku: null,
|
|
|
|
savEmail: null,
|
|
|
|
type: null,
|
|
|
|
serialNumber: null,
|
|
|
|
peopleNumber: null,
|
|
|
|
fabricThickness: null,
|
2024-01-25 18:43:08 +01:00
|
|
|
publishedAt: null,
|
2020-10-01 17:47:08 +02:00
|
|
|
},
|
|
|
|
{
|
2023-11-14 18:56:03 +01:00
|
|
|
documentId: 'fixture-d',
|
2020-10-01 17:47:08 +02:00
|
|
|
name: 'a*b_c%d\\e+f',
|
|
|
|
weight: null,
|
|
|
|
shortDescription: null,
|
|
|
|
description: null,
|
|
|
|
sku: null,
|
|
|
|
savEmail: null,
|
|
|
|
type: null,
|
|
|
|
serialNumber: null,
|
|
|
|
peopleNumber: null,
|
|
|
|
fabricThickness: null,
|
2024-01-25 18:43:08 +01:00
|
|
|
publishedAt: null,
|
2020-10-01 17:47:08 +02:00
|
|
|
},
|
|
|
|
{
|
2023-11-14 18:56:03 +01:00
|
|
|
documentId: 'fixture-e',
|
2020-10-01 17:47:08 +02:00
|
|
|
name: 'Tired Bed',
|
|
|
|
weight: null,
|
|
|
|
shortDescription: null,
|
|
|
|
description: null,
|
|
|
|
sku: null,
|
|
|
|
savEmail: null,
|
|
|
|
type: null,
|
|
|
|
serialNumber: null,
|
|
|
|
peopleNumber: 7,
|
|
|
|
fabricThickness: null,
|
2024-01-25 18:43:08 +01:00
|
|
|
publishedAt: null,
|
2020-10-01 17:47:08 +02:00
|
|
|
},
|
|
|
|
];
|
|
|
|
|
2024-02-22 17:18:32 +00:00
|
|
|
describe('Search query', () => {
|
2020-10-01 17:47:08 +02:00
|
|
|
beforeAll(async () => {
|
2022-08-08 23:33:39 +02:00
|
|
|
await builder.addContentType(bedModel).addFixtures(bedModel.singularName, bedFixtures).build();
|
2020-11-17 15:38:41 +01:00
|
|
|
|
2020-11-30 20:20:36 +01:00
|
|
|
strapi = await createStrapiInstance();
|
2020-11-17 15:38:41 +01:00
|
|
|
rq = await createAuthRequest({ strapi });
|
2020-10-01 17:47:08 +02:00
|
|
|
|
2021-11-04 15:47:53 +01:00
|
|
|
data.beds = await builder.sanitizedFixturesFor(bedModel.singularName, strapi);
|
2021-03-26 20:15:38 +01:00
|
|
|
});
|
2020-10-01 17:47:08 +02:00
|
|
|
|
|
|
|
afterAll(async () => {
|
2020-11-17 15:38:41 +01:00
|
|
|
await strapi.destroy();
|
|
|
|
await builder.cleanup();
|
2021-03-26 20:15:38 +01:00
|
|
|
});
|
2020-10-01 17:47:08 +02:00
|
|
|
|
|
|
|
describe('Without filters', () => {
|
2024-01-25 18:43:08 +01:00
|
|
|
// TODO V5: Search by id
|
|
|
|
test.skip('search for "documentId"', async () => {
|
2020-10-01 17:47:08 +02:00
|
|
|
const res = await rq({
|
|
|
|
method: 'GET',
|
2021-08-06 18:09:49 +02:00
|
|
|
url: '/content-manager/collection-types/api::bed.bed',
|
2020-10-01 17:47:08 +02:00
|
|
|
qs: {
|
2023-11-14 18:56:03 +01:00
|
|
|
_q: data.beds[2].documentId,
|
2020-10-01 17:47:08 +02:00
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2020-11-03 13:42:01 +01:00
|
|
|
expect(Array.isArray(res.body.results)).toBe(true);
|
|
|
|
expect(res.body.results.length).toBe(1);
|
|
|
|
expect(res.body.results[0]).toMatchObject(data.beds[2]);
|
2020-10-01 17:47:08 +02:00
|
|
|
});
|
|
|
|
|
2024-01-25 18:43:08 +01:00
|
|
|
test.each(Object.keys(omit(['publishedAt', 'documentId'], bedFixtures[0])))(
|
|
|
|
'search that target column %p',
|
|
|
|
async (columnName) => {
|
|
|
|
const res = await rq({
|
|
|
|
method: 'GET',
|
|
|
|
url: '/content-manager/collection-types/api::bed.bed',
|
|
|
|
qs: {
|
|
|
|
_q: bedFixtures[0][columnName],
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
expect(Array.isArray(res.body.results)).toBe(true);
|
|
|
|
expect(res.body.results.length).toBe(1);
|
|
|
|
expect(res.body.results[0]).toMatchObject(data.beds[0]);
|
|
|
|
}
|
|
|
|
);
|
2020-10-01 17:47:08 +02:00
|
|
|
|
|
|
|
test('search with an empty query', async () => {
|
|
|
|
const res = await rq({
|
|
|
|
method: 'GET',
|
2021-08-06 18:09:49 +02:00
|
|
|
url: '/content-manager/collection-types/api::bed.bed',
|
2020-10-01 17:47:08 +02:00
|
|
|
qs: {
|
|
|
|
_q: '',
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2020-11-03 13:42:01 +01:00
|
|
|
expect(Array.isArray(res.body.results)).toBe(true);
|
2020-11-17 15:38:41 +01:00
|
|
|
expect(res.body.results.length).toBe(data.beds.length);
|
2024-01-10 11:31:48 +01:00
|
|
|
// TODO V5: Filter out i18n fields if content type is not localized
|
2024-02-28 14:15:24 +01:00
|
|
|
expect(res.body.results.map(omit([...CREATOR_FIELDS, 'localizations', 'status']))).toEqual(
|
|
|
|
expect.arrayContaining(data.beds)
|
|
|
|
);
|
2020-10-01 17:47:08 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
test('search with special characters', async () => {
|
|
|
|
const res = await rq({
|
|
|
|
method: 'GET',
|
2021-08-06 18:09:49 +02:00
|
|
|
url: '/content-manager/collection-types/api::bed.bed',
|
2020-10-01 17:47:08 +02:00
|
|
|
qs: {
|
|
|
|
_q: data.beds[3].name,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2020-11-03 13:42:01 +01:00
|
|
|
expect(Array.isArray(res.body.results)).toBe(true);
|
|
|
|
expect(res.body.results.length).toBe(1);
|
|
|
|
expect(res.body.results[0]).toMatchObject(data.beds[3]);
|
2020-10-01 17:47:08 +02:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('With filters', () => {
|
|
|
|
test('search with an empty query & peopleNumber > 0', async () => {
|
|
|
|
const res = await rq({
|
|
|
|
method: 'GET',
|
2021-08-06 18:09:49 +02:00
|
|
|
url: '/content-manager/collection-types/api::bed.bed',
|
2020-10-01 17:47:08 +02:00
|
|
|
qs: {
|
|
|
|
_q: '',
|
2021-07-28 21:03:32 +02:00
|
|
|
filters: {
|
|
|
|
peopleNumber: { $gt: 0 },
|
|
|
|
},
|
2020-10-01 17:47:08 +02:00
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2020-11-03 13:42:01 +01:00
|
|
|
expect(Array.isArray(res.body.results)).toBe(true);
|
|
|
|
expect(res.body.results.length).toBe(3);
|
|
|
|
expect(res.body.results).toMatchObject([data.beds[0], data.beds[1], data.beds[4]]);
|
2020-10-01 17:47:08 +02:00
|
|
|
});
|
|
|
|
test('search with an empty query & peopleNumber > 1', async () => {
|
|
|
|
const res = await rq({
|
|
|
|
method: 'GET',
|
2021-08-06 18:09:49 +02:00
|
|
|
url: '/content-manager/collection-types/api::bed.bed',
|
2020-10-01 17:47:08 +02:00
|
|
|
qs: {
|
|
|
|
_q: '',
|
2021-07-28 21:03:32 +02:00
|
|
|
filters: {
|
|
|
|
peopleNumber: { $gt: 1 },
|
|
|
|
},
|
2020-10-01 17:47:08 +02:00
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2020-11-03 13:42:01 +01:00
|
|
|
expect(Array.isArray(res.body.results)).toBe(true);
|
|
|
|
expect(res.body.results.length).toBe(2);
|
|
|
|
expect(res.body.results).toMatchObject([data.beds[0], data.beds[4]]);
|
2020-10-01 17:47:08 +02:00
|
|
|
});
|
2021-07-28 21:03:32 +02:00
|
|
|
|
2020-10-01 17:47:08 +02:00
|
|
|
test('search with an empty query & peopleNumber in [1, 6]', async () => {
|
|
|
|
const res = await rq({
|
|
|
|
method: 'GET',
|
2021-08-06 18:09:49 +02:00
|
|
|
url: '/content-manager/collection-types/api::bed.bed',
|
2021-07-28 21:03:32 +02:00
|
|
|
qs: {
|
|
|
|
filters: {
|
|
|
|
peopleNumber: [1, 6],
|
|
|
|
},
|
|
|
|
_q: '',
|
|
|
|
},
|
2020-10-01 17:47:08 +02:00
|
|
|
});
|
|
|
|
|
2020-11-03 13:42:01 +01:00
|
|
|
expect(Array.isArray(res.body.results)).toBe(true);
|
|
|
|
expect(res.body.results.length).toBe(2);
|
|
|
|
expect(res.body.results).toMatchObject(data.beds.slice(0, 2));
|
2020-10-01 17:47:08 +02:00
|
|
|
});
|
|
|
|
test('search for "Sleepy Bed" & peopleNumber < 7', async () => {
|
|
|
|
const res = await rq({
|
|
|
|
method: 'GET',
|
2021-08-06 18:09:49 +02:00
|
|
|
url: '/content-manager/collection-types/api::bed.bed',
|
2020-10-01 17:47:08 +02:00
|
|
|
qs: {
|
|
|
|
_q: 'Sleepy Bed',
|
2021-07-28 21:03:32 +02:00
|
|
|
filters: {
|
|
|
|
peopleNumber: {
|
|
|
|
$lt: 7,
|
|
|
|
},
|
|
|
|
},
|
2020-10-01 17:47:08 +02:00
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2020-11-03 13:42:01 +01:00
|
|
|
expect(Array.isArray(res.body.results)).toBe(true);
|
|
|
|
expect(res.body.results.length).toBe(1);
|
|
|
|
expect(res.body.results).toMatchObject([data.beds[0]]);
|
2020-10-01 17:47:08 +02:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|