98 lines
2.8 KiB
JavaScript
98 lines
2.8 KiB
JavaScript
|
const {models} = require('vn-loopback/server/server');
|
||
|
const LoopBackContext = require('loopback-context');
|
||
|
|
||
|
describe('entry_isEditable trigger', () => {
|
||
|
const activeCtx = {
|
||
|
accessToken: {userId: 5},
|
||
|
http: {
|
||
|
req: {
|
||
|
headers: {origin: 'http://localhost'}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
const ctx = {req: activeCtx};
|
||
|
const entryId = 1;
|
||
|
let tx;
|
||
|
let options;
|
||
|
let entry;
|
||
|
|
||
|
beforeEach(async() => {
|
||
|
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({active: ctx.req});
|
||
|
tx = await models.Entry.beginTransaction({});
|
||
|
options = {transaction: tx};
|
||
|
|
||
|
entry = await models.Entry.findById(entryId, null, options);
|
||
|
});
|
||
|
|
||
|
afterEach(async() => {
|
||
|
await tx.rollback();
|
||
|
});
|
||
|
|
||
|
async function prepareEntry(isBooked, typeFk) {
|
||
|
let newCreated = Date.vnNew();
|
||
|
await entry.updateAttributes({isBooked, typeFk}, options);
|
||
|
await entry.updateAttributes({dated: newCreated}, options);
|
||
|
}
|
||
|
|
||
|
it('should throw an error when entry is booked and typeFk is null', async() => {
|
||
|
let error;
|
||
|
try {
|
||
|
await prepareEntry(true, null);
|
||
|
} catch (e) {
|
||
|
error = e;
|
||
|
}
|
||
|
|
||
|
expect(error.message).toContain(`Entry ${entryId} is not editable`);
|
||
|
});
|
||
|
|
||
|
it('should throw an error when entry is booked and typeFk is not informal', async() => {
|
||
|
let error;
|
||
|
try {
|
||
|
const type = await models.EntryType.findOne({where: {isInformal: false}}, options);
|
||
|
await prepareEntry(true, type.code);
|
||
|
} catch (e) {
|
||
|
error = e;
|
||
|
}
|
||
|
|
||
|
expect(error.message).toContain(`Entry ${entryId} is not editable`);
|
||
|
});
|
||
|
|
||
|
it('should not throw an error when entry is booked and typeFk is informal', async() => {
|
||
|
let error;
|
||
|
try {
|
||
|
const type = await models.EntryType.findOne({where: {isInformal: true}}, options);
|
||
|
await prepareEntry(true, type.code);
|
||
|
} catch (e) {
|
||
|
error = e;
|
||
|
}
|
||
|
|
||
|
expect(error).toBeUndefined();
|
||
|
});
|
||
|
|
||
|
it('should not throw an error when entry is not booked', async() => {
|
||
|
let error;
|
||
|
try {
|
||
|
const type = await models.EntryType.findOne({}, options);
|
||
|
await prepareEntry(false, type.code);
|
||
|
} catch (e) {
|
||
|
error = e;
|
||
|
}
|
||
|
|
||
|
expect(error).toBeUndefined();
|
||
|
});
|
||
|
|
||
|
it('should not throw an error when @isModeInventory is true', async() => {
|
||
|
let error;
|
||
|
try {
|
||
|
await models.Application.rawSql('SET @isModeInventory = TRUE;', null, options);
|
||
|
await prepareEntry(true, null);
|
||
|
} catch (e) {
|
||
|
error = e;
|
||
|
} finally {
|
||
|
await models.Application.rawSql('SET @isModeInventory = FALSE;', null, options);
|
||
|
}
|
||
|
|
||
|
expect(error).toBeUndefined();
|
||
|
});
|
||
|
});
|