From eeda08c5b37fff67d5f4a13336b17f0f8a816ea3 Mon Sep 17 00:00:00 2001 From: citycide Date: Fri, 24 Feb 2017 20:12:02 -0600 Subject: [PATCH] fix(update): handle type definitions on update Closes #31 --- src/model.js | 6 ++++-- src/types.js | 4 ++++ tests/update.js | 24 +++++++++++++++++++----- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/model.js b/src/model.js index 2395185..9062a98 100644 --- a/src/model.js +++ b/src/model.js @@ -97,8 +97,10 @@ export default class Model { } update (criteria, data, options) { - let query = this.ctx.knex(this.name).update(data) - query = helpers.buildWhere(query, criteria) + let typedData = types.toDefinition(this, data) + let typedCriteria = types.toDefinition(this, criteria) + let query = this.ctx.knex(this.name).update(typedData) + query = helpers.buildWhere(query, typedCriteria) return helpers.runQuery(this.ctx, query) } diff --git a/src/types.js b/src/types.js index bd8f0ed..9d7b3ea 100644 --- a/src/types.js +++ b/src/types.js @@ -36,6 +36,10 @@ export function toKnexSchema (model, options) { // for insertions / updates export function toDefinition (model, object) { + if (util.isArray(object)) { + return toColumnDefinition(model, object[0], object[2]) + } + return util.map(object, (value, column) => { return toColumnDefinition(model, column, value) }) diff --git a/tests/update.js b/tests/update.js index c7b7e5d..abb7fa8 100644 --- a/tests/update.js +++ b/tests/update.js @@ -10,13 +10,21 @@ const db = new Trilogy(filePath) test.before(async () => { await db.model('one', { first: String, - second: String + second: String, + third: Boolean, + array: Array }) - await db.create('one', { - first: 'fee', - second: 'blah' - }) + await Promise.all([ + db.create('one', { + first: 'fee', + second: 'blah' + }), + db.create('one', { + third: false, + array: [1, 2, 3] + }) + ]) }) test.after.always('remove test database file', () => { @@ -28,3 +36,9 @@ test('changes the value of an existing key', async t => { let res = await db.get('one.second', { first: 'fee' }) t.is(res, 'blurg') }) + +test('handles model type definitons correctly', async t => { + await db.update('one', { third: false }, { array: [4, 5, 6] }) + let res = await db.get('one.array', { third: false }) + t.deepEqual(res, [4, 5, 6]) +})