From 6e50c1fad94d8d1712404f14a1058aee09da3faf Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Fri, 27 Sep 2019 16:55:40 +0200 Subject: [PATCH] #1685 ticket.transferSale --- .../ticket/specs/transferSales.spec.js | 81 +++++++++++++++++-- .../back/methods/ticket/transferSales.js | 2 +- 2 files changed, 75 insertions(+), 8 deletions(-) diff --git a/modules/ticket/back/methods/ticket/specs/transferSales.spec.js b/modules/ticket/back/methods/ticket/specs/transferSales.spec.js index 17996649ef..8bcc8bcda1 100644 --- a/modules/ticket/back/methods/ticket/specs/transferSales.spec.js +++ b/modules/ticket/back/methods/ticket/specs/transferSales.spec.js @@ -2,9 +2,12 @@ const app = require('vn-loopback/server/server'); describe('sale transferSales()', () => { let createdTicketId; + let createdTicketsIds = []; afterAll(async done => { - await app.models.Ticket.destroyById(createdTicketId); + createdTicketsIds.forEach(async createdTicketId => { + await app.models.Ticket.destroyById(createdTicketId); + }); done(); }); @@ -62,22 +65,23 @@ describe('sale transferSales()', () => { it('should transfer the sales from one ticket to a new one', async() => { const ctx = {req: {accessToken: {userId: 101}}}; let currentTicket = await app.models.Ticket.findById(11); - let currentTicketSales = await app.models.Ticket.getSales(currentTicket.id); + let originalTicketSales = await app.models.Ticket.getSales(currentTicket.id); + salesToRestone = originalTicketSales; - expect(currentTicketSales.length).toEqual(2); + expect(originalTicketSales.length).toEqual(2); const currentTicketId = currentTicket.id; const receiverTicketId = undefined; - const sales = currentTicketSales; let createdTicket = await app.models.Ticket.transferSales( - ctx, currentTicketId, receiverTicketId, sales); + ctx, currentTicketId, receiverTicketId, originalTicketSales); createdTicketId = createdTicket.id; + createdTicketsIds.push(createdTicket.id); - currentTicketSales = await app.models.Ticket.getSales(currentTicket.id); + originalTicketSales = await app.models.Ticket.getSales(currentTicket.id); receiverTicketSales = await app.models.Ticket.getSales(createdTicket.id); - expect(currentTicketSales.length).toEqual(0); + expect(originalTicketSales.length).toEqual(0); expect(receiverTicketSales.length).toEqual(2); }); @@ -108,4 +112,67 @@ describe('sale transferSales()', () => { expect(createdTicketSales.length).toEqual(0); expect(receiverTicketSales.length).toEqual(2); }); + + describe('sale transferPartialSales()', () => { + it('should throw an error in the quantity to transfer exceeds the amount from the original sale', async() => { + const ctx = {req: {accessToken: {userId: 101}}}; + let error; + let currentTicket = await app.models.Ticket.findById(11); + let currentTicketSales = await app.models.Ticket.getSales(currentTicket.id); + + const currentTicketId = currentTicket.id; + const receiverTicketId = undefined; + + currentTicketSales[0].quantity = 99; + + await app.models.Ticket.transferSales( + ctx, currentTicketId, receiverTicketId, currentTicketSales) + .catch(response => { + expect(response.message).toEqual(`Invalid quantity`); + error = response; + }); + + expect(error).toBeDefined(); + }); + + it('should partially transfer the sales from one ticket to a new one', async() => { + const ctx = {req: {accessToken: {userId: 101}}}; + let currentTicket = await app.models.Ticket.findById(11); + let currentTicketSales = []; + let saleToRestore = await app.models.Sale.findById(7); + currentTicketSales.push(saleToRestore); + + expect(currentTicketSales[0].quantity).toEqual(15); + + const currentTicketId = currentTicket.id; + const receiverTicketId = undefined; + + const originalQuantity = currentTicketSales[0].quantity; + currentTicketSales[0].quantity = 1; + let salesToPartiallyTransfer = [currentTicketSales[0]]; + const saleIdToRestore = currentTicketSales[0].id; + + let createdTicket = await app.models.Ticket.transferSales( + ctx, currentTicketId, receiverTicketId, salesToPartiallyTransfer); + + createdTicketId = createdTicket.id; + createdTicketsIds.push(createdTicket.id); + + currentTicketSales = await app.models.Ticket.getSales(currentTicket.id); + receiverTicketSales = await app.models.Ticket.getSales(createdTicket.id); + + expect(currentTicketSales.length).toEqual(2); + expect(currentTicketSales[0].quantity).toEqual(14); + expect(receiverTicketSales.length).toEqual(1); + expect(receiverTicketSales[0].quantity).toEqual(1); + + saleToRestore.updateAttribute('quantity', originalQuantity); + + currentTicketSales = await app.models.Ticket.getSales(currentTicket.id); + + + expect(currentTicketSales[0].quantity).toEqual(15); + expect(currentTicketSales[0].id).toEqual(saleIdToRestore); + }); + }); }); diff --git a/modules/ticket/back/methods/ticket/transferSales.js b/modules/ticket/back/methods/ticket/transferSales.js index 815d5fb4ba..c35518878f 100644 --- a/modules/ticket/back/methods/ticket/transferSales.js +++ b/modules/ticket/back/methods/ticket/transferSales.js @@ -72,7 +72,7 @@ module.exports = Self => { await models.Sale.updateAll({ id: sale.id }, {ticketFk: ticketId}, options); - } else if (sale.quantity < originalSale.quantity) { + } else if (sale.quantity != originalSale.quantity) { await transferPartialSale( ticketId, originalSale, sale, options); }