const app = require('vn-loopback/server/server'); const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; describe('timeControl_calculateByUser()', () => { it(`should return today's worked hours`, async() => { let start = Date.vnNew(); start.setHours(0, 0, 0, 0); start.setDate(start.getDate() - 1); let end = Date.vnNew(); end.setHours(0, 0, 0, 0); end.setDate(end.getDate() + 1); let stmts = []; let stmt; stmts.push('START TRANSACTION'); stmts.push(` DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate, tmp.timeBusinessCalculate `); let params = { workerID: 1106, start: start, end: end }; stmt = new ParameterizedSQL('CALL vn.timeControl_calculateByUser(?, ?, ?)', [ params.workerID, params.start, params.end ]); stmts.push(stmt); let tableIndex = stmts.push('SELECT * FROM tmp.timeControlCalculate') - 1; stmts.push('ROLLBACK'); let sql = ParameterizedSQL.join(stmts, ';'); let result = await app.models.Ticket.rawStmt(sql); let [timeControlCalculateTable] = result[tableIndex]; expect(timeControlCalculateTable.timeWorkSeconds).toEqual(29400); }); it(`should return the worked hours between last sunday and monday`, async() => { let lastSunday = Date.vnNew(); let daysSinceSunday = lastSunday.getDay(); if (daysSinceSunday === 0) // this means today is sunday but you need the previous sunday :) daysSinceSunday = 7; lastSunday.setHours(23, 0, 0, 0); lastSunday.setDate(lastSunday.getDate() - daysSinceSunday); let monday = Date.vnNew(); let daysSinceMonday = daysSinceSunday - 1; // aiming for monday (today could be monday) monday.setHours(7, 0, 0, 0); monday.setDate(monday.getDate() - daysSinceMonday); let stmts = []; let stmt; stmts.push('START TRANSACTION'); stmts.push(` DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate, tmp.timeBusinessCalculate `); const workerID = 1107; stmt = new ParameterizedSQL(` INSERT INTO vn.workerTimeControl(userFk, timed, manual, direction) VALUES (?, ?, 1, 'in'), (?, ?, 1, 'out') `, [ workerID, lastSunday, workerID, monday ]); stmts.push(stmt); stmt = new ParameterizedSQL('CALL vn.timeControl_calculateByUser(?, ?, ?)', [ workerID, lastSunday, monday ]); stmts.push(stmt); let tableIndex = stmts.push('SELECT * FROM tmp.timeControlCalculate') - 1; stmts.push('ROLLBACK'); let sql = ParameterizedSQL.join(stmts, ';'); let result = await app.models.Ticket.rawStmt(sql); let [timeControlCalculateTable] = result[tableIndex]; expect(timeControlCalculateTable.timeWorkSeconds).toEqual(30000); }); });