UNPKG

kysely-mapper

Version:

Flexible Kysely-based utility for mapping between tables and objects

178 lines 9.15 kB
"use strict"; 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 table_mapper_1 = require("../mappers/table-mapper"); const test_setup_1 = require("./utils/test-setup"); const test_objects_1 = require("./utils/test-objects"); const test_types_1 = require("./utils/test-types"); let db; beforeAll(() => __awaiter(void 0, void 0, void 0, function* () { db = yield (0, test_setup_1.createDB)(); })); beforeEach(() => (0, test_setup_1.resetDB)(db)); afterAll(() => (0, test_setup_1.destroyDB)(db)); describe('updating with transformation', () => { it('transforms users for update without transforming return', () => __awaiter(void 0, void 0, void 0, function* () { const mapper = new table_mapper_1.TableMapper(db, 'users', { insertReturnColumns: ['id'], updateReturnColumns: ['id'], }).withTransforms({ updateTransform: (source) => ({ name: `${source.firstName} ${source.lastName}`, handle: source.handle, email: source.email, }), }); const insertReturns = yield mapper .insert() .returnAll([test_objects_1.userRow1, test_objects_1.userRow2, test_objects_1.userRow3]); const updatingUser1 = test_types_1.UpdatingUser.create(0, Object.assign({}, test_objects_1.userObject1, { firstName: 'Suzanne' })); const updateReturns = yield mapper .update(({ or, cmpr }) => or([ cmpr('id', '=', insertReturns[0].id), cmpr('id', '=', insertReturns[2].id), ])) .returnAll(updatingUser1); expect(updateReturns).toEqual([ { id: insertReturns[0].id }, { id: insertReturns[2].id }, ]); const readUsers = yield mapper .select() .modify((qb) => qb.orderBy('id')) .returnAll(); expect(readUsers).toEqual([ Object.assign({}, test_objects_1.userRow1, { id: insertReturns[0].id, name: 'Suzanne Smith', }), Object.assign({}, test_objects_1.userRow2, { id: insertReturns[1].id }), Object.assign({}, test_objects_1.userRow1, { id: insertReturns[2].id, name: 'Suzanne Smith', }), ]); })); it('transforms update return into object without transforming update', () => __awaiter(void 0, void 0, void 0, function* () { const updateReturnTransformMapper = new table_mapper_1.TableMapper(db, 'users', { insertReturnColumns: ['id'], updateReturnColumns: ['id'], }).withTransforms({ updateReturnTransform: (source, returns) => new test_types_1.ReturnedUser(returns.id, source.name ? source.name.split(' ')[0] : '(first)', source.name ? source.name.split(' ')[1] : '(last)', source.handle ? source.handle : '(handle)', source.email ? source.email : '(email)'), }); const insertReturn = yield updateReturnTransformMapper .insert() .returnOne(test_objects_1.userRow1); const updateReturn1 = yield updateReturnTransformMapper .update({ id: insertReturn.id }) .returnAll({ name: 'Suzanne Smith' }); expect(updateReturn1).toEqual([ new test_types_1.ReturnedUser(insertReturn.id, 'Suzanne', 'Smith', '(handle)', '(email)'), ]); // Ensure the returned value is accessible as a ReturnedUser ((_) => { })(updateReturn1[0].firstName); const updateReturn2 = yield updateReturnTransformMapper .update({ id: insertReturn.id }) .returnOne({ name: 'Suzanne Smithy' }); expect(updateReturn2).toEqual(new test_types_1.ReturnedUser(insertReturn.id, 'Suzanne', 'Smithy', '(handle)', '(email)')); // Ensure the returned value is accessible as a ReturnedUser ((_) => { })(updateReturn2.firstName); })); it('transforms update return into primitive without transforming update', () => __awaiter(void 0, void 0, void 0, function* () { const updateReturnTransformMapper = new table_mapper_1.TableMapper(db, 'users', { insertReturnColumns: ['id'], updateReturnColumns: ['id'], }).withTransforms({ insertReturnTransform: (_source, returns) => returns.id, updateReturnTransform: (_source, returns) => returns.id, }); const insertReturn = yield updateReturnTransformMapper .insert() .returnOne(test_objects_1.userRow1); const updateReturn1 = yield updateReturnTransformMapper .update({ id: insertReturn }) .returnAll({ name: 'Suzanne Smith' }); expect(updateReturn1).toEqual([1]); // Ensure the returned value is accessible as a number ((_) => { })(updateReturn1[0]); const updateReturn2 = yield updateReturnTransformMapper .update({ id: insertReturn }) .returnOne({ name: 'Suzanne Smithy' }); expect(updateReturn2).toEqual(1); // Ensure the returned value is accessible as a number ((_) => { })(updateReturn2); })); it("transforms update and update return, columns is ['*']", () => __awaiter(void 0, void 0, void 0, function* () { expect.assertions(2); const updateAndReturnTransformMapper = new table_mapper_1.TableMapper(db, 'users', { insertReturnColumns: ['id'], updateReturnColumns: ['id'], }).withTransforms({ updateTransform: (source, columns) => { expect(columns).toEqual(['*']); return { name: `${source.firstName} ${source.lastName}`, handle: source.handle, email: source.email, }; }, updateReturnTransform: (source, returns) => new test_types_1.ReturnedUser(returns.id, source.firstName, source.lastName, source.handle, source.email), }); const insertReturn = yield updateAndReturnTransformMapper .insert() .returnOne(test_objects_1.userRow1); const updateReturn = yield updateAndReturnTransformMapper .update({ id: insertReturn.id }) .returnAll(test_types_1.UpdatingUser.create(0, test_objects_1.userObject1)); expect(updateReturn).toEqual([ new test_types_1.ReturnedUser(insertReturn.id, test_objects_1.userObject1.firstName, test_objects_1.userObject1.lastName, test_objects_1.userObject1.handle, test_objects_1.userObject1.email), ]); // Ensure the returned value is accessible as a ReturnedUser ((_) => { })(updateReturn[0].firstName); })); it('transforms a union of updating object types', () => __awaiter(void 0, void 0, void 0, function* () { const mapper = new table_mapper_1.TableMapper(db, 'users', { keyColumns: ['id'], }).withTransforms({ updateTransform: (source) => source instanceof test_types_1.UpdatingUser ? { name: `${source.firstName} ${source.lastName}`, handle: source.handle, email: source.email, } : source, }); const insertReturn = yield mapper.insert().returnOne(test_objects_1.userRow1); // test with UpdatingUser yield mapper .update({ id: insertReturn.id }) .columns(['name']) .run(test_types_1.UpdatingUser.create(0, test_objects_1.userObject1)); const readUser1 = yield mapper.select(insertReturn.id).returnOne(); expect(readUser1).toEqual({ id: insertReturn.id, name: `${test_objects_1.userObject1.firstName} ${test_objects_1.userObject1.lastName}`, email: test_objects_1.userRow1.email, handle: test_objects_1.userRow1.handle, }); // test with Updateable<Users> const newName = 'Suzanne Smith Something'; yield mapper.update({ id: insertReturn.id }).run({ name: newName }); const readUser2 = yield mapper.select(insertReturn.id).returnOne(); expect(readUser2).toEqual({ id: insertReturn.id, name: newName, email: test_objects_1.userRow1.email, handle: test_objects_1.userRow1.handle, }); })); }); //# sourceMappingURL=update-transform.test.js.map