Last active
November 17, 2015 14:09
-
-
Save amk221/d6e3626ea3a5201d8d14 to your computer and use it in GitHub Desktop.
Ember Data test for numeric serialized IDs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// jscs:disable maximumLineLength | |
import { test, moduleFor } from 'ember-qunit'; | |
import Model from 'ember-data/model'; | |
import run from 'ember-runloop'; | |
import DS from 'ember-data'; | |
import ApplicationSerializer from 'capsule/pods/application/serializer'; | |
import { hasMany, belongsTo } from 'ember-data/relationships'; | |
const { EmbeddedRecordsMixin } = DS; | |
moduleFor('serializer:application'); | |
test('#serialize numeric IDs', function(assert) { | |
assert.expect(1); | |
this.registry.register('serializer:primary-model', | |
ApplicationSerializer.extend(EmbeddedRecordsMixin, { | |
attrs: { | |
embeddedHasManys: { | |
embedded: 'always' | |
}, | |
embeddedBelongsTo: { | |
embedded: 'always' | |
} | |
} | |
})); | |
this.registry.register('model:primary-model', Model.extend({ | |
embeddedHasManys: hasMany('embeddedHasMany'), | |
embeddedBelongsTo: belongsTo('embeddedBelongsTo'), | |
sideloadedHasManys: hasMany('sideloadedHasMany'), | |
sideloadedBelongsTo: belongsTo('sideloadedBelongsTo') | |
})); | |
this.registry.register('model:embedded-has-many', Model); | |
this.registry.register('model:embedded-belongs-to', Model); | |
this.registry.register('model:sideloaded-has-many', Model); | |
this.registry.register('model:sideloaded-belongs-to', Model); | |
let store = this.container.lookup('service:store'); | |
let primaryModel; | |
let embeddedHasMany; | |
let embeddedBelongsTo; | |
let sideloadedHasMany; | |
let sideloadedBelongsTo; | |
run(function() { | |
primaryModel = store.createRecord('primary-model', {id: '1'}); | |
embeddedHasMany = store.createRecord('embedded-has-many', {id: '2'}); | |
embeddedBelongsTo = store.createRecord('embedded-belongs-to', {id: '3'}); | |
sideloadedHasMany = store.createRecord('sideloaded-belongs-to', {id: '4'}); | |
sideloadedBelongsTo = store.createRecord('sideloaded-belongs-to', {id: '5'}); | |
primaryModel.get('embeddedHasManys').pushObject(embeddedHasMany); | |
primaryModel.set('embeddedBelongsTo', embeddedBelongsTo); | |
primaryModel.get('sideloadedHasManys').pushObject(sideloadedHasMany); | |
primaryModel.set('sideloadedBelongsTo', sideloadedBelongsTo); | |
}); | |
let json = primaryModel.serialize({ includeId: true }); | |
assert.deepEqual(json, { | |
id: 1, | |
embeddedHasManys: [{ id: 2 }], | |
embeddedBelongsTo: { id: 3 }, | |
sideloadedHasManys: [4], | |
sideloadedBelongsTo: 5 | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import RESTSerializer from 'ember-data/serializers/rest'; | |
const { isArray } = Array; | |
/** | |
* Extend's Ember Data's REST Serializer to make all IDs Numbers. | |
* @issue https://github.com/emberjs/data/issues/3078 | |
*/ | |
export default RESTSerializer.extend({ | |
_serializeId(id) { | |
return parseInt(id, 10); | |
}, | |
serialize(snapshot, options) { | |
let json = this._super(snapshot, options); | |
if (json.id && options.includeId) { | |
json.id = this._serializeId(json.id); | |
} | |
return json; | |
}, | |
serializeHasMany: function(snapshot, json, relationship) { | |
this._super(snapshot, json, relationship); | |
let ids = json[relationship.key]; | |
if (isArray(ids)) { | |
ids.map((id, index) => ids[index] = this._serializeId(id)); | |
} | |
}, | |
serializeBelongsTo: function(snapshot, json, relationship) { | |
this._super(snapshot, json, relationship); | |
let key = relationship.key; | |
json[key] = this._serializeId(json[key]); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment