8524-devToTest #3415

Merged
alexm merged 343 commits from 8524-devToTest into test 2025-02-04 13:42:16 +00:00
2 changed files with 52 additions and 7 deletions
Showing only changes of commit d10670cb37 - Show all commits

View File

@ -22,14 +22,16 @@ describe('Ticket transferClient()', () => {
it('should throw an error as the ticket is not editable', async() => { it('should throw an error as the ticket is not editable', async() => {
try { try {
const ticketId = 4; const ticketId = 4;
await models.Ticket.transferClient(ctx, ticketId, clientId, options); const addressFk = null;
await models.Ticket.transferClient(ctx, ticketId, clientId, addressFk, options);
} catch (e) { } catch (e) {
expect(e.message).toEqual('This ticket is locked'); expect(e.message).toEqual('This ticket is locked');
} }
}); });
it('should be assigned a different clientFk and nickname in the original ticket', async() => { it('should be assigned a different clientFk and nickname in the original ticket', async() => {
await models.Ticket.transferClient(ctx, 2, clientId, options); const addressFk = null;
await models.Ticket.transferClient(ctx, 2, clientId, addressFk, options);
const afterTransfer = await models.Ticket.findById(2, null, options); const afterTransfer = await models.Ticket.findById(2, null, options);
const client = await models.Client.findById(clientId, {fields: ['defaultAddressFk']}, options); const client = await models.Client.findById(clientId, {fields: ['defaultAddressFk']}, options);
const address = await models.Address.findById(client.defaultAddressFk, {fields: ['nickname']}, options); const address = await models.Address.findById(client.defaultAddressFk, {fields: ['nickname']}, options);
@ -39,7 +41,8 @@ describe('Ticket transferClient()', () => {
}); });
it('should be assigned a different clientFk and nickname in the original and refund ticket and claim', async() => { it('should be assigned a different clientFk and nickname in the original and refund ticket and claim', async() => {
await models.Ticket.transferClient(ctx, originalTicketId, clientId, options); const addressFk = null;
await models.Ticket.transferClient(ctx, originalTicketId, clientId, addressFk, options);
const [originalTicket, refundTicket] = await models.Ticket.find({ const [originalTicket, refundTicket] = await models.Ticket.find({
where: {id: {inq: [originalTicketId, refundTicketId]}} where: {id: {inq: [originalTicketId, refundTicketId]}}
@ -59,4 +62,39 @@ describe('Ticket transferClient()', () => {
expect(originalTicket.nickname).toEqual(address.nickname); expect(originalTicket.nickname).toEqual(address.nickname);
expect(refundTicket.nickname).toEqual(address.nickname); expect(refundTicket.nickname).toEqual(address.nickname);
}); });
it('should be assigned a different addressFk and nickname in the original and refund ticket', async() => {
const addressFk = 131;
await models.Ticket.transferClient(ctx, originalTicketId, clientId, addressFk, options);
const [originalTicket, refundTicket] = await models.Ticket.find({
where: {id: {inq: [originalTicketId, refundTicketId]}}
}, options);
const claim = await models.Claim.findOne({
where: {ticketFk: originalTicketId}
}, options);
const address = await models.Address.findById(addressFk, {fields: ['id', 'nickname', 'clientFk']}, options);
expect(originalTicket.clientFk).toEqual(clientId);
expect(originalTicket.clientFk).toEqual(address.clientFk);
expect(refundTicket.clientFk).toEqual(clientId);
expect(refundTicket.clientFk).toEqual(address.clientFk);
expect(claim.clientFk).toEqual(clientId);
expect(claim.clientFk).toEqual(address.clientFk);
expect(originalTicket.nickname).toEqual(address.nickname);
expect(refundTicket.nickname).toEqual(address.nickname);
});
it('should be thrown an error if the new address is not belong to the client', async() => {
const addressFk = 1;
try {
await models.Ticket.transferClient(ctx, originalTicketId, clientId, addressFk, options);
fail('Expected an error to be thrown, but none was thrown.');
} catch (e) {
expect(e.message).toEqual('The address does not belong to the client');
}
});
}); });

View File

@ -1,3 +1,4 @@
const UserError = require('vn-loopback/util/user-error');
module.exports = Self => { module.exports = Self => {
Self.remoteMethodCtx('transferClient', { Self.remoteMethodCtx('transferClient', {
description: 'Transferring ticket to another client', description: 'Transferring ticket to another client',
@ -12,6 +13,10 @@ module.exports = Self => {
arg: 'clientFk', arg: 'clientFk',
type: 'number', type: 'number',
required: true, required: true,
}, {
arg: 'addressFk',
type: 'number',
required: false,
}], }],
http: { http: {
path: `/:id/transferClient`, path: `/:id/transferClient`,
@ -19,7 +24,7 @@ module.exports = Self => {
} }
}); });
Self.transferClient = async(ctx, id, clientFk, options) => { Self.transferClient = async(ctx, id, clientFk, addressFk, options) => {
const models = Self.app.models; const models = Self.app.models;
const myOptions = {}; const myOptions = {};
let tx; let tx;
@ -43,10 +48,12 @@ module.exports = Self => {
const client = await models.Client.findById(clientFk, const client = await models.Client.findById(clientFk,
{fields: ['id', 'defaultAddressFk']}, myOptions); {fields: ['id', 'defaultAddressFk']}, myOptions);
const address = await models.Address.findById(client.defaultAddressFk, const address = await models.Address.findById(addressFk ? addressFk : client.defaultAddressFk,
{fields: ['id', 'nickname']}, myOptions); {fields: ['id', 'nickname', 'clientFk']}, myOptions);
const attributes = {clientFk, addressFk: client.defaultAddressFk, nickname: address.nickname}; if (address.clientFk !== clientFk) throw new UserError('The address does not belong to the client');
const attributes = {clientFk, addressFk: address.id, nickname: address.nickname};
const tickets = []; const tickets = [];
const ticketIds = []; const ticketIds = [];