From fcc49b47cb2b8c17071e267cf6ef8ab64924f14c Mon Sep 17 00:00:00 2001 From: Chris Thoburn Date: Wed, 15 Dec 2021 01:51:45 -0700 Subject: [PATCH] update test location and add fix --- .../integration/records/create-record-test.js | 19 ++++++++++++++ .../tests/integration/store-test.js | 25 ------------------- packages/model/addon/-private/model.js | 8 ++++-- .../addon/-private/system/ds-model-store.ts | 3 ++- 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/packages/-ember-data/tests/integration/records/create-record-test.js b/packages/-ember-data/tests/integration/records/create-record-test.js index a009d294281..e142412340a 100644 --- a/packages/-ember-data/tests/integration/records/create-record-test.js +++ b/packages/-ember-data/tests/integration/records/create-record-test.js @@ -38,6 +38,25 @@ module('Store.createRecord() coverage', function (hooks) { store = owner.lookup('service:store'); }); + test("createRecord doesn't crash when setter is involved", async function (assert) { + class User extends Model { + @attr() email; + + get name() { + return this.email ? this.email.substring(0, this.email.indexOf('@')) : ''; + } + + set name(value) { + this.email = `${value.toLowerCase()}@ember.js`; + } + } + this.owner.register(`model:user`, User); + const store = this.owner.lookup('service:store'); + + const user = store.createRecord('user', { name: 'Robert' }); + assert.strictEqual(user.email, 'robert@ember.js'); + }); + test('unloading a newly created a record with a sync belongsTo relationship', async function (assert) { let chris = store.push({ data: { diff --git a/packages/-ember-data/tests/integration/store-test.js b/packages/-ember-data/tests/integration/store-test.js index 0e9276fb8d0..6cb265aaf49 100644 --- a/packages/-ember-data/tests/integration/store-test.js +++ b/packages/-ember-data/tests/integration/store-test.js @@ -1,4 +1,3 @@ -import { set } from '@ember/object'; import { run } from '@ember/runloop'; import { settled } from '@ember/test-helpers'; import Ember from 'ember'; @@ -11,7 +10,6 @@ import { setupTest } from 'ember-qunit'; import RESTAdapter from '@ember-data/adapter/rest'; import { REQUEST_SERVICE } from '@ember-data/canary-features'; -import Model, { attr } from '@ember-data/model'; import JSONAPISerializer from '@ember-data/serializer/json-api'; import RESTSerializer from '@ember-data/serializer/rest'; import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; @@ -1344,26 +1342,3 @@ module('integration/store - queryRecord', function (hooks) { } }); }); - -module('integration/store - createRecord', function (hooks) { - setupTest(hooks); - - test("createRecord doesn't crash when setter is involved", async function (assert) { - class User extends Model { - @attr() email; - - get name() { - return this.email ? this.email.substring(0, this.email.indexOf('@')) : ''; - } - - set name(value) { - set(this, 'email', `${value.toLowerCase()}@ember.js`); - } - } - this.owner.register(`model:user`, User); - const store = this.owner.lookup('service:store'); - - const user = store.createRecord('user', { name: 'Robert' }); - assert.strictEqual(user.email, 'robert@ember.js'); - }); -}); diff --git a/packages/model/addon/-private/model.js b/packages/model/addon/-private/model.js index dae8780230c..6a534f96cdf 100644 --- a/packages/model/addon/-private/model.js +++ b/packages/model/addon/-private/model.js @@ -118,8 +118,10 @@ function computeOnce(target, key, desc) { @uses DeprecatedEvented */ class Model extends EmberObject { - init(...args) { - super.init(...args); + init(options = {}) { + const createProps = options._createProps; + delete options._createProps; + super.init(options); if (DEBUG) { if (!this._internalModel) { @@ -132,6 +134,7 @@ class Model extends EmberObject { if (CUSTOM_MODEL_CLASS) { this.___recordState = new RecordState(this); } + this.setProperties(createProps); } /** @@ -2075,6 +2078,7 @@ class Model extends EmberObject { // the values initialized during create to `setUnknownProperty` Model.prototype._internalModel = null; Model.prototype.store = null; +Model.prototype._createProps = null; if (HAS_DEBUG_PACKAGE) { /** diff --git a/packages/store/addon/-private/system/ds-model-store.ts b/packages/store/addon/-private/system/ds-model-store.ts index 41ff62a1da9..5a391b89715 100644 --- a/packages/store/addon/-private/system/ds-model-store.ts +++ b/packages/store/addon/-private/system/ds-model-store.ts @@ -37,9 +37,10 @@ class Store extends CoreStore { let createOptions: any = { store: this, _internalModel: internalModel, + // TODO deprecate allowing unknown args setting + _createProps: createRecordArgs, container: null, }; - Object.assign(createOptions, createRecordArgs); // ensure that `getOwner(this)` works inside a model instance setOwner(createOptions, getOwner(this));