Untitled
unknown
plain_text
a year ago
4.9 kB
4
Indexable
import { expect } from 'chai'; import sinon from 'sinon'; import ProductController from '#app/src/controllers/admin/product.controller.js'; import Product from '#app/src/sequelize/models/product.model.js'; import ProductMongoose from '#app/src/mongoose/models/product.model.js'; import { deleteUploadedFile, moveTmpToUpload } from '#app/src/utils/file.util.js'; describe('Admin ProductController', () => { let req, res, sandbox; beforeEach(() => { sandbox = sinon.createSandbox(); req = { params: {}, body: {}, file: { filename: 'test.jpg' }, }; res = { error: sandbox.stub(), created: sandbox.stub(), success: sandbox.stub(), }; }); afterEach(() => { sandbox.restore(); }); describe('create', () => { it('should create a new product', async () => { req.body = { name: 'Test Product', brand: 'Test Brand', description: 'Test Description', price: 99.99, stock: 10, ProductCategoryId: 1, }; const mockProduct = { id: 1, ...req.body }; sandbox.stub(Product, 'create').resolves(mockProduct); sandbox.stub(moveTmpToUpload); await ProductController.create(req, res); expect(moveTmpToUpload.calledWith('test.jpg')).to.be.true; expect(Product.create.calledOnce).to.be.true; expect(res.created.calledWith(mockProduct)).to.be.true; }); it('should return error for invalid input', async () => { req.body = { name: 'Test' }; // Missing required fields await ProductController.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 product', async () => { req.params.id = '1'; req.body = { name: 'Updated Product', price: 129.99, }; const mockProduct = { id: 1, name: 'Old Product', price: 99.99, imageName: 'old.jpg', update: sandbox.stub().resolves(), }; sandbox.stub(Product, 'findByPk').resolves(mockProduct); sandbox.stub(deleteUploadedFile); sandbox.stub(moveTmpToUpload); await ProductController.update(req, res); expect(deleteUploadedFile.calledWith('old.jpg')).to.be.true; expect(moveTmpToUpload.calledWith('test.jpg')).to.be.true; expect(mockProduct.update.calledWith(req.body)).to.be.true; expect(res.success.calledWith(mockProduct)).to.be.true; }); it('should return error if product is not found', async () => { req.params.id = '999'; sandbox.stub(Product, 'findByPk').resolves(null); await ProductController.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('findAll', () => { it('should return all products', async () => { const mockProducts = [{ id: 1, name: 'Product 1' }, { id: 2, name: 'Product 2' }]; sandbox.stub(ProductMongoose, 'find').returns({ sort: sandbox.stub().returnsThis(), exec: sandbox.stub().resolves(mockProducts), }); await ProductController.findAll(req, res); expect(ProductMongoose.find.calledOnce).to.be.true; expect(res.success.calledWith(mockProducts)).to.be.true; }); it('should handle errors when fetching products', async () => { sandbox.stub(ProductMongoose, 'find').throws(new Error('Database error')); await ProductController.findAll(req, res); expect(res.error.calledOnce).to.be.true; }); }); describe('delete', () => { it('should delete a product', async () => { req.params.id = '1'; const mockProduct = { id: 1, imageName: 'test.jpg', destroy: sandbox.stub().resolves(), }; sandbox.stub(Product, 'findByPk').resolves(mockProduct); sandbox.stub(deleteUploadedFile); await ProductController.delete(req, res); expect(deleteUploadedFile.calledWith('test.jpg')).to.be.true; expect(mockProduct.destroy.calledOnce).to.be.true; expect(res.status(204).send.calledOnce).to.be.true; }); it('should return error if product is not found', async () => { req.params.id = '999'; sandbox.stub(Product, 'findByPk').resolves(null); await ProductController.delete(req, res); expect(res.error.calledOnce).to.be.true; expect(res.error.firstCall.args[0]).to.equal('Produit non trouvé'); expect(res.error.firstCall.args[1]).to.equal(404); }); }); });
Editor is loading...
Leave a Comment