| 
									
										
										
										
											2020-10-27 11:27:17 +01:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  | // Helpers.
 | 
					
						
							| 
									
										
										
										
											2023-04-05 10:32:20 +02:00
										 |  |  | const { createStrapiInstance } = require('api-tests/strapi'); | 
					
						
							|  |  |  | const { createAuthRequest, createRequest } = require('api-tests/request'); | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-17 15:38:41 +01:00
										 |  |  | let strapi; | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  | let authReq; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('Test Graphql user service', () => { | 
					
						
							|  |  |  |   beforeAll(async () => { | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |     strapi = await createStrapiInstance({ bypassAuth: false }); | 
					
						
							| 
									
										
										
										
											2020-11-17 15:38:41 +01:00
										 |  |  |     authReq = await createAuthRequest({ strapi }); | 
					
						
							| 
									
										
										
										
											2021-03-26 20:15:38 +01:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-17 15:38:41 +01:00
										 |  |  |   afterAll(async () => { | 
					
						
							|  |  |  |     await strapi.destroy(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |   describe('Check createUser authorizations', () => { | 
					
						
							|  |  |  |     test('createUser is forbidden to public', async () => { | 
					
						
							| 
									
										
										
										
											2020-11-17 15:38:41 +01:00
										 |  |  |       const rq = createRequest({ strapi }); | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/graphql', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           query: /* GraphQL */ `
 | 
					
						
							|  |  |  |             mutation { | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |               createUsersPermissionsUser( | 
					
						
							|  |  |  |                 data: { username: "test", email: "test", password: "test" } | 
					
						
							|  |  |  |               ) { | 
					
						
							|  |  |  |                 data { | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |                   id | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |                   attributes { | 
					
						
							|  |  |  |                     username | 
					
						
							|  |  |  |                   } | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           `,
 | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  |       expect(res.body).toMatchObject({ | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |         data: null, | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |         errors: [ | 
					
						
							|  |  |  |           { | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |             message: 'Forbidden access', | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |           }, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |     test('createUser is forbidden for admins', async () => { | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |       const res = await authReq({ | 
					
						
							|  |  |  |         url: '/graphql', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           query: /* GraphQL */ `
 | 
					
						
							|  |  |  |             mutation { | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |               createUsersPermissionsUser( | 
					
						
							|  |  |  |                 data: { username: "test", email: "test", password: "test" } | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |               ) { | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |                 data { | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |                   id | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |                   attributes { | 
					
						
							|  |  |  |                     username | 
					
						
							|  |  |  |                   } | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           `,
 | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |       expect(res.statusCode).toBe(401); | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |       expect(res.body).toMatchObject({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         error: { | 
					
						
							|  |  |  |           status: 401, | 
					
						
							|  |  |  |           name: 'UnauthorizedError', | 
					
						
							|  |  |  |           message: 'Missing or invalid credentials', | 
					
						
							|  |  |  |           details: {}, | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe('Check updateUser authorizations', () => { | 
					
						
							|  |  |  |     test('updateUser is forbidden to public', async () => { | 
					
						
							| 
									
										
										
										
											2020-11-17 15:38:41 +01:00
										 |  |  |       const rq = createRequest({ strapi }); | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/graphql', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           query: /* GraphQL */ `
 | 
					
						
							|  |  |  |             mutation { | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |               updateUsersPermissionsUser( | 
					
						
							|  |  |  |                 id: 1 | 
					
						
							|  |  |  |                 data: { username: "test", email: "test", password: "test" } | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |               ) { | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |                 data { | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |                   id | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |                   attributes { | 
					
						
							|  |  |  |                     username | 
					
						
							|  |  |  |                   } | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           `,
 | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  |       expect(res.body).toMatchObject({ | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |         data: null, | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |         errors: [ | 
					
						
							|  |  |  |           { | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |             message: 'Forbidden access', | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |           }, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |     test('updateUser is forbidden for admins', async () => { | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |       const res = await authReq({ | 
					
						
							|  |  |  |         url: '/graphql', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           query: /* GraphQL */ `
 | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |             mutation { | 
					
						
							|  |  |  |               updateUsersPermissionsUser( | 
					
						
							|  |  |  |                 id: 1 | 
					
						
							|  |  |  |                 data: { username: "test", email: "test", password: "test" } | 
					
						
							|  |  |  |               ) { | 
					
						
							|  |  |  |                 data { | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |                   id | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |                   attributes { | 
					
						
							|  |  |  |                     username | 
					
						
							|  |  |  |                   } | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           `,
 | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |       expect(res.statusCode).toBe(401); | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |       expect(res.body).toMatchObject({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         error: { | 
					
						
							|  |  |  |           status: 401, | 
					
						
							|  |  |  |           name: 'UnauthorizedError', | 
					
						
							|  |  |  |           message: 'Missing or invalid credentials', | 
					
						
							|  |  |  |           details: {}, | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |     describe('Check deleteUser authorizations', () => { | 
					
						
							|  |  |  |       test('deleteUser is forbidden to public', async () => { | 
					
						
							|  |  |  |         const rq = createRequest({ strapi }); | 
					
						
							|  |  |  |         const res = await rq({ | 
					
						
							|  |  |  |           url: '/graphql', | 
					
						
							|  |  |  |           method: 'POST', | 
					
						
							|  |  |  |           body: { | 
					
						
							|  |  |  |             query: /* GraphQL */ `
 | 
					
						
							|  |  |  |               mutation deleteUser { | 
					
						
							|  |  |  |                 deleteUsersPermissionsUser(id: 1) { | 
					
						
							|  |  |  |                   data { | 
					
						
							|  |  |  |                     id | 
					
						
							|  |  |  |                     attributes { | 
					
						
							|  |  |  |                       username | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                   } | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |             `,
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |           }, | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  |         expect(res.body).toMatchObject({ | 
					
						
							|  |  |  |           data: null, | 
					
						
							|  |  |  |           errors: [ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               message: 'Forbidden access', | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |       test('deleteUser is authorized for admins', async () => { | 
					
						
							|  |  |  |         const res = await authReq({ | 
					
						
							|  |  |  |           url: '/graphql', | 
					
						
							|  |  |  |           method: 'POST', | 
					
						
							|  |  |  |           body: { | 
					
						
							|  |  |  |             query: /* GraphQL */ `
 | 
					
						
							|  |  |  |               mutation deleteUser { | 
					
						
							|  |  |  |                 deleteUsersPermissionsUser(id: 1) { | 
					
						
							|  |  |  |                   data { | 
					
						
							|  |  |  |                     id | 
					
						
							|  |  |  |                     attributes { | 
					
						
							|  |  |  |                       username | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                   } | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |               } | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |             `,
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |           }, | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(res.statusCode).toBe(401); | 
					
						
							|  |  |  |         expect(res.body).toMatchObject({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |           error: { | 
					
						
							|  |  |  |             status: 401, | 
					
						
							|  |  |  |             name: 'UnauthorizedError', | 
					
						
							|  |  |  |             message: 'Missing or invalid credentials', | 
					
						
							|  |  |  |             details: {}, | 
					
						
							|  |  |  |           }, | 
					
						
							| 
									
										
										
										
											2021-09-27 17:17:24 +02:00
										 |  |  |         }); | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:59 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | }); |