diff --git a/addon/-private/live-query.js b/addon/-private/live-query.js index 163a3eee..2644ede4 100644 --- a/addon/-private/live-query.js +++ b/addon/-private/live-query.js @@ -26,13 +26,14 @@ export default ReadOnlyArrayProxy.extend({ content: computed('_content', { get() { if (get(this, '_content') === null) { - let results = this._sourceCache.query(this._query); - - let content; - if (isArray(results)) { - content = results.map(r => this._identityMap.lookup(r)) - } else if (typeof results === 'object') { - content = Object.keys(results).map(r => this._identityMap.lookup(results[r])) + let result = this._sourceCache.query(this._query); + let content = this._identityMap.lookupQueryResult(this._query, result); + if (content) { + if (!isArray(content)) { + content = [content]; + } + } else { + content = []; } // eslint-disable-next-line ember/no-side-effects set(this, '_content', content); diff --git a/tests/integration/cache-test.js b/tests/integration/cache-test.js index 730df280..1d17dea6 100644 --- a/tests/integration/cache-test.js +++ b/tests/integration/cache-test.js @@ -75,6 +75,19 @@ module('Integration - Cache', function(hooks) { assert.notOk(planets.includes(jupiter)); }); + test('liveQuery - findRelatedRecord updates when matching record is added', async function(assert) { + const callisto = await store.addRecord({ type: 'moon', name: 'Callisto' }); + const planets = cache.liveQuery(q => q.findRelatedRecord(callisto, 'planet')); + assert.equal(planets.length, 0); + + const jupiter = await store.addRecord({ id: 'jupiter', type: 'planet', name: 'Jupiter' }); + callisto.set('planet', jupiter); + await store.requestQueue.process(); + + assert.equal(planets.length, 1); + assert.ok(planets.includes(jupiter)); + }); + test('#retrieveAttribute', async function(assert) { const jupiter = await store.addRecord({type: 'planet', name: 'Jupiter'}); assert.equal(cache.retrieveAttribute(jupiter, 'name'), 'Jupiter');