| 
									
										
										
										
											2022-02-28 16:35:25 +01:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Helpers.
 | 
					
						
							| 
									
										
										
										
											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'); | 
					
						
							| 
									
										
										
										
											2022-02-28 16:35:25 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | const builder = createTestBuilder(); | 
					
						
							|  |  |  | let strapi; | 
					
						
							|  |  |  | let rq; | 
					
						
							|  |  |  | let graphqlQuery; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const postModel = { | 
					
						
							|  |  |  |   attributes: { | 
					
						
							|  |  |  |     myDate: { | 
					
						
							|  |  |  |       type: 'date', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   singularName: 'post', | 
					
						
							|  |  |  |   pluralName: 'posts', | 
					
						
							|  |  |  |   displayName: 'Post', | 
					
						
							|  |  |  |   description: '', | 
					
						
							|  |  |  |   collectionName: '', | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('Test Graphql API End to End', () => { | 
					
						
							|  |  |  |   beforeAll(async () => { | 
					
						
							|  |  |  |     await builder.addContentType(postModel).build(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     strapi = await createStrapiInstance(); | 
					
						
							|  |  |  |     rq = await createAuthRequest({ strapi }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |     graphqlQuery = (body) => { | 
					
						
							| 
									
										
										
										
											2022-02-28 16:35:25 +01:00
										 |  |  |       return rq({ | 
					
						
							|  |  |  |         url: '/graphql', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   afterAll(async () => { | 
					
						
							|  |  |  |     await strapi.destroy(); | 
					
						
							|  |  |  |     await builder.cleanup(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe('GraphQL - Date field', () => { | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |     test.each(['2022-03-17', null])('Can create an entity with date equals: %s', async (value) => { | 
					
						
							| 
									
										
										
										
											2022-02-28 16:35:25 +01:00
										 |  |  |       const res = await graphqlQuery({ | 
					
						
							|  |  |  |         query: /* GraphQL */ `
 | 
					
						
							|  |  |  |           mutation createPost($data: PostInput!) { | 
					
						
							|  |  |  |             createPost(data: $data) { | 
					
						
							|  |  |  |               data { | 
					
						
							|  |  |  |                 attributes { | 
					
						
							|  |  |  |                   myDate | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         `,
 | 
					
						
							|  |  |  |         variables: { | 
					
						
							|  |  |  |           data: { | 
					
						
							|  |  |  |             myDate: value, | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { body } = res; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  |       expect(body).toEqual({ | 
					
						
							|  |  |  |         data: { | 
					
						
							|  |  |  |           createPost: { | 
					
						
							|  |  |  |             data: { | 
					
						
							|  |  |  |               attributes: { myDate: value }, | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test.each(['2022-03-17T15:06:57.878Z', {}, [], 'something'])( | 
					
						
							|  |  |  |       'Cannot create an entity with date equals: %s', | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |       async (value) => { | 
					
						
							| 
									
										
										
										
											2022-02-28 16:35:25 +01:00
										 |  |  |         const res = await graphqlQuery({ | 
					
						
							|  |  |  |           query: /* GraphQL */ `
 | 
					
						
							|  |  |  |             mutation createPost($data: PostInput!) { | 
					
						
							|  |  |  |               createPost(data: $data) { | 
					
						
							|  |  |  |                 data { | 
					
						
							|  |  |  |                   attributes { | 
					
						
							|  |  |  |                     myDate | 
					
						
							|  |  |  |                   } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           `,
 | 
					
						
							|  |  |  |           variables: { | 
					
						
							|  |  |  |             data: { | 
					
						
							|  |  |  |               myDate: value, | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const { body } = res; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |         expect(body).toMatchObject({ | 
					
						
							|  |  |  |           errors: [ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               extensions: { code: 'BAD_USER_INPUT' }, | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2022-03-02 23:33:22 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |     test.each(['2022-03-17'])('Can filter query with date: %s', async (value) => { | 
					
						
							| 
									
										
										
										
											2022-03-02 23:33:22 -03:00
										 |  |  |       const res = await graphqlQuery({ | 
					
						
							|  |  |  |         query: /* GraphQL */ `
 | 
					
						
							| 
									
										
										
										
											2022-03-04 18:54:24 -03:00
										 |  |  |           query posts($myDate: Date!) { | 
					
						
							|  |  |  |             posts(filters: { myDate: { gt: $myDate } }) { | 
					
						
							| 
									
										
										
										
											2022-03-02 23:33:22 -03:00
										 |  |  |               data { | 
					
						
							|  |  |  |                 attributes { | 
					
						
							|  |  |  |                   myDate | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         `,
 | 
					
						
							|  |  |  |         variables: { | 
					
						
							| 
									
										
										
										
											2022-03-04 18:54:24 -03:00
										 |  |  |           myDate: value, | 
					
						
							| 
									
										
										
										
											2022-03-02 23:33:22 -03:00
										 |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { body } = res; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  |       expect(body).toEqual({ | 
					
						
							|  |  |  |         data: { | 
					
						
							|  |  |  |           posts: { | 
					
						
							| 
									
										
										
										
											2022-03-04 18:54:24 -03:00
										 |  |  |             data: [], | 
					
						
							| 
									
										
										
										
											2022-03-02 23:33:22 -03:00
										 |  |  |           }, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2022-02-28 16:35:25 +01:00
										 |  |  |   }); | 
					
						
							|  |  |  | }); |