mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-23 23:58:31 -05:00
FIX: Don't remove the id
from the input to createRecord
This commit is contained in:
parent
ee2780466c
commit
21684c98be
2 changed files with 17 additions and 2 deletions
|
@ -268,7 +268,9 @@ export default Ember.Object.extend({
|
||||||
|
|
||||||
_hydrate(type, obj, root) {
|
_hydrate(type, obj, root) {
|
||||||
if (!obj) { throw "Can't hydrate " + type + " of `null`"; }
|
if (!obj) { throw "Can't hydrate " + type + " of `null`"; }
|
||||||
if (!obj.id) { throw "Can't hydrate " + type + " without an `id`"; }
|
|
||||||
|
const id = obj.id;
|
||||||
|
if (!id) { throw "Can't hydrate " + type + " without an `id`"; }
|
||||||
|
|
||||||
root = root || obj;
|
root = root || obj;
|
||||||
|
|
||||||
|
@ -278,13 +280,14 @@ export default Ember.Object.extend({
|
||||||
this._hydrateEmbedded(type, obj, root);
|
this._hydrateEmbedded(type, obj, root);
|
||||||
}
|
}
|
||||||
|
|
||||||
const existing = fromMap(type, obj.id);
|
const existing = fromMap(type, id);
|
||||||
if (existing === obj) { return existing; }
|
if (existing === obj) { return existing; }
|
||||||
|
|
||||||
if (existing) {
|
if (existing) {
|
||||||
delete obj.id;
|
delete obj.id;
|
||||||
const klass = this.container.lookupFactory('model:' + type) || RestModel;
|
const klass = this.container.lookupFactory('model:' + type) || RestModel;
|
||||||
existing.setProperties(klass.munge(obj));
|
existing.setProperties(klass.munge(obj));
|
||||||
|
obj.id = id;
|
||||||
return existing;
|
return existing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,18 @@ test('createRecord without an `id`', function() {
|
||||||
ok(!widget.get('id'), 'there is no id');
|
ok(!widget.get('id'), 'there is no id');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("createRecord doesn't modify the input `id` field", () => {
|
||||||
|
const store = createStore();
|
||||||
|
const widget = store.createRecord('widget', {id: 1, name: 'hello'});
|
||||||
|
|
||||||
|
const obj = { id: 1, name: 'something' };
|
||||||
|
|
||||||
|
const other = store.createRecord('widget', obj);
|
||||||
|
equal(widget, other, 'returns the same record');
|
||||||
|
equal(widget.name, 'something', 'it updates the properties');
|
||||||
|
equal(obj.id, 1, 'it does not remove the id from the input');
|
||||||
|
});
|
||||||
|
|
||||||
test('createRecord without attributes', function() {
|
test('createRecord without attributes', function() {
|
||||||
const store = createStore();
|
const store = createStore();
|
||||||
const widget = store.createRecord('widget');
|
const widget = store.createRecord('widget');
|
||||||
|
|
Loading…
Reference in a new issue