| 
									
										
										
										
											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)
 | 
					
						
							| 
									
										
										
										
											2020-12-29 16:43:53 +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, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   { | 
					
						
							| 
									
										
										
										
											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, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   { | 
					
						
							| 
									
										
										
										
											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, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   { | 
					
						
							| 
									
										
										
										
											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, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   { | 
					
						
							| 
									
										
										
										
											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, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('Search query', () => { | 
					
						
							|  |  |  |   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', () => { | 
					
						
							| 
									
										
										
										
											2023-11-14 18:56:03 +01:00
										 |  |  |     test('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
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |     test.each(Object.keys(bedFixtures[0]))('search that target column %p', async (columnName) => { | 
					
						
							| 
									
										
										
										
											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: { | 
					
						
							|  |  |  |           _q: bedFixtures[0][columnName], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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[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); | 
					
						
							|  |  |  |       expect(res.body.results.map(omit(CREATOR_FIELDS))).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
										 |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | }); |