const {models} = require('vn-loopback/server/server'); describe('Sale - replaceItem function', () => { let options; let tx; const ctx = beforeAll.getCtx(); beforeAll.mockLoopBackContext(); beforeEach(async() => { tx = await models.Sale.beginTransaction({}); options = {transaction: tx}; }); afterEach(async() => { if (tx) await tx.rollback(); }); it('should replace full item in sale and send notification', async() => { const saleFk = 43; const substitutionFk = 3; const quantity = 15; const ticketFk = 1000000; const salesBefore = await models.Sale.find({where: {ticketFk}}, options); const salesLength = salesBefore.length; expect(1).toEqual(salesBefore.length); await models.Sale.replaceItem(ctx, saleFk, substitutionFk, quantity, options); const salesAfter = await models.Sale.find({where: {ticketFk}}, options); expect(salesLength).toBeLessThan(salesAfter.length); expect(salesAfter[0].id).toEqual(saleFk); expect(salesAfter[salesLength].itemFk).toEqual(substitutionFk); expect(salesAfter[salesLength].quantity).toEqual(quantity); expect(salesAfter[0].quantity).toEqual(0); expect(salesAfter[salesLength].concept).toMatch(/^\+/); }); it('should replace half item in sale and send notification', async() => { const saleFk = 43; const substitutionFk = 3; const quantity = 10; const ticketFk = 1000000; const salesBefore = await models.Sale.find({where: {ticketFk}}, options); const salesLength = salesBefore.length; expect(1).toEqual(salesBefore.length); await models.Sale.replaceItem(ctx, saleFk, substitutionFk, quantity, options); const salesAfter = await models.Sale.find({where: {ticketFk}}, options); expect(salesLength).toBeLessThan(salesAfter.length); expect(salesAfter[0].id).toEqual(saleFk); expect(salesAfter[salesLength].itemFk).toEqual(substitutionFk); expect(salesAfter[salesLength].quantity).toEqual(quantity); expect(salesAfter[0].quantity).toEqual(5); expect(salesAfter[salesLength].concept).toMatch(/^\+/); }); });