mirror of
https://github.com/strapi/strapi.git
synced 2025-09-07 23:57:19 +00:00
311 lines
7.6 KiB
JavaScript
311 lines
7.6 KiB
JavaScript
'use strict';
|
|
|
|
const _ = require('lodash');
|
|
const userService = require('../user');
|
|
|
|
describe('User', () => {
|
|
describe('sanitizeUser', () => {
|
|
test('Removes password and resetPasswordToken', () => {
|
|
const res = userService.sanitizeUser({
|
|
id: 1,
|
|
firstname: 'Test',
|
|
otherField: 'Hello',
|
|
password: '$5IAZUDB871',
|
|
resetPasswordToken: '3456-5678-6789-789',
|
|
});
|
|
|
|
expect(res).toEqual({
|
|
id: 1,
|
|
firstname: 'Test',
|
|
otherField: 'Hello',
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('create', () => {
|
|
test('Creates a user by merging given and default attributes', async () => {
|
|
const create = jest.fn(user => Promise.resolve(user));
|
|
const createToken = jest.fn(() => 'token');
|
|
|
|
global.strapi = {
|
|
admin: {
|
|
services: {
|
|
token: { createToken },
|
|
},
|
|
},
|
|
query() {
|
|
return { create };
|
|
},
|
|
};
|
|
|
|
const input = { firstname: 'John', lastname: 'Doe', email: 'johndoe@email.com' };
|
|
const expected = { ...input, isActive: false, roles: [], registrationToken: 'token' };
|
|
|
|
const result = await userService.create(input);
|
|
|
|
expect(create).toHaveBeenCalled();
|
|
expect(createToken).toHaveBeenCalled();
|
|
expect(result).toStrictEqual(expected);
|
|
});
|
|
|
|
test('Creates a user by using given attributes', async () => {
|
|
const create = jest.fn(user => Promise.resolve(user));
|
|
const createToken = jest.fn(() => 'token');
|
|
|
|
global.strapi = {
|
|
admin: {
|
|
services: {
|
|
token: { createToken },
|
|
},
|
|
},
|
|
query() {
|
|
return { create };
|
|
},
|
|
};
|
|
|
|
const input = {
|
|
firstname: 'John',
|
|
lastname: 'Doe',
|
|
email: 'johndoe@email.com',
|
|
roles: [2],
|
|
isActive: true,
|
|
registrationToken: 'another-token',
|
|
};
|
|
const expected = _.clone(input);
|
|
const result = await userService.create(input);
|
|
|
|
expect(result).toStrictEqual(expected);
|
|
});
|
|
});
|
|
|
|
describe('update', () => {
|
|
test('Forwards call to the query layer', async () => {
|
|
const user = {
|
|
email: 'test@strapi.io',
|
|
};
|
|
const update = jest.fn(() => Promise.resolve(user));
|
|
|
|
global.strapi = {
|
|
query() {
|
|
return { update };
|
|
},
|
|
};
|
|
const params = { id: 1 };
|
|
const input = { email: 'test@strapi.io' };
|
|
const result = await userService.update(params, input);
|
|
|
|
expect(update).toHaveBeenCalledWith(params, input);
|
|
expect(result).toBe(user);
|
|
});
|
|
});
|
|
|
|
describe('exists', () => {
|
|
test('Return true if the user already exists', async () => {
|
|
const count = jest.fn(() => Promise.resolve(1));
|
|
|
|
global.strapi = {
|
|
query: () => {
|
|
return { count };
|
|
},
|
|
};
|
|
|
|
const result = await userService.exists();
|
|
|
|
expect(result).toBeTruthy();
|
|
});
|
|
|
|
test('Return false if the user does not exists', async () => {
|
|
const count = jest.fn(() => Promise.resolve(0));
|
|
|
|
global.strapi = {
|
|
query: () => {
|
|
return { count };
|
|
},
|
|
};
|
|
|
|
const result = await userService.exists();
|
|
|
|
expect(result).toBeFalsy();
|
|
});
|
|
});
|
|
|
|
describe('findRegistrationInfo', () => {
|
|
test('Returns undefined if not found', async () => {
|
|
const findOne = jest.fn(() => Promise.resolve());
|
|
|
|
global.strapi = {
|
|
query: () => {
|
|
return { findOne };
|
|
},
|
|
};
|
|
|
|
const res = await userService.findRegistrationInfo('ABCD');
|
|
expect(res).toBeUndefined();
|
|
expect(findOne).toHaveBeenCalledWith({ registrationToken: 'ABCD' });
|
|
});
|
|
|
|
test('Returns correct user registration info', async () => {
|
|
const user = {
|
|
email: 'test@strapi.io',
|
|
firstname: 'Test',
|
|
lastname: 'Strapi',
|
|
otherField: 'ignored',
|
|
};
|
|
|
|
const findOne = jest.fn(() => Promise.resolve(user));
|
|
|
|
global.strapi = {
|
|
query: () => {
|
|
return { findOne };
|
|
},
|
|
};
|
|
|
|
const res = await userService.findRegistrationInfo('ABCD');
|
|
|
|
expect(res).toEqual({
|
|
email: user.email,
|
|
firstname: user.firstname,
|
|
lastname: user.lastname,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('register', () => {
|
|
test('Fails if no matching user is found', async () => {
|
|
const findOne = jest.fn(() => Promise.resolve(undefined));
|
|
|
|
global.strapi = {
|
|
query() {
|
|
return {
|
|
findOne,
|
|
};
|
|
},
|
|
errors: {
|
|
badRequest(msg) {
|
|
throw new Error(msg);
|
|
},
|
|
},
|
|
};
|
|
|
|
const input = {
|
|
registrationToken: '123',
|
|
userInfo: {
|
|
firstname: 'test',
|
|
lastname: 'Strapi',
|
|
password: 'Test1234',
|
|
},
|
|
};
|
|
|
|
expect(userService.register(input)).rejects.toThrowError('Invalid registration info');
|
|
});
|
|
|
|
test('Create a password hash', async () => {
|
|
const findOne = jest.fn(() => Promise.resolve({ id: 1 }));
|
|
const update = jest.fn(user => Promise.resolve(user));
|
|
const hashPassword = jest.fn(() => Promise.resolve('123456789'));
|
|
|
|
global.strapi = {
|
|
query() {
|
|
return {
|
|
findOne,
|
|
};
|
|
},
|
|
admin: {
|
|
services: {
|
|
user: { update },
|
|
auth: { hashPassword },
|
|
},
|
|
},
|
|
};
|
|
|
|
const input = {
|
|
registrationToken: '123',
|
|
userInfo: {
|
|
firstname: 'test',
|
|
lastname: 'Strapi',
|
|
password: 'Test1234',
|
|
},
|
|
};
|
|
|
|
await userService.register(input);
|
|
|
|
expect(hashPassword).toHaveBeenCalledWith('Test1234');
|
|
expect(update).toHaveBeenCalledWith(
|
|
{ id: 1 },
|
|
expect.objectContaining({ password: '123456789' })
|
|
);
|
|
});
|
|
|
|
test('Set user firstname and lastname', async () => {
|
|
const findOne = jest.fn(() => Promise.resolve({ id: 1 }));
|
|
const update = jest.fn(user => Promise.resolve(user));
|
|
const hashPassword = jest.fn(() => Promise.resolve('123456789'));
|
|
|
|
global.strapi = {
|
|
query() {
|
|
return {
|
|
findOne,
|
|
};
|
|
},
|
|
admin: {
|
|
services: {
|
|
user: { update },
|
|
auth: { hashPassword },
|
|
},
|
|
},
|
|
};
|
|
|
|
const input = {
|
|
registrationToken: '123',
|
|
userInfo: {
|
|
firstname: 'test',
|
|
lastname: 'Strapi',
|
|
password: 'Test1234',
|
|
},
|
|
};
|
|
|
|
await userService.register(input);
|
|
|
|
expect(hashPassword).toHaveBeenCalledWith('Test1234');
|
|
expect(update).toHaveBeenCalledWith(
|
|
{ id: 1 },
|
|
expect.objectContaining({ firstname: 'test', lastname: 'Strapi' })
|
|
);
|
|
});
|
|
|
|
test('Set user to active', async () => {
|
|
const findOne = jest.fn(() => Promise.resolve({ id: 1 }));
|
|
const update = jest.fn(user => Promise.resolve(user));
|
|
const hashPassword = jest.fn(() => Promise.resolve('123456789'));
|
|
|
|
global.strapi = {
|
|
query() {
|
|
return {
|
|
findOne,
|
|
};
|
|
},
|
|
admin: {
|
|
services: {
|
|
user: { update },
|
|
auth: { hashPassword },
|
|
},
|
|
},
|
|
};
|
|
|
|
const input = {
|
|
registrationToken: '123',
|
|
userInfo: {
|
|
firstname: 'test',
|
|
lastname: 'Strapi',
|
|
password: 'Test1234',
|
|
},
|
|
};
|
|
|
|
await userService.register(input);
|
|
|
|
expect(hashPassword).toHaveBeenCalledWith('Test1234');
|
|
expect(update).toHaveBeenCalledWith({ id: 1 }, expect.objectContaining({ isActive: true }));
|
|
});
|
|
});
|
|
});
|