Add e2e tests, fix validation for mongoose, update services

Signed-off-by: Convly <jean-sebastien.herbaux@epitech.eu>
This commit is contained in:
Convly 2020-05-14 18:54:52 +02:00 committed by Alexandre Bodin
parent 3029026014
commit 40089ed4aa
6 changed files with 98 additions and 20 deletions

View File

@ -3,10 +3,6 @@
const _ = require('lodash');
const { validateUserCreationInput } = require('../validation/user');
const formatError = error => [
{ messages: [{ id: error.id, message: error.message, field: error.field }] },
];
module.exports = {
async create(ctx) {
const { body } = ctx.request;
@ -24,20 +20,10 @@ module.exports = {
});
if (userAlreadyExists) {
return ctx.badRequest(
null,
formatError({
id: 'Auth.form.error.email.taken',
message: 'Email already taken',
field: ['email'],
})
);
return ctx.badRequest('Email already taken');
}
const createdUser = await strapi.admin.services.user.create({
...attributes,
registrationToken: strapi.admin.services.token.createToken(),
});
const createdUser = await strapi.admin.services.user.create(attributes);
// Send 201 created
ctx.created(strapi.admin.services.user.sanitizeUser(createdUser));

View File

@ -19,7 +19,7 @@ const getTokenOptions = () => {
* @returns {string}
*/
const createToken = () => {
return crypto.randomBytes(64).toString('hex');
return crypto.randomBytes(20).toString('hex');
};
/**

View File

@ -8,7 +8,11 @@ const { createUser } = require('../domain/user');
* @returns {Promise<user>}
*/
const create = async attributes => {
const user = createUser(attributes);
const user = createUser({
registrationToken: strapi.admin.services.token.createToken(),
...attributes,
});
return strapi.query('user', 'admin').create(user);
};

View File

@ -21,7 +21,7 @@ expect.extend({
},
});
describe('Content Manager End to End', () => {
describe('Admin Auth End to End', () => {
beforeAll(async () => {
const token = await registerAndLogin();
rq = createAuthRequest(token);

View File

@ -0,0 +1,88 @@
// Helpers.
const { registerAndLogin } = require('../../../test/helpers/auth');
const { createAuthRequest } = require('../../../test/helpers/request');
let rq;
describe('Admin User CRUD End to End', () => {
beforeAll(async () => {
const token = await registerAndLogin();
rq = createAuthRequest(token);
}, 60000);
describe('Create a new user', () => {
test('Can create a user successfully', async () => {
const user = {
email: 'new-user@strapi.io',
firstname: 'New',
lastname: 'User',
roles: [1, 2],
};
const res = await rq({
url: '/admin/users',
method: 'POST',
body: user,
});
expect(res.statusCode).toBe(201);
expect(res.body).toMatchObject({
id: 2,
firstname: user.firstname,
lastname: user.lastname,
username: null,
email: user.email,
registrationToken: expect.any(String),
isActive: false,
roles: [],
});
});
test('Fails on missing field (email)', async () => {
const user = {
firstname: 'New',
lastname: 'User',
roles: [1, 2],
};
const res = await rq({
url: '/admin/users',
method: 'POST',
body: user,
});
expect(res.statusCode).toBe(400);
expect(res.body).toMatchObject({
statusCode: 400,
error: 'Bad Request',
message: {
email: ['email is a required field'],
},
});
});
test('Fails on invalid field type (firstname)', async () => {
const user = {
email: 'new-user@strapi.io',
firstname: 1,
lastname: 'User',
roles: [1, 2],
};
const res = await rq({
url: '/admin/users',
method: 'POST',
body: user,
});
expect(res.statusCode).toBe(400);
expect(res.body).toMatchObject({
statusCode: 400,
error: 'Bad Request',
message: {
firstname: ['firstname must be a `string` type, but the final value was: `1`.'],
},
});
});
});
});

View File

@ -19,7 +19,7 @@ const userCreationSchema = yup.object().shape({
.required(),
roles: yup
.array()
.of(yup.number())
.min(1)
.required(),
});