Untitled
unknown
plain_text
a year ago
5.5 kB
3
Indexable
import { expect } from 'chai'; import sinon from 'sinon'; import UserController from '#app/src/controllers/admin/user.controller.js'; import User from '#app/src/sequelize/models/user.model.js'; import UserMongoose from '#app/src/mongoose/models/user.model.js'; import { sendConfirmationEmail } from '#app/src/services/emails/auth.email.js'; describe('Admin UserController', () => { let req, res, sandbox; beforeEach(() => { sandbox = sinon.createSandbox(); req = { params: {}, body: {}, query: {}, }; res = { error: sandbox.stub(), success: sandbox.stub(), }; }); afterEach(() => { sandbox.restore(); }); describe('list', () => { it('should return a paginated list of users', async () => { req.query = { page: '1', limit: '10' }; const mockUsers = [ { id: '1', email: 'user1@example.com' }, { id: '2', email: 'user2@example.com' }, ]; sandbox.stub(UserMongoose, 'countDocuments').resolves(2); sandbox.stub(UserMongoose, 'find').returns({ sort: sandbox.stub().returnsThis(), skip: sandbox.stub().returnsThis(), limit: sandbox.stub().resolves(mockUsers), }); await UserController.list(req, res); expect(UserMongoose.countDocuments.calledOnce).to.be.true; expect(UserMongoose.find.calledOnce).to.be.true; expect(res.success.calledOnce).to.be.true; expect(res.success.firstCall.args[0]).to.have.property('data').that.deep.equals(mockUsers); expect(res.success.firstCall.args[0]).to.have.property('pagination'); }); it('should handle errors when fetching users', async () => { req.query = { page: '1', limit: '10' }; sandbox.stub(UserMongoose, 'countDocuments').rejects(new Error('Database error')); await UserController.list(req, res); expect(res.error.calledOnce).to.be.true; }); }); describe('findOne', () => { it('should return a specific user', async () => { req.params.id = '1'; const mockUser = { id: '1', email: 'user@example.com' }; sandbox.stub(User, 'findByPk').resolves(mockUser); await UserController.findOne(req, res); expect(User.findByPk.calledWith('1')).to.be.true; expect(res.success.calledWith(mockUser)).to.be.true; }); it('should return error if user is not found', async () => { req.params.id = '999'; sandbox.stub(User, 'findByPk').resolves(null); await UserController.findOne(req, res); expect(res.error.calledOnce).to.be.true; expect(res.error.firstCall.args[0]).to.equal('Erreur de validation'); expect(res.error.firstCall.args[1]).to.equal(404); }); }); describe('create', () => { it('should create a new user', async () => { req.body = { email: 'newuser@example.com', password: 'Password123!', firstName: 'John', lastName: 'Doe', roles: ['ROLE_USER'], }; const mockUser = { id: '1', ...req.body, toJSON: () => ({ ...req.body, id: '1' }) }; sandbox.stub(User, 'create').resolves(mockUser); await UserController.create(req, res); expect(User.create.calledOnce).to.be.true; expect(res.created.calledOnce).to.be.true; expect(res.created.firstCall.args[0]).to.not.have.property('password'); }); it('should return error for invalid input', async () => { req.body = { email: 'invalid-email' }; // Missing required fields await UserController.create(req, res); expect(res.error.calledOnce).to.be.true; expect(res.error.firstCall.args[0]).to.equal('Erreur de validation'); expect(res.error.firstCall.args[1]).to.equal(422); }); }); describe('update', () => { it('should update an existing user', async () => { req.params.id = '1'; req.body = { firstName: 'Updated', lastName: 'User', }; const mockUser = { id: '1', email: 'user@example.com', update: sandbox.stub().resolves(), }; sandbox.stub(User, 'findByPk').resolves(mockUser); await UserController.update(req, res); expect(mockUser.update.calledWith(req.body)).to.be.true; expect(res.success.calledWith(mockUser)).to.be.true; }); it('should return error if user is not found', async () => { req.params.id = '999'; sandbox.stub(User, 'findByPk').resolves(null); await UserController.update(req, res); expect(res.error.calledOnce).to.be.true; expect(res.error.firstCall.args[0]).to.equal('Erreur de validation'); expect(res.error.firstCall.args[1]).to.equal(422); }); }); describe('delete', () => { it('should anonymize a user', async () => { req.params.id = '1'; const mockUser = { id: '1', email: 'user@example.com', anonymize: sandbox.stub().resolves(), save: sandbox.stub().resolves(), }; sandbox.stub(User, 'findByPk').resolves(mockUser); await UserController.delete(req, res); expect(mockUser.anonymize.calledOnce).to.be.true; expect(mockUser.save.calledOnce).to.be.true; expect(res.success.calledWith({ message: 'Utilisateur anonymisé avec succès' })).to.be.true; }); it('should return error if user is not foun
Editor is loading...
Leave a Comment