const app = require('vn-loopback/server/server'); describe('ticket-request confirm()', () => { let request; let sale; let createdSaleId; afterAll(async done => { const paramsForRequest = { saleFk: request.saleFk, isOk: request.isOk, itemFk: request.itemFk, ticketFk: request.ticketFk }; const paramsForSale = { itemFk: sale.itemFk, quantity: sale.quantity, concept: sale.concept, }; await request.updateAttributes(paramsForRequest); await sale.updateAttributes(paramsForSale); app.models.Sale.destroyById(createdSaleId); done(); }); it(`should throw an error if the item doesn't exist`, async() => { let ctx = {req: {accessToken: {userId: 9}}, args: {itemFk: 999}}; let error; try { await app.models.TicketRequest.confirm(ctx); } catch (err) { error = err; } expect(error.message).toEqual(`That item doesn't exists`); }); it(`should throw an error if the item is not available`, async() => { const requestId = 5; const itemId = 4; const quantity = 99999; let ctx = {req: {accessToken: {userId: 9}}, args: { itemFk: itemId, id: requestId, quantity: quantity }}; let error; try { await app.models.TicketRequest.confirm(ctx); } catch (err) { error = err; } expect(error.message).toEqual(`This item is not available`); }); it(`should update the sale details if the request already contains a sale id`, async() => { const requestId = 4; const saleId = 11; const itemId = 1; const quantity = 10; request = await app.models.TicketRequest.findById(requestId); sale = await app.models.Sale.findById(saleId); request.updateAttributes({saleFk: saleId}); let ctx = {req: {accessToken: {userId: 9}}, args: { itemFk: itemId, id: requestId, quantity: quantity }}; await app.models.TicketRequest.confirm(ctx); let updatedSale = await app.models.Sale.findById(saleId); expect(updatedSale.itemFk).toEqual(itemId); expect(updatedSale.quantity).toEqual(quantity); }); it(`should create a new sale for the the request if there's no sale id`, async() => { const requestId = 4; const itemId = 1; const quantity = 10; request.updateAttributes({saleFk: null}); let ctx = {req: {accessToken: {userId: 9}}, args: { itemFk: itemId, id: requestId, quantity: quantity, ticketFk: 1 }}; await app.models.TicketRequest.confirm(ctx); let updatedRequest = await app.models.TicketRequest.findById(requestId); createdSaleId = updatedRequest.saleFk; expect(updatedRequest.saleFk).toEqual(createdSaleId); expect(updatedRequest.isOk).toEqual(true); expect(updatedRequest.itemFk).toEqual(itemId); }); });