Skip to content

Commit 5727f61

Browse files
Merge pull request #22 from areiterer/fix-single-relation-null
2 parents ac48a58 + 951dd19 commit 5727f61

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

lib/shallow-populate.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,12 +257,14 @@ function setItems (data, include, params, response) {
257257
if (keyHere !== undefined) {
258258
if (Array.isArray(keyHere)) {
259259
if (!asArray) {
260-
_set(item, nameAs, getRelatedItems(keyHere[0], relatedItems, include, params))
260+
const items = getRelatedItems(keyHere[0], relatedItems, include, params)
261+
if (items !== undefined) { _set(item, nameAs, items) }
261262
} else {
262263
_set(item, nameAs, getRelatedItems(keyHere, relatedItems, include, params))
263264
}
264265
} else {
265-
_set(item, nameAs, getRelatedItems(keyHere, relatedItems, include, params))
266+
const items = getRelatedItems(keyHere, relatedItems, include, params)
267+
if (items !== undefined) { _set(item, nameAs, items) }
266268
}
267269
}
268270
})
@@ -280,7 +282,7 @@ function getRelatedItems (ids, relatedItems, include, params) {
280282
const limit = _get(params, 'query.$limit', Math.max)
281283
ids = [].concat(ids || [])
282284
let skipped = 0
283-
let itemOrItems = (asArray) ? [] : {}
285+
let itemOrItems = (asArray) ? [] : undefined
284286

285287
let isDone = false
286288
for (let i = 0, n = relatedItems.length; i < n; i++) {

test/shallow-populate.test.js

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,8 @@ describe('populating thing', () => {
277277
service: 'posts',
278278
nameAs: 'posts',
279279
keyHere: 'postsId',
280-
keyThere: 'id'
280+
keyThere: 'id',
281+
asArray: false
281282
}
282283
}
283284
const context = {
@@ -304,6 +305,43 @@ describe('populating thing', () => {
304305
}
305306
})
306307

308+
it('does nothing if keyHere of related item is null', async () => {
309+
for (const { type, dataResult } of beforeAfter) {
310+
const options = {
311+
include: {
312+
// from: 'users',
313+
service: 'posts',
314+
nameAs: 'posts',
315+
keyHere: 'postsId',
316+
keyThere: 'id',
317+
asArray: false
318+
}
319+
}
320+
const context = {
321+
app: {
322+
service (path) {
323+
return services[path]
324+
}
325+
},
326+
method: 'create',
327+
type,
328+
params: {},
329+
[dataResult]: {
330+
id: '11',
331+
name: 'Dumb Stuff',
332+
postsId: null
333+
}
334+
}
335+
336+
const shallowPopulate = makePopulate(options)
337+
338+
const response = await shallowPopulate(context)
339+
const result = response[dataResult]
340+
341+
assert(!Object.prototype.hasOwnProperty.call(result, 'posts'), `${type}: post should have not been populated`)
342+
}
343+
})
344+
307345
it('populates from local keys dot notation', async () => {
308346
for (const { type, dataResult } of beforeAfter) {
309347
const options = {

0 commit comments

Comments
 (0)