163 lines
6.5 KiB
JavaScript
163 lines
6.5 KiB
JavaScript
const app = require('vn-loopback/server/server');
|
|
|
|
describe('sale transferSales()', () => {
|
|
let createdTicketId;
|
|
let createdTicketsIds = [];
|
|
|
|
afterAll(async done => {
|
|
createdTicketsIds.forEach(async createdTicketId => {
|
|
await app.models.Ticket.destroyById(createdTicketId);
|
|
});
|
|
done();
|
|
});
|
|
|
|
it('should throw an error as the ticket is not editable', async() => {
|
|
const ctx = {req: {accessToken: {userId: 101}}};
|
|
let error;
|
|
|
|
const currentTicketId = 1;
|
|
const receiverTicketId = undefined;
|
|
const sales = [];
|
|
|
|
await app.models.Ticket.transferSales(ctx, currentTicketId, receiverTicketId, sales)
|
|
.catch(response => {
|
|
expect(response.message).toEqual(`The sales of this ticket can't be modified`);
|
|
error = response;
|
|
});
|
|
|
|
expect(error).toBeDefined();
|
|
});
|
|
|
|
it('should throw an error if the receiving ticket is not editable', async() => {
|
|
const ctx = {req: {accessToken: {userId: 101}}};
|
|
let error;
|
|
|
|
const currentTicketId = 16;
|
|
const receiverTicketId = 1;
|
|
const sales = [];
|
|
|
|
await app.models.Ticket.transferSales(ctx, currentTicketId, receiverTicketId, sales)
|
|
.catch(response => {
|
|
expect(response.message).toEqual(`The sales of the receiver ticket can't be modified`);
|
|
error = response;
|
|
});
|
|
|
|
expect(error).toBeDefined();
|
|
});
|
|
|
|
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 originalTicketSales = await app.models.Ticket.getSales(currentTicket.id);
|
|
salesToRestone = originalTicketSales;
|
|
|
|
expect(originalTicketSales.length).toEqual(2);
|
|
|
|
const currentTicketId = currentTicket.id;
|
|
const receiverTicketId = undefined;
|
|
|
|
let createdTicket = await app.models.Ticket.transferSales(
|
|
ctx, currentTicketId, receiverTicketId, originalTicketSales);
|
|
createdTicketId = createdTicket.id;
|
|
createdTicketsIds.push(createdTicket.id);
|
|
|
|
originalTicketSales = await app.models.Ticket.getSales(currentTicket.id);
|
|
receiverTicketSales = await app.models.Ticket.getSales(createdTicket.id);
|
|
|
|
expect(originalTicketSales.length).toEqual(0);
|
|
expect(receiverTicketSales.length).toEqual(2);
|
|
});
|
|
|
|
it('should transfer back the sales and set the created ticket as deleted', async() => {
|
|
const ctx = {req: {accessToken: {userId: 101}}};
|
|
const currentTicket = await app.models.Ticket.findById(createdTicketId);
|
|
const receiverTicketId = 11;
|
|
|
|
let createdTicket = await app.models.Ticket.findById(createdTicketId);
|
|
let createdTicketSales = await app.models.Ticket.getSales(createdTicketId);
|
|
let receiverTicketSales = await app.models.Ticket.getSales(receiverTicketId);
|
|
|
|
const currentTicketId = currentTicket.id;
|
|
const sales = createdTicketSales;
|
|
|
|
expect(createdTicket.isDeleted).toBeFalsy();
|
|
expect(createdTicketSales.length).toEqual(2);
|
|
expect(receiverTicketSales.length).toEqual(0);
|
|
|
|
await app.models.Ticket.transferSales(
|
|
ctx, currentTicketId, receiverTicketId, sales);
|
|
|
|
createdTicket = await app.models.Ticket.findById(createdTicketId);
|
|
createdTicketSales = await app.models.Ticket.getSales(createdTicketId);
|
|
receiverTicketSales = await app.models.Ticket.getSales(receiverTicketId);
|
|
|
|
expect(createdTicket.isDeleted).toBeTruthy();
|
|
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 transfer two sales to a new ticket but one shall be partial', async() => {
|
|
const ctx = {req: {accessToken: {userId: 101}}};
|
|
const originalTicketId = 11;
|
|
const receiverTicketId = undefined;
|
|
|
|
let currentTicketSales = await app.models.Ticket.getSales(originalTicketId);
|
|
|
|
const originalPartialSaleId = currentTicketSales[0].id;
|
|
const originalCompleteSaleId = currentTicketSales[1].id;
|
|
let originalQuantity = currentTicketSales[0].quantity;
|
|
currentTicketSales[0].quantity = 1;
|
|
|
|
let createdTicket = await app.models.Ticket.transferSales(
|
|
ctx, originalTicketId, receiverTicketId, currentTicketSales);
|
|
|
|
createdTicketId = createdTicket.id;
|
|
createdTicketsIds.push(createdTicket.id);
|
|
|
|
currentTicketSales = await app.models.Ticket.getSales(originalTicketId);
|
|
receiverTicketSales = await app.models.Ticket.getSales(createdTicketId);
|
|
|
|
const [createdPartialSale] = receiverTicketSales.filter(sale => {
|
|
return sale.id != originalCompleteSaleId;
|
|
});
|
|
|
|
expect(currentTicketSales.length).toEqual(1);
|
|
expect(currentTicketSales[0].quantity).toEqual(originalQuantity -= 1);
|
|
expect(receiverTicketSales.length).toEqual(2);
|
|
expect(createdPartialSale.quantity).toEqual(1);
|
|
|
|
let saleToRestore = await app.models.Sale.findById(originalPartialSaleId);
|
|
await saleToRestore.updateAttribute('quantity', originalQuantity);
|
|
|
|
let saleToReturnToTicket = await app.models.Sale.findById(originalCompleteSaleId);
|
|
await saleToReturnToTicket.updateAttribute('ticketFk', originalTicketId);
|
|
|
|
currentTicketSales = await app.models.Ticket.getSales(originalTicketId);
|
|
|
|
expect(currentTicketSales.length).toEqual(2);
|
|
});
|
|
});
|
|
});
|