refactor to parametrizedSql

This commit is contained in:
Carlos Jimenez 2018-11-21 11:50:30 +01:00
parent ea6d1811cc
commit 8b89c64dd2
6 changed files with 119 additions and 79 deletions

View File

@ -1,8 +1,15 @@
const app = require(`../../../ticket/server/server`); const app = require(`../../../ticket/server/server`);
const server = require(`../../../loopback/server/server`);
const ParameterizedSQL = server.loopbackConnector.ParameterizedSQL;
describe('ticket ticketCreateWithUser()', () => { describe('ticket ticketCreateWithUser()', () => {
const today = new Date(); const today = new Date();
it('should confirm the procedure creates the expected ticket', async () => { it('should confirm the procedure creates the expected ticket', async () => {
let stmts = [];
let stmt;
stmts.push('START TRANSACTION');
let params = { let params = {
clientFk: 101, clientFk: 101,
shipped: today, shipped: today,
@ -15,13 +22,7 @@ describe('ticket ticketCreateWithUser()', () => {
userId: 18 userId: 18
}; };
let query = ` stmt = new ParameterizedSQL(`CALL vn.ticketCreateWithUser(?, ?, ?, ?, ?, ?, ?, ?, ?, @newTicketId)`, [
START TRANSACTION;
CALL vn.ticketCreateWithUser(?, ?, ?, ?, ?, ?, ?, ?, ?, @newTicketId);
SELECT @newTicketId newTicketId;
SELECT * FROM vn.ticket WHERE id = @newTicketId;
ROLLBACK;`;
let result = await app.models.Ticket.rawSql(query, [
params.clientFk, params.clientFk,
params.shipped, params.shipped,
params.warehouseFk, params.warehouseFk,
@ -32,22 +33,33 @@ describe('ticket ticketCreateWithUser()', () => {
params.landed, params.landed,
params.userId params.userId
]); ]);
stmts.push(stmt);
let ticketResult = result[2][0]; let ticketResultIndex = stmts.push(`SELECT * FROM vn.ticket WHERE id = @newTicketId`) - 1;
expect(ticketResult.newTicketId).toBeGreaterThan(21); stmts.push('ROLLBACK');
let createdTicket = result[3][0]; let sql = ParameterizedSQL.join(stmts, ';');
let result = await app.models.Ticket.rawStmt(sql);
expect(createdTicket.clientFk).toEqual(params.clientFk); let ticketResult = result[ticketResultIndex][0];
expect(createdTicket.warehouseFk).toEqual(params.warehouseFk);
expect(createdTicket.companyFk).toEqual(params.companyFk);
expect(createdTicket.addressFk).toEqual(params.addressFk); expect(ticketResult.id).toBeGreaterThan(21);
expect(createdTicket.agencyModeFk).toEqual(params.agencyModeFk); expect(ticketResult.clientFk).toEqual(params.clientFk);
expect(createdTicket.routeFk).toEqual(params.routeFk); expect(ticketResult.warehouseFk).toEqual(params.warehouseFk);
expect(ticketResult.companyFk).toEqual(params.companyFk);
expect(ticketResult.addressFk).toEqual(params.addressFk);
expect(ticketResult.agencyModeFk).toEqual(params.agencyModeFk);
expect(ticketResult.routeFk).toEqual(params.routeFk);
}); });
it('should confirm the procedure creates the expected observations in the ticket', async () => { it('should confirm the procedure creates the expected observations in the ticket', async () => {
let stmts = [];
let stmt;
stmts.push('START TRANSACTION');
let params = { let params = {
clientFk: 101, clientFk: 101,
shipped: today, shipped: today,
@ -60,13 +72,7 @@ describe('ticket ticketCreateWithUser()', () => {
userId: 18 userId: 18
}; };
let query = ` stmt = new ParameterizedSQL('CALL vn.ticketCreateWithUser(?, ?, ?, ?, ?, ?, ?, ?, ?, @newTicketId)', [
START TRANSACTION;
CALL vn.ticketCreateWithUser(?, ?, ?, ?, ?, ?, ?, ?, ?, @newTicketId);
SELECT @newTicketId newTicketId;
SELECT * FROM vn.ticketObservation WHERE ticketFk = @newTicketId;
ROLLBACK;`;
let result = await app.models.Ticket.rawSql(query, [
params.clientFk, params.clientFk,
params.shipped, params.shipped,
params.warehouseFk, params.warehouseFk,
@ -77,10 +83,19 @@ describe('ticket ticketCreateWithUser()', () => {
params.landed, params.landed,
params.userId params.userId
]); ]);
stmts.push(stmt);
let firstTicketObservation = result[3][0]; let ticketObsevationsIndex = stmts.push(`SELECT * FROM vn.ticketObservation WHERE ticketFk = @newTicketId`) - 1;
let secondTicketObservation = result[3][1];
let thirdTicketObservation = result[3][2]; stmts.push('ROLLBACK');
let sql = ParameterizedSQL.join(stmts, ';');
let result = await app.models.Ticket.rawStmt(sql);
let firstTicketObservation = result[ticketObsevationsIndex][0];
let secondTicketObservation = result[ticketObsevationsIndex][1];
let thirdTicketObservation = result[ticketObsevationsIndex][2];
expect(firstTicketObservation.observationTypeFk).toEqual(1); expect(firstTicketObservation.observationTypeFk).toEqual(1);
expect(firstTicketObservation.description).toEqual('under the floor'); expect(firstTicketObservation.description).toEqual('under the floor');
@ -91,6 +106,11 @@ describe('ticket ticketCreateWithUser()', () => {
}); });
it('should confirm the procedure sets companyFk as Tenerife if vProvinceName is SANTA CRUZ DE TENERIFE', async () => { it('should confirm the procedure sets companyFk as Tenerife if vProvinceName is SANTA CRUZ DE TENERIFE', async () => {
let stmts = [];
let stmt;
stmts.push('START TRANSACTION');
let params = { let params = {
clientFk: 101, clientFk: 101,
shipped: today, shipped: today,
@ -105,17 +125,12 @@ describe('ticket ticketCreateWithUser()', () => {
let tenerife = 1381; let tenerife = 1381;
let changeProvinceToTenerife = `UPDATE province p, client c SET p.name ='SANTA CRUZ DE TENERIFE' WHERE p.id = c.provinceFk AND c.id = ?;`; stmt = new ParameterizedSQL(`UPDATE province p, client c SET p.name ='SANTA CRUZ DE TENERIFE' WHERE p.id = c.provinceFk AND c.id = ?`, [
let query = `
START TRANSACTION;
${changeProvinceToTenerife}
CALL vn.ticketCreateWithUser(?, ?, ?, ?, ?, ?, ?, ?, ?, @newTicketId);
SELECT @newTicketId newTicketId;
SELECT companyFk FROM vn.ticket WHERE id = @newTicketId;
ROLLBACK;`;
let result = await app.models.Ticket.rawSql(query, [
params.clientFk, params.clientFk,
]);
stmts.push(stmt);
stmt = new ParameterizedSQL(`CALL vn.ticketCreateWithUser(?, ?, ?, ?, ?, ?, ?, ?, ?, @newTicketId)`, [
params.clientFk, params.clientFk,
params.shipped, params.shipped,
params.warehouseFk, params.warehouseFk,
@ -126,13 +141,26 @@ describe('ticket ticketCreateWithUser()', () => {
params.landed, params.landed,
params.userId params.userId
]); ]);
stmts.push(stmt);
let ticket = result[4][0]; let ticketCompanyIndex = stmts.push(`SELECT companyFk FROM vn.ticket WHERE id = @newTicketId`) - 1;
stmts.push('ROLLBACK');
let sql = ParameterizedSQL.join(stmts, ';');
let result = await app.models.Ticket.rawStmt(sql);
let ticket = result[ticketCompanyIndex][0];
expect(ticket.companyFk).toEqual(tenerife); expect(ticket.companyFk).toEqual(tenerife);
}); });
it('should confirm the procedure sets address if it received it null', async () => { it('should confirm the procedure sets address if it received it null', async () => {
let stmts = [];
let stmt;
stmts.push('START TRANSACTION');
let params = { let params = {
clientFk: 101, clientFk: 101,
shipped: today, shipped: today,
@ -145,14 +173,7 @@ describe('ticket ticketCreateWithUser()', () => {
userId: 18 userId: 18
}; };
let query = ` stmt = new ParameterizedSQL(`CALL vn.ticketCreateWithUser(?, ?, ?, ?, ?, ?, ?, ?, ?, @newTicketId)`, [
START TRANSACTION;
CALL vn.ticketCreateWithUser(?, ?, ?, ?, ?, ?, ?, ?, ?, @newTicketId);
SELECT @newTicketId newTicketId;
SELECT addressFk FROM vn.ticket WHERE id = @newTicketId;
SELECT id FROM vn.address WHERE clientFk = ? AND isDefaultAddress = 1;
ROLLBACK;`;
let result = await app.models.Ticket.rawSql(query, [
params.clientFk, params.clientFk,
params.shipped, params.shipped,
params.warehouseFk, params.warehouseFk,
@ -161,17 +182,34 @@ describe('ticket ticketCreateWithUser()', () => {
params.agencyModeFk, params.agencyModeFk,
params.routeFk, params.routeFk,
params.landed, params.landed,
params.userId, params.userId
params.clientFk
]); ]);
stmts.push(stmt);
let ticket = result[2][0]; let ticketAddressIndex = stmts.push(`SELECT addressFk FROM vn.ticket WHERE id = @newTicketId`) - 1;
let clientDefaultAddress = result[3][0];
expect(ticket.addressFk).toEqual(clientDefaultAddress.id); stmt = new ParameterizedSQL(`SELECT id FROM vn.address WHERE clientFk = ? AND isDefaultAddress = 1`, [
params.clientFk,
]);
let clientDefaultAddressIndex = stmts.push(stmt) - 1;
stmts.push('ROLLBACK');
let sql = ParameterizedSQL.join(stmts, ';');
let result = await app.models.Ticket.rawStmt(sql);
let ticketAddress = result[ticketAddressIndex][0];
let clientDefaultAddress = result[clientDefaultAddressIndex][0];
expect(ticketAddress.addressFk).toEqual(clientDefaultAddress.id);
}); });
it('should confirm the procedure creates the state as delivered if the client has isCreatedAsServed TRUE', async () => { it('should confirm the procedure creates the state as delivered if the client has isCreatedAsServed TRUE', async () => {
let stmts = [];
let stmt;
stmts.push('START TRANSACTION');
let params = { let params = {
clientFk: 101, clientFk: 101,
shipped: today, shipped: today,
@ -184,17 +222,12 @@ describe('ticket ticketCreateWithUser()', () => {
userId: 18 userId: 18
}; };
let setAsIsDelivered = `UPDATE vn.client SET isCreatedAsServed = 1 WHERE id = ?;`; stmt = new ParameterizedSQL(`UPDATE vn.client SET isCreatedAsServed = 1 WHERE id = ?`, [
let query = `
START TRANSACTION;
${setAsIsDelivered}
CALL vn.ticketCreateWithUser(?, ?, ?, ?, ?, ?, ?, ?, ?, @newTicketId);
SELECT @newTicketId newTicketId;
SELECT code FROM vn.ticketState WHERE ticketFk = @newTicketId;
ROLLBACK;`;
let result = await app.models.Ticket.rawSql(query, [
params.clientFk, params.clientFk,
]);
stmts.push(stmt);
stmt = new ParameterizedSQL(`CALL vn.ticketCreateWithUser(?, ?, ?, ?, ?, ?, ?, ?, ?, @newTicketId)`, [
params.clientFk, params.clientFk,
params.shipped, params.shipped,
params.warehouseFk, params.warehouseFk,
@ -203,12 +236,19 @@ describe('ticket ticketCreateWithUser()', () => {
params.agencyModeFk, params.agencyModeFk,
params.routeFk, params.routeFk,
params.landed, params.landed,
params.userId, params.userId
params.clientFk
]); ]);
stmts.push(stmt);
let ticketState = result[4][0]; let ticketStateCodeIndex = stmts.push(`SELECT code FROM vn.ticketState WHERE ticketFk = @newTicketId`) - 1;
expect(ticketState.code).toEqual('DELIVERED'); stmts.push('ROLLBACK');
let sql = ParameterizedSQL.join(stmts, ';');
let result = await app.models.Ticket.rawStmt(sql);
let ticketStateCode = result[ticketStateCodeIndex][0].code;
expect(ticketStateCode).toEqual('DELIVERED');
}); });
}); });