kysely-mapper
Version:
Flexible Kysely-based utility for mapping between tables and objects
86 lines • 4.46 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const test_setup_1 = require("./utils/test-setup");
const test_mappers_1 = require("./utils/test-mappers");
const test_objects_1 = require("./utils/test-objects");
const table_mapper_1 = require("../mappers/table-mapper");
let db;
let userMapperReturningID;
beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
db = yield (0, test_setup_1.createDB)();
userMapperReturningID = (0, test_mappers_1.createUserMapperReturningID)(db);
}));
beforeEach(() => (0, test_setup_1.resetDB)(db));
afterAll(() => (0, test_setup_1.destroyDB)(db));
describe('updating specific columns', () => {
it('subsets updating columns, excluding ID', () => __awaiter(void 0, void 0, void 0, function* () {
const insertReturns = yield userMapperReturningID.insert().returnAll(test_objects_1.USERS);
const updateValues = { id: 100, name: 'Sue Rex', email: 'rex@abc.def' };
const subsetQuery = userMapperReturningID
.update('id', '=', insertReturns[0].id)
.columns(['name']); // allows readonly array
const updateReturns = yield subsetQuery.returnAll(updateValues);
expect(updateReturns).toEqual([{ id: insertReturns[0].id }]);
const readUsers = yield userMapperReturningID
.select('id', '=', insertReturns[0].id)
.returnOne();
expect(readUsers).toEqual({
id: insertReturns[0].id,
name: 'Sue Rex',
email: test_objects_1.USERS[0].email,
handle: test_objects_1.USERS[0].handle,
});
}));
it('subsets updating columns, including ID', () => __awaiter(void 0, void 0, void 0, function* () {
const insertReturns = yield userMapperReturningID.insert().returnAll(test_objects_1.USERS);
const updateValues = { id: 100, name: 'Sue Rex', email: 'rex@abc.def' };
const subsetQuery = userMapperReturningID
.update('id', '=', insertReturns[0].id)
.columns(['id', 'name', 'email']);
const updateReturns = yield subsetQuery.returnAll(updateValues);
expect(updateReturns).toEqual([{ id: 100 }]);
const readUsers = yield userMapperReturningID
.select('id', '=', 100)
.returnOne();
expect(readUsers).toEqual({
id: 100,
name: 'Sue Rex',
email: 'rex@abc.def',
handle: test_objects_1.USERS[0].handle,
});
}));
it('requires all subsetted columns to be updated', () => __awaiter(void 0, void 0, void 0, function* () {
const insertReturns = yield userMapperReturningID.insert().returnAll(test_objects_1.USERS);
const updateValues = { name: 'Sue Rex' };
const subsetQuery = userMapperReturningID
.update('id', '=', insertReturns[0].id)
.columns(['name', 'email']);
expect(() => subsetQuery.returnAll(updateValues)).rejects.toThrow(`column 'email' missing`);
const success = yield subsetQuery.run(Object.assign(Object.assign({}, updateValues), { email: null }));
expect(success).toBe(true);
}));
it('provides updateTransform with column subset', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
const mapper = new table_mapper_1.TableMapper(db, 'users').withTransforms({
updateTransform: (source, columns) => {
expect(columns).toEqual(['name', 'handle']);
return source;
},
});
yield mapper.update().columns(['name', 'handle']).run({
name: 'John Doe',
handle: 'johndoe',
email: 'jdoe@abc.def',
});
}));
});
//# sourceMappingURL=update-columns.test.js.map
;