diff --git a/addon/serializers/embedded-records-mixin.js b/addon/serializers/embedded-records-mixin.js index 8285321a3e0..70801baf119 100644 --- a/addon/serializers/embedded-records-mixin.js +++ b/addon/serializers/embedded-records-mixin.js @@ -608,5 +608,6 @@ export default Ember.Mixin.create({ let serializer = store.serializerFor(modelName); return serializer.normalize(modelClass, relationshipHash, null); - } + }, + isEmbeddedRecordsMixin: true }); diff --git a/addon/serializers/json-api.js b/addon/serializers/json-api.js index a811ed4b5c0..3c940b1113f 100644 --- a/addon/serializers/json-api.js +++ b/addon/serializers/json-api.js @@ -500,6 +500,11 @@ const JSONAPISerializer = JSONSerializer.extend({ runInDebug(function() { JSONAPISerializer.reopen({ + willMergeMixin(props) { + warn('The JSONAPISerializer does not work with the EmbeddedRecordsMixin because the JSON API spec does not describe how to format embedded resources.', !props.isEmbeddedRecordsMixin, { + id: 'ds.serializer.embedded-records-mixin-not-supported' + }); + }, warnMessageForUndefinedType() { return 'Encountered a resource object with an undefined type (resolved resource using ' + this.constructor.toString() + ')'; }, diff --git a/tests/integration/serializers/json-api-serializer-test.js b/tests/integration/serializers/json-api-serializer-test.js index 0cbdb900577..ac13e34c6b5 100644 --- a/tests/integration/serializers/json-api-serializer-test.js +++ b/tests/integration/serializers/json-api-serializer-test.js @@ -260,3 +260,10 @@ test('Serializer should respect the attrs hash when serializing attributes with assert.equal(payload.data.attributes['company_name'], 'Tilde Inc.'); }); + + +testInDebug('JSON warns when combined with EmbeddedRecordsMixin', function(assert) { + assert.expectWarning(function() { + DS.JSONAPISerializer.extend(DS.EmbeddedRecordsMixin).create(); + }, /The JSONAPISerializer does not work with the EmbeddedRecordsMixin/); +});