| 
									
										
										
										
											2020-06-09 11:48:49 +02:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  | // Helpers.
 | 
					
						
							| 
									
										
										
										
											2023-04-05 10:32:20 +02:00
										 |  |  | const { createAuthRequest } = require('api-tests/request'); | 
					
						
							|  |  |  | const { createStrapiInstance, superAdmin } = require('api-tests/strapi'); | 
					
						
							|  |  |  | const { createUtils } = require('api-tests/utils'); | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 15:50:34 +02:00
										 |  |  | const internals = { | 
					
						
							| 
									
										
										
										
											2020-07-22 15:17:23 +02:00
										 |  |  |   role: null, | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2020-06-04 10:25:02 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-22 15:17:23 +02:00
										 |  |  | describe('Admin Auth End to End', () => { | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |   let rq; | 
					
						
							|  |  |  |   let strapi; | 
					
						
							|  |  |  |   let utils; | 
					
						
							| 
									
										
										
										
											2020-06-04 10:25:02 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  |   beforeAll(async () => { | 
					
						
							| 
									
										
										
										
											2020-11-30 20:20:36 +01:00
										 |  |  |     strapi = await createStrapiInstance(); | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |     rq = await createAuthRequest({ strapi }); | 
					
						
							|  |  |  |     utils = createUtils(strapi); | 
					
						
							| 
									
										
										
										
											2020-07-29 13:24:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-06 21:46:45 +01:00
										 |  |  |     internals.role = await utils.createRole({ | 
					
						
							|  |  |  |       name: 'auth_test_role', | 
					
						
							|  |  |  |       description: 'Only used for auth crud test (api)', | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2021-03-26 20:15:38 +01:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-06-04 10:25:02 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   afterAll(async () => { | 
					
						
							| 
									
										
										
										
											2023-03-06 21:46:45 +01:00
										 |  |  |     await utils.deleteRolesById([internals.role.id]); | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     await strapi.destroy(); | 
					
						
							| 
									
										
										
										
											2021-03-26 20:15:38 +01:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe('Login', () => { | 
					
						
							| 
									
										
										
										
											2020-06-04 10:25:02 +02:00
										 |  |  |     test('Can connect successfully', async () => { | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/login', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |         body: superAdmin.loginInfo, | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  |       expect(res.body.data).toMatchObject({ | 
					
						
							|  |  |  |         token: expect.any(String), | 
					
						
							|  |  |  |         user: { | 
					
						
							|  |  |  |           firstname: expect.stringOrNull(), | 
					
						
							|  |  |  |           lastname: expect.stringOrNull(), | 
					
						
							|  |  |  |           username: expect.stringOrNull(), | 
					
						
							|  |  |  |           email: expect.any(String), | 
					
						
							|  |  |  |           isActive: expect.any(Boolean), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Fails on invalid password', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/login', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |           ...superAdmin.loginInfo, | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  |           password: 'wrongPassword', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           name: 'ApplicationError', | 
					
						
							|  |  |  |           message: 'Invalid credentials', | 
					
						
							|  |  |  |           details: {}, | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Fails on invalid email', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/login', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           email: 'non-existent-user@strapi.io', | 
					
						
							|  |  |  |           password: 'pcw123', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           name: 'ApplicationError', | 
					
						
							|  |  |  |           message: 'Invalid credentials', | 
					
						
							|  |  |  |           details: {}, | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Fails on missing credentials', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/login', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           email: 'non-existent-user@strapi.io', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           name: 'ApplicationError', | 
					
						
							|  |  |  |           message: 'Missing credentials', | 
					
						
							|  |  |  |           details: {}, | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe('Renew token', () => { | 
					
						
							|  |  |  |     test('Renew token', async () => { | 
					
						
							|  |  |  |       const authRes = await rq({ | 
					
						
							|  |  |  |         url: '/admin/login', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |         body: superAdmin.loginInfo, | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(authRes.statusCode).toBe(200); | 
					
						
							|  |  |  |       const { token } = authRes.body.data; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/renew-token', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           token, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  |       expect(res.body.data).toEqual({ | 
					
						
							|  |  |  |         token: expect.any(String), | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Fails on invalid token', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/renew-token', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           token: 'invalid-token', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           name: 'ValidationError', | 
					
						
							|  |  |  |           message: 'Invalid token', | 
					
						
							|  |  |  |           details: {}, | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Fails on missing token', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/renew-token', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: {}, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           message: 'token is a required field', | 
					
						
							|  |  |  |           name: 'ValidationError', | 
					
						
							|  |  |  |           details: { | 
					
						
							|  |  |  |             errors: [ | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'token is a required field', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['token'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-05-18 16:07:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe('GET /registration-info', () => { | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |     const registrationToken = 'foobar'; | 
					
						
							|  |  |  |     let user; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     beforeAll(async () => { | 
					
						
							|  |  |  |       const userInfo = { | 
					
						
							| 
									
										
										
										
											2020-05-18 16:07:37 +02:00
										 |  |  |         email: 'test@strapi.io', | 
					
						
							|  |  |  |         firstname: 'test', | 
					
						
							|  |  |  |         lastname: 'strapi', | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |         roles: [internals.role.id], | 
					
						
							|  |  |  |         registrationToken, | 
					
						
							|  |  |  |         isActive: false, | 
					
						
							| 
									
										
										
										
											2020-05-18 16:07:37 +02:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |       user = await utils.createUser(userInfo); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     afterAll(async () => { | 
					
						
							|  |  |  |       await utils.deleteUserById(user.id); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-05-18 16:07:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |     test('Returns registration info', async () => { | 
					
						
							| 
									
										
										
										
											2020-05-18 16:07:37 +02:00
										 |  |  |       const res = await rq({ | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |         url: `/admin/registration-info?registrationToken=${registrationToken}`, | 
					
						
							| 
									
										
										
										
											2020-05-18 16:07:37 +02:00
										 |  |  |         method: 'GET', | 
					
						
							|  |  |  |         body: {}, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							|  |  |  |         data: { | 
					
						
							|  |  |  |           email: user.email, | 
					
						
							|  |  |  |           firstname: user.firstname, | 
					
						
							|  |  |  |           lastname: user.lastname, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Fails on missing registration token', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/registration-info', | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         body: {}, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           details: { | 
					
						
							|  |  |  |             errors: [ | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'registrationToken is a required field', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['registrationToken'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           message: 'registrationToken is a required field', | 
					
						
							|  |  |  |           name: 'ValidationError', | 
					
						
							| 
									
										
										
										
											2020-05-18 20:08:03 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2020-05-18 16:07:37 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Fails on invalid registration token. Without too much info', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/registration-info?registrationToken=ABCD', | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         body: {}, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           name: 'ValidationError', | 
					
						
							|  |  |  |           message: 'Invalid registrationToken', | 
					
						
							|  |  |  |           details: {}, | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2020-05-18 16:07:37 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-05-18 17:16:49 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe('GET /register', () => { | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |     let user; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     beforeEach(async () => { | 
					
						
							|  |  |  |       const userInfo = { | 
					
						
							|  |  |  |         email: 'test@strapi.io', | 
					
						
							|  |  |  |         firstname: 'test', | 
					
						
							|  |  |  |         lastname: 'strapi', | 
					
						
							|  |  |  |         registrationToken: 'foobar', | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       user = await utils.createUser(userInfo); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     afterEach(async () => { | 
					
						
							|  |  |  |       await utils.deleteUserById(user.id); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-18 17:16:49 +02:00
										 |  |  |     test('Fails on missing payload', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/register', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           userInfo: {}, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           details: { | 
					
						
							|  |  |  |             errors: [ | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'registrationToken is a required field', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['registrationToken'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'userInfo.firstname is a required field', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['userInfo', 'firstname'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'userInfo.password is a required field', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['userInfo', 'password'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |           }, | 
					
						
							| 
									
										
										
										
											2021-11-16 11:29:57 +01:00
										 |  |  |           message: '3 errors occurred', | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |           name: 'ValidationError', | 
					
						
							| 
									
										
										
										
											2020-05-18 17:16:49 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Fails on invalid password', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/register', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |           registrationToken: user.registrationToken, | 
					
						
							| 
									
										
										
										
											2020-05-18 17:16:49 +02:00
										 |  |  |           userInfo: { | 
					
						
							|  |  |  |             firstname: 'test', | 
					
						
							|  |  |  |             lastname: 'Strapi', | 
					
						
							|  |  |  |             password: '123', | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           details: { | 
					
						
							|  |  |  |             errors: [ | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'userInfo.password must be at least 8 characters', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['userInfo', 'password'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'userInfo.password must contain at least one lowercase character', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['userInfo', 'password'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'userInfo.password must contain at least one uppercase character', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['userInfo', 'password'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           message: '3 errors occurred', | 
					
						
							|  |  |  |           name: 'ValidationError', | 
					
						
							| 
									
										
										
										
											2020-05-18 17:16:49 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Registers user correctly', async () => { | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |       const userRegistrationInfo = { | 
					
						
							| 
									
										
										
										
											2020-05-18 17:16:49 +02:00
										 |  |  |         firstname: 'test', | 
					
						
							|  |  |  |         lastname: 'Strapi', | 
					
						
							|  |  |  |         password: '1Test2azda3', | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/register', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |           registrationToken: user.registrationToken, | 
					
						
							|  |  |  |           userInfo: userRegistrationInfo, | 
					
						
							| 
									
										
										
										
											2020-05-18 17:16:49 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							| 
									
										
										
										
											2020-05-18 20:08:03 +02:00
										 |  |  |       expect(res.body.data).toMatchObject({ | 
					
						
							| 
									
										
										
										
											2020-05-18 17:16:49 +02:00
										 |  |  |         token: expect.any(String), | 
					
						
							|  |  |  |         user: { | 
					
						
							|  |  |  |           email: user.email, | 
					
						
							| 
									
										
										
										
											2020-05-18 20:08:03 +02:00
										 |  |  |           firstname: 'test', | 
					
						
							|  |  |  |           lastname: 'Strapi', | 
					
						
							| 
									
										
										
										
											2020-05-18 17:16:49 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |       expect(res.body.data.user.password === userRegistrationInfo.password).toBe(false); | 
					
						
							| 
									
										
										
										
											2020-05-18 17:16:49 +02:00
										 |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-05-22 11:15:06 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe('GET /register-admin', () => { | 
					
						
							|  |  |  |     test('Fails on missing payload', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/register-admin', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: {}, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           details: { | 
					
						
							|  |  |  |             errors: [ | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'email is a required field', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['email'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'firstname is a required field', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['firstname'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'password is a required field', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['password'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |           }, | 
					
						
							| 
									
										
										
										
											2021-11-16 11:29:57 +01:00
										 |  |  |           message: '3 errors occurred', | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |           name: 'ValidationError', | 
					
						
							| 
									
										
										
										
											2020-05-22 11:15:06 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Fails on invalid password', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/register-admin', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           email: 'test@strapi.io', | 
					
						
							|  |  |  |           firstname: 'test', | 
					
						
							|  |  |  |           lastname: 'Strapi', | 
					
						
							|  |  |  |           password: '123', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           details: { | 
					
						
							|  |  |  |             errors: [ | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'password must be at least 8 characters', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['password'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'password must contain at least one lowercase character', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['password'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 message: 'password must contain at least one uppercase character', | 
					
						
							|  |  |  |                 name: 'ValidationError', | 
					
						
							|  |  |  |                 path: ['password'], | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           message: '3 errors occurred', | 
					
						
							|  |  |  |           name: 'ValidationError', | 
					
						
							| 
									
										
										
										
											2020-05-22 11:15:06 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Fails if already a user', async () => { | 
					
						
							|  |  |  |       const userInfo = { | 
					
						
							|  |  |  |         email: 'test-admin@strapi.io', | 
					
						
							|  |  |  |         firstname: 'test', | 
					
						
							|  |  |  |         lastname: 'Strapi', | 
					
						
							|  |  |  |         password: '1Test2azda3', | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/register-admin', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: userInfo, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(400); | 
					
						
							|  |  |  |       expect(res.body).toEqual({ | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |         data: null, | 
					
						
							|  |  |  |         error: { | 
					
						
							|  |  |  |           status: 400, | 
					
						
							|  |  |  |           name: 'ApplicationError', | 
					
						
							|  |  |  |           message: 'You cannot register a new super admin', | 
					
						
							|  |  |  |           details: {}, | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2020-05-22 11:15:06 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-05-22 16:01:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe('POST /forgot-password', () => { | 
					
						
							|  |  |  |     test('Always returns en empty response', async () => { | 
					
						
							| 
									
										
										
										
											2021-03-29 12:33:08 +02:00
										 |  |  |       global.strapi.admin.services.auth.forgotPassword = jest.fn(() => {}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-22 16:01:34 +02:00
										 |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         url: '/admin/forgot-password', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           email: 'admin@strapi.io', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(204); | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |       expect(res.body).toStrictEqual({}); | 
					
						
							| 
									
										
										
										
											2020-05-22 16:01:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       const nonExistentRes = await rq({ | 
					
						
							|  |  |  |         url: '/admin/forgot-password', | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           email: 'email-do-not-exist@strapi.io', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(nonExistentRes.statusCode).toBe(204); | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |       expect(nonExistentRes.body).toStrictEqual({}); | 
					
						
							| 
									
										
										
										
											2020-05-22 16:01:34 +02:00
										 |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-05-12 20:46:48 +02:00
										 |  |  | }); |