| 
									
										
										
										
											2022-03-04 18:22:36 -03: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-03-04 18:22:36 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | const builder = createTestBuilder(); | 
					
						
							|  |  |  | let strapi; | 
					
						
							|  |  |  | let rq; | 
					
						
							|  |  |  | let graphqlQuery; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const postModel = { | 
					
						
							|  |  |  |   attributes: { | 
					
						
							|  |  |  |     myDatetime: { | 
					
						
							|  |  |  |       type: 'datetime', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   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-03-04 18:22:36 -03:00
										 |  |  |       return rq({ | 
					
						
							|  |  |  |         url: '/graphql', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   afterAll(async () => { | 
					
						
							|  |  |  |     await strapi.destroy(); | 
					
						
							|  |  |  |     await builder.cleanup(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe('GraphQL - Datetime field', () => { | 
					
						
							| 
									
										
										
										
											2022-03-04 18:54:24 -03:00
										 |  |  |     test.each(['2022-03-17T15:06:57.000Z', null])( | 
					
						
							|  |  |  |       'Can create an entity with datetime equals: %s', | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |       async (value) => { | 
					
						
							| 
									
										
										
										
											2022-03-04 18:22:36 -03:00
										 |  |  |         const res = await graphqlQuery({ | 
					
						
							|  |  |  |           query: /* GraphQL */ `
 | 
					
						
							|  |  |  |             mutation createPost($data: PostInput!) { | 
					
						
							|  |  |  |               createPost(data: $data) { | 
					
						
							|  |  |  |                 data { | 
					
						
							|  |  |  |                   attributes { | 
					
						
							|  |  |  |                     myDatetime | 
					
						
							|  |  |  |                   } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           `,
 | 
					
						
							|  |  |  |           variables: { | 
					
						
							|  |  |  |             data: { | 
					
						
							|  |  |  |               myDatetime: value, | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const { body } = res; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  |         expect(body).toEqual({ | 
					
						
							|  |  |  |           data: { | 
					
						
							|  |  |  |             createPost: { | 
					
						
							|  |  |  |               data: { | 
					
						
							|  |  |  |                 attributes: { myDatetime: value }, | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test.each(['2022-03-17', {}, [], 'something'])( | 
					
						
							| 
									
										
										
										
											2022-03-04 18:54:24 -03:00
										 |  |  |       'Cannot create an entity with datetime equals: %s', | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |       async (value) => { | 
					
						
							| 
									
										
										
										
											2022-03-04 18:22:36 -03:00
										 |  |  |         const res = await graphqlQuery({ | 
					
						
							|  |  |  |           query: /* GraphQL */ `
 | 
					
						
							|  |  |  |             mutation createPost($data: PostInput!) { | 
					
						
							|  |  |  |               createPost(data: $data) { | 
					
						
							|  |  |  |                 data { | 
					
						
							|  |  |  |                   attributes { | 
					
						
							|  |  |  |                     myDatetime | 
					
						
							|  |  |  |                   } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           `,
 | 
					
						
							|  |  |  |           variables: { | 
					
						
							|  |  |  |             data: { | 
					
						
							|  |  |  |               myDatetime: value, | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const { body } = res; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |         expect(body).toMatchObject({ | 
					
						
							|  |  |  |           errors: [ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               extensions: { code: 'BAD_USER_INPUT' }, | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |     test.each(['2022-03-17T15:06:57.878Z'])('Can filter query with datetime: %s', async (value) => { | 
					
						
							| 
									
										
										
										
											2022-03-04 18:22:36 -03:00
										 |  |  |       const res = await graphqlQuery({ | 
					
						
							|  |  |  |         query: /* GraphQL */ `
 | 
					
						
							| 
									
										
										
										
											2022-03-04 18:54:24 -03:00
										 |  |  |           query posts($myDatetime: DateTime!) { | 
					
						
							|  |  |  |             posts(filters: { myDatetime: { gt: $myDatetime } }) { | 
					
						
							| 
									
										
										
										
											2022-03-04 18:22:36 -03:00
										 |  |  |               data { | 
					
						
							|  |  |  |                 attributes { | 
					
						
							|  |  |  |                   myDatetime | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         `,
 | 
					
						
							|  |  |  |         variables: { | 
					
						
							| 
									
										
										
										
											2022-03-04 18:54:24 -03:00
										 |  |  |           myDatetime: value, | 
					
						
							| 
									
										
										
										
											2022-03-04 18:22:36 -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-04 18:22:36 -03:00
										 |  |  |           }, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | }); |