Skip to content

Commit

Permalink
[Bug]: route serialize does not extract param off proxy
Browse files Browse the repository at this point in the history
  • Loading branch information
snewcomer committed Feb 1, 2021
1 parent 8959f88 commit a53a0ef
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
4 changes: 3 additions & 1 deletion packages/@ember/-internals/routing/lib/system/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import {
Object as EmberObject,
typeOf,
} from '@ember/-internals/runtime';
import { lookupDescriptor } from '@ember/-internals/utils';
import { isProxy, lookupDescriptor } from '@ember/-internals/utils';
import Controller from '@ember/controller';
import { assert, deprecate, info, isTesting } from '@ember/debug';
import { ROUTER_EVENTS } from '@ember/deprecated-features';
Expand Down Expand Up @@ -63,6 +63,8 @@ export function defaultSerialize(
object[name] = get(model, name);
} else if (/_id$/.test(name)) {
object[name] = get(model, 'id');
} else if (isProxy(model)) {
object[name] = get(model, name);
}
} else {
object = getProperties(model, params);
Expand Down
14 changes: 14 additions & 0 deletions packages/@ember/-internals/routing/tests/system/route_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Service, { inject as injectService } from '@ember/service';
import { Object as EmberObject } from '@ember/-internals/runtime';
import EmberRoute from '../../lib/system/route';
import { defineProperty } from '../../../metal';
import ObjectProxy from '@ember/-internals/runtime/lib/system/object_proxy';

let route, routeOne, routeTwo, lookupHash;

Expand Down Expand Up @@ -280,6 +281,19 @@ moduleFor(
assert.deepEqual(route.serialize(model, ['post_id']), { post_id: 3 }, 'serialized correctly');
}

['@test returns model.id if model is a Proxy'](assert) {
// `key` in target should fail
// let model = new Proxy({ id: 3 }, {
// get(target, prop) { target[prop] },
// has() {
// return false;
// }
// });
let model = ObjectProxy.create({ content: { id: 3 } });

assert.deepEqual(route.serialize(model, ['id']), { id: 3 }, 'serialized Proxy correctly');
}

['@test returns undefined if model is not set'](assert) {
assert.equal(route.serialize(undefined, ['post_id']), undefined, 'serialized correctly');
}
Expand Down

0 comments on commit a53a0ef

Please sign in to comment.