From b025b3518cc004baab985dd2dbbf4aba8f776c1d Mon Sep 17 00:00:00 2001 From: Christoffer Persson Date: Sat, 20 Jun 2015 19:07:49 +0200 Subject: [PATCH] [BUGFIX release] Correctly serialize type for hasMany relationships --- .../lib/serializers/json-api-serializer.js | 2 +- .../adapter/json-api-adapter-test.js | 77 +++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/packages/ember-data/lib/serializers/json-api-serializer.js b/packages/ember-data/lib/serializers/json-api-serializer.js index 67dfc0c5fca..6ff9b243104 100644 --- a/packages/ember-data/lib/serializers/json-api-serializer.js +++ b/packages/ember-data/lib/serializers/json-api-serializer.js @@ -306,7 +306,7 @@ export default JSONSerializer.extend({ let data = hasMany.map((item) => { return { - type: item.modelName, + type: this.payloadKeyFromModelName(item.modelName), id: item.id }; }); diff --git a/packages/ember-data/tests/integration/adapter/json-api-adapter-test.js b/packages/ember-data/tests/integration/adapter/json-api-adapter-test.js index fe5be31df96..7eb834467b0 100644 --- a/packages/ember-data/tests/integration/adapter/json-api-adapter-test.js +++ b/packages/ember-data/tests/integration/adapter/json-api-adapter-test.js @@ -798,3 +798,80 @@ test('update record', function() { }); }); }); + +test('update record - serialize hasMany', function() { + expect(3); + + ajaxResponse([{ + data: { + type: 'users', + id: '1' + } + }]); + + env.registry.register('serializer:user', DS.JSONAPISerializer.extend({ + attrs: { + handles: { serialize: true } + } + })); + + run(function() { + var user = store.push({ data: { + type: 'user', + id: '1', + attributes: { + firstName: 'Yehuda', + lastName: 'Katz' + } + } }); + + var githubHandle = store.push({ data: { + type: 'github-handle', + id: '2', + attributes: { + username: 'wycats' + } + } }); + + var twitterHandle = store.push({ data: { + type: 'twitter-handle', + id: '3', + attributes: { + nickname: '@wycats' + } + } }); + + user.set('firstName', 'Yehuda!'); + + user.get('handles').then(function(handles) { + handles.addObject(githubHandle); + handles.addObject(twitterHandle); + + user.save().then(function() { + equal(passedUrl[0], '/users/1'); + equal(passedVerb[0], 'PATCH'); + deepEqual(passedHash[0], { + data: { + data : { + type: 'users', + id: '1', + attributes: { + 'first-name': 'Yehuda!', + 'last-name': 'Katz' + }, + relationships: { + handles: { + data: [ + { type: 'github-handles', id: '2' }, + { type: 'twitter-handles', id: '3' } + ] + } + } + } + } + }); + }); + + }); + }); +});