nestjs-api-tools
Version:
Wrappers for convenient API development including validation, logging and i18n wrappers
126 lines • 5.38 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const operators_1 = require("./operators");
const faker_1 = __importDefault(require("faker"));
const rxjs_1 = require("rxjs");
jest.mock('class-transformer', () => ({
...jest.requireActual('class-transformer'),
classToPlain: jest.fn(),
}));
describe('operators', () => {
describe('mapResponseData', () => {
it('должен возвращать атрибут data из объекта AxiosResponse', (done) => {
const response = {
data: faker_1.default.helpers.createCard(),
};
(0, rxjs_1.of)(response)
.pipe(operators_1.mapResponseData)
.subscribe((data) => {
expect(data).toEqual(response.data);
done();
});
});
});
describe('throwExceptionIfEntityNotFound', () => {
it('должен кидать исключение, если переданный параметр - null', () => {
try {
(0, operators_1.throwExceptionIfEntityNotFound)(null, new Error());
}
catch (e) {
expect(e).toBeInstanceOf(Error);
}
expect.hasAssertions();
});
it('должен возвращать переданный параметр', () => {
expect((0, operators_1.throwExceptionIfEntityNotFound)({}, new Error())).toEqual({});
});
});
describe('createOrUpdateEntityWithOptimisticLock', () => {
let entity;
let repository;
beforeEach(() => {
entity = {};
repository = {
save: jest.fn(),
update: jest.fn(),
};
});
it('должен создавать сущность, если она не передана', async () => {
const emptyEntity = {};
const saveSpy = jest
.spyOn(repository, 'save')
.mockImplementation(async () => entity);
const updateSpy = jest
.spyOn(repository, 'update')
.mockImplementation(async () => ({ affected: 1 }));
await (0, operators_1.createOrUpdateEntityWithOptimisticLock)(repository, null, {}, 1, emptyEntity, new Error());
expect(saveSpy).toBeCalledWith({
...emptyEntity,
version: 1,
});
expect(updateSpy).toBeCalled();
});
it('должен вызывать updateEntityWithOptimisticLock для сущности', async () => {
const saveSpy = jest
.spyOn(repository, 'save')
.mockImplementation(async () => entity);
jest
.spyOn(repository, 'update')
.mockImplementation(async () => ({ affected: 1 }));
await (0, operators_1.createOrUpdateEntityWithOptimisticLock)(repository, entity, {}, 1, {}, new Error());
expect(saveSpy).not.toBeCalled();
});
});
describe('updateEntityWithOptimisticLock', () => {
let entity;
let repository;
beforeEach(() => {
entity = {
id: faker_1.default.datatype.number(),
};
repository = {
update: jest.fn(),
};
});
it('должен возвращать сущность без изменений, если ее нечем обновлять', async () => {
const updateSpy = jest
.spyOn(repository, 'update')
.mockImplementation(async () => ({ affected: 1 }));
await (0, operators_1.updateEntityWithOptimisticLock)(repository, entity, null, 1, new Error());
expect(updateSpy).not.toBeCalled();
});
it('должен кидать исключение, если сущность с такой версией уже нет', async () => {
jest
.spyOn(repository, 'update')
.mockImplementation(async () => ({ affected: 0 }));
try {
await (0, operators_1.updateEntityWithOptimisticLock)(repository, entity, {}, 1, new Error());
}
catch (e) {
expect(e).toBeInstanceOf(Error);
}
expect.hasAssertions();
});
it('должен обновлять сущность и уведичивать ее версию', async () => {
const data = {
[faker_1.default.lorem.word()]: faker_1.default.datatype.number(),
};
const version = faker_1.default.datatype.number();
const updateSpy = jest
.spyOn(repository, 'update')
.mockImplementation(async () => ({ affected: 1 }));
await (0, operators_1.updateEntityWithOptimisticLock)(repository, entity, data, version, new Error());
expect(updateSpy).toBeCalledWith({
id: entity.id,
version,
}, {
...data,
version: version + 1,
});
});
});
});
//# sourceMappingURL=operators.spec.js.map