const app = require('vn-loopback/server/server');
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;

describe('buyUltimate()', () => {
    const today = new Date();
    it(`should create buyUltimate temporal table and update it's values`, async() => {
        let stmts = [];
        let stmt;

        stmts.push('START TRANSACTION');

        let params = {
            warehouseFk: 1,
            date: today
        };

        stmt = new ParameterizedSQL('CALL vn.buyUltimate(?, ?)', [
            params.warehouseFk,
            params.date
        ]);
        stmts.push(stmt);

        let buyUltimateTableIndex = stmts.push(`SELECT * FROM tmp.buyUltimate ORDER BY itemFk ASC`) - 1;

        stmts.push('ROLLBACK');

        let sql = ParameterizedSQL.join(stmts, ';');
        let result = await app.models.Ticket.rawStmt(sql);

        let buyUltimateTable = result[buyUltimateTableIndex];

        expect(buyUltimateTable.length).toEqual(4);

        expect(buyUltimateTable[0].itemFk).toEqual(1);
        expect(buyUltimateTable[1].itemFk).toEqual(2);
        expect(buyUltimateTable[2].itemFk).toEqual(3);
        expect(buyUltimateTable[3].itemFk).toEqual(4);

        expect(buyUltimateTable[0].warehouseFk).toEqual(1);
        expect(buyUltimateTable[1].warehouseFk).toEqual(1);
        expect(buyUltimateTable[2].warehouseFk).toEqual(1);
        expect(buyUltimateTable[3].warehouseFk).toEqual(1);

        expect(buyUltimateTable[1].buyFk).toEqual(4);
        expect(buyUltimateTable[0].buyFk).toEqual(3);
        expect(buyUltimateTable[2].buyFk).toEqual(5);
        expect(buyUltimateTable[3].buyFk).toEqual(6);
    });
});