const app = require('vn-loopback/server/server'); describe('sale updatePrice()', () => { let originalSale; let originalSalesPersonMana; let createdSaleComponent; let saleId = 7; let manaComponentId; beforeAll(async done => { let component = await app.models.Component.findOne({where: {code: 'mana'}}); manaComponentId = component.id; originalSale = await app.models.Sale.findById(saleId); originalSalesPersonMana = await app.models.WorkerMana.findById(18); done(); }); it('should throw an error if the ticket is not editable', async() => { const ctx = { req: { accessToken: {userId: 18}, headers: {origin: 'localhost:5000'}, __: () => {} } }; let immutableSaleId = 1; let price = 5; await app.models.Sale.updatePrice(ctx, immutableSaleId, price) .catch(response => { expect(response).toEqual(new Error(`The sales of this ticket can't be modified`)); error = response; }); expect(error).toBeDefined(); }); it('should return 0 if the price is an empty string', async() => { const ctx = { req: { accessToken: {userId: 18}, headers: {origin: 'localhost:5000'}, __: () => {} } }; let price = ''; await app.models.Sale.updatePrice(ctx, saleId, price); let updatedSale = await app.models.Sale.findById(saleId); expect(updatedSale.price).toEqual(0); // restores await originalSale.updateAttributes(originalSale); await app.models.SaleComponent.updateAll({componentFk: manaComponentId, saleFk: saleId}, {value: 0}); await originalSalesPersonMana.updateAttributes(originalSalesPersonMana); }); it('should now set price as a number in a string', async() => { const ctx = { req: { accessToken: {userId: 18}, headers: {origin: 'localhost:5000'}, __: () => {} } }; let price = '8'; await app.models.Sale.updatePrice(ctx, saleId, price); let updatedSale = await app.models.Sale.findById(saleId); expect(updatedSale.price).toEqual(8); // restores await originalSale.updateAttributes(originalSale); await app.models.SaleComponent.updateAll({componentFk: manaComponentId, saleFk: saleId}, {value: 0}); await originalSalesPersonMana.updateAttributes(originalSalesPersonMana); }); // #2736 sale updatePrice() returns inconsistent values xit('should set price as a decimal number and check the sale has the mana component changing the salesPersonMana', async() => { let ctx = {req: {accessToken: {userId: 18}}}; let price = 5.4; await app.models.Sale.updatePrice(ctx, saleId, price); let updatedSale = await app.models.Sale.findById(saleId); createdSaleComponent = await app.models.SaleComponent.findOne({where: {saleFk: saleId, componentFk: manaComponentId}}); expect(updatedSale.price).toBe(price); expect(createdSaleComponent.value).toEqual(-2.04); let updatedSalesPersonMana = await app.models.WorkerMana.findById(18); expect(updatedSalesPersonMana.amount).not.toEqual(originalSalesPersonMana.amount); // restores await originalSale.updateAttributes(originalSale); await app.models.SaleComponent.updateAll({componentFk: manaComponentId, saleFk: saleId}, {value: 0}); await originalSalesPersonMana.updateAttributes(originalSalesPersonMana); }); });