UNPKG

kysely-mapper

Version:

Flexible Kysely-based utility for mapping between tables and objects

211 lines 10.7 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_mappers_1 = require("./utils/test-mappers"); 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('inserting with transformation', () => { it('transforms users for insertion without transforming return', () => __awaiter(void 0, void 0, void 0, function* () { const insertTransformMapper = (0, test_mappers_1.createInsertTransformMapper)(db); const insertReturn = yield insertTransformMapper .insert() .returnOne(test_objects_1.insertedUser1); const readUser1 = yield insertTransformMapper .select({ id: insertReturn.id, }) .returnOne(); expect(readUser1 === null || readUser1 === void 0 ? void 0 : readUser1.name).toEqual(`${test_objects_1.insertedUser1.firstName} ${test_objects_1.insertedUser1.lastName}`); yield insertTransformMapper .insert() .returnAll([test_objects_1.insertedUser2, test_objects_1.insertedUser3]); const readUsers = yield insertTransformMapper .select('id', '>', insertReturn.id) .returnAll(); expect(readUsers.length).toEqual(2); expect(readUsers[0].name).toEqual(`${test_objects_1.insertedUser2.firstName} ${test_objects_1.insertedUser2.lastName}`); expect(readUsers[1].name).toEqual(`${test_objects_1.insertedUser3.firstName} ${test_objects_1.insertedUser3.lastName}`); })); it('transforms insertion return into object without transforming insertion', () => __awaiter(void 0, void 0, void 0, function* () { const insertReturnTransformMapper = new table_mapper_1.TableMapper(db, 'users', { insertReturnColumns: ['id', 'name'], updateReturnColumns: ['id', 'name'], }).withTransforms({ insertReturnTransform: (source, returns) => { const names = returns.name.split(' '); return new test_types_1.ReturnedUser(returns.id, names[0], names[1], source.handle, source.email || null); }, countTransform: (count) => Number(count), }); const insertReturn = yield insertReturnTransformMapper .insert() .returnOne(test_objects_1.userRow1); expect(insertReturn).toEqual(test_objects_1.insertReturnedUser1); const insertReturns = yield insertReturnTransformMapper .insert() .returnAll([test_objects_1.userRow2, test_objects_1.userRow3]); expect(insertReturns).toEqual([test_objects_1.insertReturnedUser2, test_objects_1.insertReturnedUser3]); // test that updates return table rows const updatedUser = yield insertReturnTransformMapper .update({ id: insertReturn.id }) .returnOne({ name: 'Updated Name' }); expect(updatedUser).toEqual({ id: insertReturn.id, name: 'Updated Name' }); // ensure return type can be accessed as a row ((_) => { })(updatedUser.name); })); it('transforms insertion return into primitive without transforming insertion', () => __awaiter(void 0, void 0, void 0, function* () { const insertReturnTransformMapper = new table_mapper_1.TableMapper(db, 'users', { insertReturnColumns: ['id'], }).withTransforms({ insertReturnTransform: (_source, returns) => returns.id, countTransform: (count) => Number(count), }); const insertReturn = yield insertReturnTransformMapper .insert() .returnOne(test_objects_1.userRow1); expect(insertReturn).toEqual(1); // ensure return type can be accessed as a number ((_) => { })(insertReturn); const insertReturns = yield insertReturnTransformMapper .insert() .returnAll([test_objects_1.userRow2, test_objects_1.userRow3]); expect(insertReturns).toEqual([2, 3]); // ensure return type can be accessed as a number ((_) => { })(insertReturns[0]); })); it("transforms insertion and insertion return, columns is ['*']", () => __awaiter(void 0, void 0, void 0, function* () { expect.assertions(5); const insertAndReturnTransformMapper = new table_mapper_1.TableMapper(db, 'users', { insertReturnColumns: ['id'], }).withTransforms({ insertTransform: (source, columns) => { expect(columns).toEqual(['*']); return { name: `${source.firstName} ${source.lastName}`, handle: source.handle, email: source.email, }; }, insertReturnTransform: (source, returns) => new test_types_1.ReturnedUser(returns.id, source.firstName, source.lastName, source.handle, source.email), countTransform: (count) => Number(count), }); const insertReturn = yield insertAndReturnTransformMapper .insert() .returnOne(test_objects_1.insertedUser1); expect(insertReturn).toEqual(test_objects_1.insertReturnedUser1); // ensure return type can be accessed as a ReturnedUser ((_) => { })(insertReturn.firstName); const insertReturns = yield insertAndReturnTransformMapper .insert() .returnAll([test_objects_1.insertedUser2, test_objects_1.insertedUser3]); expect(insertReturns).toEqual([test_objects_1.insertReturnedUser2, test_objects_1.insertReturnedUser3]); // ensure return type can be accessed as a ReturnedUser ((_) => { })(insertReturns[0].firstName); })); it('returns SelectedObject with updates returning rows', () => __awaiter(void 0, void 0, void 0, function* () { const transformMapper = new table_mapper_1.TableMapper(db, 'users', { insertReturnColumns: ['id', 'name'], updateReturnColumns: ['id', 'name'], }).withTransforms({ insertReturnTransform: (source, results) => { const names = results.name.split(' '); return test_types_1.SelectedUser.create(results.id, { firstName: names[0], lastName: names[1], handle: source.handle, email: source.email || null, }); }, updateTransform: (source) => { if (source instanceof test_types_1.SelectedUser) { return { name: `${source.firstName} ${source.lastName}`, handle: source.handle, email: source.email, }; } return source; }, selectTransform: (row) => { const names = row.name.split(' '); return test_types_1.SelectedUser.create(row.id, { firstName: names[0], lastName: names[1], handle: row.handle, email: row.email, }); }, }); // test returnOne() const names1 = test_objects_1.userRow1.name.split(' '); const expectedUser1 = test_types_1.SelectedUser.create(1, { firstName: names1[0], lastName: names1[1], handle: test_objects_1.userRow1.handle, email: test_objects_1.userRow1.email, }); const insertReturn = yield transformMapper.insert().returnOne(test_objects_1.userRow1); expect(insertReturn).toEqual(expectedUser1); // ensure return type can be accessed as a SelectedUser ((_) => { })(insertReturn.firstName); const readUser = yield transformMapper .select({ id: insertReturn.id, }) .returnOne(); expect(readUser).toEqual(expectedUser1); // test returnAll() const names2 = test_objects_1.userRow2.name.split(' '); const expectedUser2 = test_types_1.SelectedUser.create(2, { firstName: names2[0], lastName: names2[1], handle: test_objects_1.userRow2.handle, email: test_objects_1.userRow2.email, }); const names3 = test_objects_1.userRow3.name.split(' '); const expectedUser3 = test_types_1.SelectedUser.create(3, { firstName: names3[0], lastName: names3[1], handle: test_objects_1.userRow3.handle, email: test_objects_1.userRow3.email, }); const insertReturns = yield transformMapper .insert() .returnAll([test_objects_1.userRow2, test_objects_1.userRow3]); expect(insertReturns).toEqual([expectedUser2, expectedUser3]); // ensure return type can be accessed as a SelectedUser ((_) => { })(insertReturns[0].firstName); ((_) => { })(insertReturns[1].firstName); const readUsers = yield transformMapper .select('id', '>', insertReturn.id) .returnAll(); expect(readUsers).toEqual([expectedUser2, expectedUser3]); // test that updates return rows const updateReturn = yield transformMapper .update({ id: 1 }) .returnOne(expectedUser2); expect(updateReturn).toEqual({ id: 1, name: `${expectedUser2.firstName} ${expectedUser2.lastName}`, }); // ensure return type can be accessed as a row ((_) => { })(updateReturn.name); })); }); //# sourceMappingURL=insert-transforms.test.js.map