const app = require('vn-loopback/server/server'); const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; describe('buyUltimateFromInterval()', () => { let today; let future; beforeAll(() => { let date = new Date(); let month = `${date.getMonth() + 1}`; let futureMonth = `${date.getMonth() + 2}`; let day = date.getDate(); let year = date.getFullYear(); let futureYear = year; if (month.toString().length < 2) month = '0' + month; if (futureMonth.toString().length < 2) futureMonth = '0' + futureMonth; if (futureMonth.toString() == '13') { futureMonth = '01'; futureYear + 1; } if (day.toString().length < 2) day = `0${day}`; today = [year, month, day].join('-'); future = [futureYear, futureMonth, day].join('-'); }); it(`should create a temporal table with it's data`, async() => { let stmts = []; let stmt; stmts.push('START TRANSACTION'); let params = { warehouseFk: 1, started: today, ended: today }; stmt = new ParameterizedSQL('CALL vn.buyUltimateFromInterval(?, ?, ?)', [ params.warehouseFk, params.started, params.ended ]); stmts.push(stmt); let buyUltimateFromIntervalTableIndex = stmts.push(`SELECT * FROM tmp.buyUltimateFromInterval`) - 1; stmts.push('ROLLBACK'); let sql = ParameterizedSQL.join(stmts, ';'); let result = await app.models.Ticket.rawStmt(sql); let buyUltimateFromIntervalTable = result[buyUltimateFromIntervalTableIndex]; expect(buyUltimateFromIntervalTable.length).toEqual(2); expect(buyUltimateFromIntervalTable[0].itemFk).toEqual(1); expect(buyUltimateFromIntervalTable[1].itemFk).toEqual(3); expect(buyUltimateFromIntervalTable[0].warehouseFk).toEqual(1); expect(buyUltimateFromIntervalTable[1].warehouseFk).toEqual(1); expect(buyUltimateFromIntervalTable[0].buyFk).toEqual(3); expect(buyUltimateFromIntervalTable[1].buyFk).toEqual(5); expect(buyUltimateFromIntervalTable[0].landed).toEqual(new Date(today)); expect(buyUltimateFromIntervalTable[1].landed).toEqual(new Date(today)); }); it(`should create a temporal table with it's data in which started value is assigned to ended`, async() => { let params = { warehouseFk: 1, started: today, ended: null }; let query = ` START TRANSACTION; CALL vn.buyUltimateFromInterval(?, ?, ?); SELECT * FROM tmp.buyUltimateFromInterval; ROLLBACK;`; let result = await app.models.Ticket.rawSql(query, [ params.warehouseFk, params.started, params.ended ]); let buyUltimateFromIntervalTable = result[2]; expect(buyUltimateFromIntervalTable.length).toEqual(2); expect(buyUltimateFromIntervalTable[0].itemFk).toEqual(1); expect(buyUltimateFromIntervalTable[1].itemFk).toEqual(3); expect(buyUltimateFromIntervalTable[0].warehouseFk).toEqual(1); expect(buyUltimateFromIntervalTable[1].warehouseFk).toEqual(1); expect(buyUltimateFromIntervalTable[0].buyFk).toEqual(3); expect(buyUltimateFromIntervalTable[1].buyFk).toEqual(5); expect(buyUltimateFromIntervalTable[0].landed).toEqual(new Date(today)); expect(buyUltimateFromIntervalTable[1].landed).toEqual(new Date(today)); }); it(`should create a temporal table with it's data in which ended value is a date in the future`, async() => { let params = { warehouseFk: 1, started: today, ended: future }; let query = ` START TRANSACTION; CALL vn.buyUltimateFromInterval(?, ?, ?); SELECT * FROM tmp.buyUltimateFromInterval; ROLLBACK;`; let result = await app.models.Ticket.rawSql(query, [ params.warehouseFk, params.started, params.ended ]); let buyUltimateFromIntervalTable = result[2]; expect(buyUltimateFromIntervalTable.length).toEqual(2); expect(buyUltimateFromIntervalTable[0].itemFk).toEqual(1); expect(buyUltimateFromIntervalTable[1].itemFk).toEqual(3); expect(buyUltimateFromIntervalTable[0].warehouseFk).toEqual(1); expect(buyUltimateFromIntervalTable[1].warehouseFk).toEqual(1); expect(buyUltimateFromIntervalTable[0].buyFk).toEqual(3); expect(buyUltimateFromIntervalTable[1].buyFk).toEqual(5); expect(buyUltimateFromIntervalTable[0].landed).toEqual(new Date(today)); expect(buyUltimateFromIntervalTable[1].landed).toEqual(new Date(today)); }); });