const models = require('vn-loopback/server/server').models; const LoopBackContext = require('loopback-context'); describe('sale updateQuantity()', () => { beforeAll(async() => { const activeCtx = { accessToken: {userId: 9}, http: { req: { headers: {origin: 'http://localhost'} } } }; spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({ active: activeCtx }); }); const ctx = { req: { accessToken: {userId: 9}, headers: {origin: 'localhost:5000'}, __: () => {} } }; it('should throw an error if the quantity is greater than it should be', async() => { const ctx = { req: { accessToken: {userId: 1}, headers: {origin: 'localhost:5000'}, __: () => {} } }; const tx = await models.Sale.beginTransaction({}); let error; try { const options = {transaction: tx}; await models.Sale.updateQuantity(ctx, 17, 99, options); await tx.rollback(); } catch (e) { await tx.rollback(); error = e; } expect(error).toEqual(new Error('The new quantity should be smaller than the old one')); }); it('should add quantity if the quantity is greater than it should be and is role advanced', async() => { const tx = await models.Sale.beginTransaction({}); const saleId = 17; const buyerId = 35; const ctx = { req: { accessToken: {userId: buyerId}, headers: {origin: 'localhost:5000'}, __: () => {} } }; try { const options = {transaction: tx}; const isRoleAdvanced = await models.ACL.checkAccessAcl(ctx, 'Ticket', 'isRoleAdvanced', '*'); expect(isRoleAdvanced).toEqual(true); const originalLine = await models.Sale.findOne({where: {id: saleId}, fields: ['quantity']}, options); expect(originalLine.quantity).toEqual(30); const newQuantity = originalLine.quantity + 1; await models.Sale.updateQuantity(ctx, saleId, newQuantity, options); const modifiedLine = await models.Sale.findOne({where: {id: saleId}, fields: ['quantity']}, options); expect(modifiedLine.quantity).toEqual(newQuantity); await tx.rollback(); } catch (e) { await tx.rollback(); throw e; } }); it('should update the quantity of a given sale current line', async() => { const tx = await models.Sale.beginTransaction({}); const saleId = 25; const newQuantity = 4; try { const options = {transaction: tx}; const originalLine = await models.Sale.findOne({where: {id: saleId}, fields: ['quantity']}, options); expect(originalLine.quantity).toEqual(20); await models.Sale.updateQuantity(ctx, saleId, newQuantity, options); const modifiedLine = await models.Sale.findOne({where: {id: saleId}, fields: ['quantity']}, options); expect(modifiedLine.quantity).toEqual(newQuantity); await tx.rollback(); } catch (e) { await tx.rollback(); throw e; } }); it('should throw an error if the quantity is negative and it is not a refund ticket', async() => { const ctx = { req: { accessToken: {userId: 1}, headers: {origin: 'localhost:5000'}, __: () => {} } }; const saleId = 17; const newQuantity = -10; const tx = await models.Sale.beginTransaction({}); let error; try { const options = {transaction: tx}; await models.Sale.updateQuantity(ctx, saleId, newQuantity, options); await tx.rollback(); } catch (e) { await tx.rollback(); error = e; } expect(error).toEqual(new Error('You can only add negative amounts in refund tickets')); }); it('should update a negative quantity when is a ticket refund', async() => { const tx = await models.Sale.beginTransaction({}); const saleId = 13; const newQuantity = -10; try { const options = {transaction: tx}; await models.Sale.updateQuantity(ctx, saleId, newQuantity, options); const modifiedLine = await models.Sale.findOne({where: {id: saleId}, fields: ['quantity']}, options); expect(modifiedLine.quantity).toEqual(newQuantity); await tx.rollback(); } catch (e) { await tx.rollback(); throw e; } }); });