const app = require('vn-loopback/server/server'); describe('ticket-request confirm()', () => { let originalRequest; let originalSale; let createdSaleId; let ctx = { req: { accessToken: {userId: 9}, headers: {origin: 'http://localhost'} } }; ctx.req.__ = value => { return value; }; afterAll(async done => { await originalRequest.updateAttributes(originalRequest); await originalSale.updateAttributes(originalSale); await app.models.Sale.destroyById(createdSaleId); done(); }); it(`should throw an error if the item doesn't exist`, async() => { ctx.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; ctx.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; ctx.args = { itemFk: itemId, id: requestId, quantity: quantity }; originalRequest = await app.models.TicketRequest.findById(requestId); originalSale = await app.models.Sale.findById(saleId); const request = await app.models.TicketRequest.findById(requestId); await request.updateAttributes({saleFk: saleId}); 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; ctx.args = { itemFk: itemId, id: requestId, quantity: quantity }; const request = await app.models.TicketRequest.findById(requestId); await request.updateAttributes({saleFk: null}); 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); }); });