From 06694650d6a50325e936f811eb43dba1e4284374 Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 8 Feb 2017 11:09:04 +0100 Subject: [PATCH] Fix serializer not using attrs before extracting attributes --- addon/mixin.js | 2 ++ tests/dummy/app/models/attr.js | 6 +++++ tests/dummy/app/serializers/application.js | 6 +++++ tests/unit/models/attr-test.js | 31 ++++++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 tests/dummy/app/models/attr.js create mode 100644 tests/unit/models/attr-test.js diff --git a/addon/mixin.js b/addon/mixin.js index f572fbb..a0c3896 100644 --- a/addon/mixin.js +++ b/addon/mixin.js @@ -135,6 +135,8 @@ export default Ember.Mixin.create({ let data; if (payload) { + this.normalizeUsingDeclaredMapping(primaryModelClass, payload); + const attributes = this.extractAttributes(primaryModelClass, payload), relationships = this.extractRelationships(primaryModelClass, payload, included); diff --git a/tests/dummy/app/models/attr.js b/tests/dummy/app/models/attr.js new file mode 100644 index 0000000..7613227 --- /dev/null +++ b/tests/dummy/app/models/attr.js @@ -0,0 +1,6 @@ +import DS from 'ember-data'; + +export default DS.Model.extend({ + admin: DS.attr('boolean'), + occupation: DS.attr('string') +}); diff --git a/tests/dummy/app/serializers/application.js b/tests/dummy/app/serializers/application.js index e5ce4cd..99ad9e7 100644 --- a/tests/dummy/app/serializers/application.js +++ b/tests/dummy/app/serializers/application.js @@ -2,6 +2,12 @@ import HalSerializer from "ember-data-hal-9000/serializer"; import Ember from 'ember'; export default HalSerializer.extend({ + // example attrs from http://emberjs.com/api/data/classes/DS.JSONAPISerializer.html#property_attrs + attrs: { + admin: 'is_admin', + occupation: { key: 'career' } + }, + keyForRelationship(key) { return Ember.String.underscore(key); } diff --git a/tests/unit/models/attr-test.js b/tests/unit/models/attr-test.js new file mode 100644 index 0000000..bcfeecd --- /dev/null +++ b/tests/unit/models/attr-test.js @@ -0,0 +1,31 @@ +import { + test, + moduleForModel +} from "ember-qunit"; +import { stubRequest } from 'ember-cli-fake-server'; +import Ember from "ember"; + +moduleForModel('attr', 'Attributes', { + needs: ['serializer:application', 'adapter:application', 'transform:temperature', + 'model:attribute'] +}); + +test('uses serializers attrs key', function(assert){ + assert.expect(2); + + stubRequest('get', '/attrs/1', (request) => { + request.ok({ + id: 1, + is_admin: true, + career: 'ninja' + }); + }); + + const store = this.store(); + return Ember.run(function(){ + return store.findRecord('attr', 1).then(function(attr){ + assert.equal(attr.get('admin'), true); + assert.equal(attr.get('occupation'), 'ninja'); + }); + }); +});