diff --git a/addons/api/addon/models/base.js b/addons/api/addon/models/base.js index a680bce7a..e9a773d7c 100644 --- a/addons/api/addon/models/base.js +++ b/addons/api/addon/models/base.js @@ -1,7 +1,17 @@ import Model from '@ember-data/model'; +import { belongsTo } from '@ember-data/model'; import { computed } from '@ember/object'; export default class BaseModel extends Model { + + // =relationships + + /** + * Scope of this resource, if any. + * @type {ScopeModel} + */ + @belongsTo('scope', {async: false, inverse: false}) scope; + // =attributes /** diff --git a/addons/api/addon/models/scope.js b/addons/api/addon/models/scope.js index b62ca94ba..4030f7852 100644 --- a/addons/api/addon/models/scope.js +++ b/addons/api/addon/models/scope.js @@ -24,7 +24,7 @@ export default class ScopeModel extends GeneratedScopeModel { */ @hasMany('scope', {inverse: 'parentScope'}) childrenScopes; - // =computed + // =attributes /** * @type {boolean} diff --git a/addons/api/tests/unit/models/base-test.js b/addons/api/tests/unit/models/base-test.js index 670168d48..0a48639a9 100644 --- a/addons/api/tests/unit/models/base-test.js +++ b/addons/api/tests/unit/models/base-test.js @@ -11,6 +11,35 @@ module('Unit | Model | base', function (hooks) { assert.ok(model); }); + test('it may have a scope relationship', function (assert) { + assert.expect(1); + const store = this.owner.lookup('service:store'); + store.push({ + data: { + id: 'o_1', + type: 'scope' + } + }); + store.push({ + data: { + id: '123abc', + type: 'project', + attributes: {}, + relationships: { + scope: { + data: { + id: 'o_1', + type: 'scope' + } + } + } + } + }); + const scope = store.peekRecord('scope', 'o_1'); + const model = store.peekRecord('project', '123abc'); + assert.equal(model.scope, scope); + }); + test('it has a displayName attribute', function (assert) { assert.expect(3); const store = this.owner.lookup('service:store');