From 5914531c599f648602697beb457142c5e9ca8013 Mon Sep 17 00:00:00 2001 From: Romain Lanz Date: Sat, 7 Dec 2019 09:46:12 +0100 Subject: [PATCH] fix(BaseModel): ensure we are saving when creating --- adonis-typings/model.ts | 2 +- src/Orm/BaseModel/index.ts | 5 +++-- test/orm/base-model.spec.ts | 18 ++++++++++++------ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/adonis-typings/model.ts b/adonis-typings/model.ts index 93f7e272..7d7c46d5 100644 --- a/adonis-typings/model.ts +++ b/adonis-typings/model.ts @@ -646,7 +646,7 @@ declare module '@ioc:Adonis/Lucid/Model' { this: T, values: ModelObject, options?: ModelAdapterOptions, - ): InstanceType + ): Promise> /** * Find one using the primary key diff --git a/src/Orm/BaseModel/index.ts b/src/Orm/BaseModel/index.ts index 38e64636..0a49d686 100644 --- a/src/Orm/BaseModel/index.ts +++ b/src/Orm/BaseModel/index.ts @@ -350,12 +350,13 @@ export class BaseModel implements ModelContract { * Returns a fresh instance of model by applying attributes * to the model instance */ - public static create ( + public static async create ( this: T, values: ModelObject, - ): InstanceType { + ): Promise> { const instance = new this() instance.fill(values) + await instance.save() return instance as InstanceType } diff --git a/test/orm/base-model.spec.ts b/test/orm/base-model.spec.ts index 9ace5c2b..305b78bb 100644 --- a/test/orm/base-model.spec.ts +++ b/test/orm/base-model.spec.ts @@ -1174,7 +1174,8 @@ test.group('Base Model | relations', (group) => { await db.manager.closeAll() }) - test('set hasOne relation', (assert) => { + test('set hasOne relation', async (assert) => { + const adapter = new FakeAdapter() class Profile extends BaseModel { @column() public username: string @@ -1192,8 +1193,9 @@ test.group('Base Model | relations', (group) => { } const user = new User() + Profile.$adapter = adapter user.$consumeAdapterResult({ id: 1 }) - user.$setRelated('profile', Profile.create({ username: 'virk' })) + user.$setRelated('profile', await Profile.create({ username: 'virk' })) assert.deepEqual(user.profile.username, 'virk') assert.instanceOf(user.$preloaded.profile, Profile) @@ -1225,7 +1227,8 @@ test.group('Base Model | relations', (group) => { assert.deepEqual(user.$preloaded, {}) }) - test('serialize relation toJSON', (assert) => { + test('serialize relation toJSON', async (assert) => { + const adapter = new FakeAdapter() class Profile extends BaseModel { @column() public username: string @@ -1243,8 +1246,9 @@ test.group('Base Model | relations', (group) => { } const user = new User() + Profile.$adapter = adapter user.$consumeAdapterResult({ id: 1 }) - user.$setRelated('profile', Profile.create({ username: 'virk' })) + user.$setRelated('profile', await Profile.create({ username: 'virk' })) assert.deepEqual(user.toJSON(), { id: 1, @@ -1254,7 +1258,8 @@ test.group('Base Model | relations', (group) => { }) }) - test('serialize relation toJSON with custom serializeAs key', (assert) => { + test('serialize relation toJSON with custom serializeAs key', async (assert) => { + const adapter = new FakeAdapter() class Profile extends BaseModel { @column() public username: string @@ -1272,8 +1277,9 @@ test.group('Base Model | relations', (group) => { } const user = new User() + Profile.$adapter = adapter user.$consumeAdapterResult({ id: 1 }) - user.$setRelated('profile', Profile.create({ username: 'virk' })) + user.$setRelated('profile', await Profile.create({ username: 'virk' })) assert.deepEqual(user.toJSON(), { id: 1,