diff --git a/package.json b/package.json index 01fae977..93d66a2f 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "@glimmer/tracking": "^1.0.0", "ember-auto-import": "^1.5.2", "ember-cli-babel": "^7.19.0", - "validated-changeset": "~0.7.1" + "validated-changeset": "~0.8.0" }, "devDependencies": { "@ember/optional-features": "^1.0.0", diff --git a/tests/integration/components/changeset-test.js b/tests/integration/helpers/changeset-test.js similarity index 100% rename from tests/integration/components/changeset-test.js rename to tests/integration/helpers/changeset-test.js diff --git a/tests/integration/main-test.js b/tests/integration/main-test.js index f8f9becb..8a1c98d3 100644 --- a/tests/integration/main-test.js +++ b/tests/integration/main-test.js @@ -93,6 +93,25 @@ module('Integration | main', function(hooks) { await testBasicBelongsTo.call(this, assert, 'sync-user'); }); + test('can call prepare with belongsTo', async function(assert) { + let user = this.createUser('sync-user', false); + let changeset = Changeset(user); + let profile = this.store.createRecord('profile', { firstName: 'Terry', lastName: 'Bubblewinkles', nickname: 't' }); + + changeset.set('profile', profile); + changeset.prepare((changes) => { + let modified = {}; + + for (let key in changes) { + modified[key] = changes[key]; + } + + return modified; + }); + + assert.equal(changeset.get('profile').get('firstName'), 'Terry', 'firstName after set'); + }); + async function testSaveUser(assert, userType) { assert.expect(1); diff --git a/tests/unit/changeset-test.js b/tests/unit/changeset-test.js index c27932cc..4d9c47c9 100644 --- a/tests/unit/changeset-test.js +++ b/tests/unit/changeset-test.js @@ -2,6 +2,7 @@ import { Changeset, EmberChangeset, Changeset as ChangesetFactory } from 'ember- import { settled } from '@ember/test-helpers'; import { module, test, todo } from 'qunit'; import { setupTest } from 'ember-qunit'; +import { lookupValidator } from 'validated-changeset'; import EmberObject, { get, @@ -1843,6 +1844,28 @@ module('Unit | Utility | changeset', function(hooks) { assert.equal(get(dummyChangeset, 'isValid'), false, 'should have 1 error'); }); + test('#validate works with validator class', async function(assert) { + class PersonalValidator { + _validate() { + return 'oh no'; + } + validate() { + return this._validate(); + } + } + const validatorMap = { + name: new PersonalValidator(), + }; + + let dummyChangeset = Changeset(dummyModel, lookupValidator(validatorMap), validatorMap); + dummyChangeset.name = null; + + await dummyChangeset.validate(); + + assert.deepEqual(dummyChangeset.get('error.name.validation'), 'oh no'); + assert.deepEqual(dummyChangeset.get('errors.length'), 1); + }); + /** * #addError */ diff --git a/yarn.lock b/yarn.lock index d2ba12d6..7c38aab5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12980,10 +12980,10 @@ validate-npm-package-name@~2.2.2: dependencies: builtins "0.0.7" -validated-changeset@~0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/validated-changeset/-/validated-changeset-0.7.1.tgz#cb2c11c93d5acfb2286e5bfca07f4a516f83c844" - integrity sha512-BbFK98Cp7WunEwLOW/oAi6qDZZFBOLkae0q5RZ3ne8ZkwB1sskOYfF5IqQhqubwxRb4emMhA2UgN5rdfOaZxXQ== +validated-changeset@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/validated-changeset/-/validated-changeset-0.8.0.tgz#eb915401135dbd45d313ff96c6a805292619b609" + integrity sha512-cAsDM7hyNwn/ae1CQ39a3/FoR607TerIPZeXfp/N2UyYGe2Hg8qMMmWQ0GozP5PcKlrVAW5LhYsRDY8hpljONg== vary@~1.1.2: version "1.1.2"