Skip to content

Commit 42ede51

Browse files
authored
Merge pull request #239 from digitalsadhu/reflexive-relationship
Reflexive relationship
2 parents 882c039 + 067283c commit 42ede51

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed

lib/serializer.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ function parseRelations (data, relations, options) {
256256

257257
var relationship = null
258258

259-
if (!_.isUndefined(fk)) {
259+
if (!_.isUndefined(fk) && relation.modelTo !== relation.modelFrom) {
260260
if (_.isArray(fk)) {
261261
relationship = makeRelations(toType, fk, options)
262262
} else {

test/reflexiveRelationship.test.js

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/* global describe, beforeEach, it */
2+
3+
var request = require('supertest')
4+
var loopback = require('loopback')
5+
var expect = require('chai').expect
6+
var JSONAPIComponent = require('../')
7+
8+
var app, Folder
9+
10+
describe('reflexive relationship', function () {
11+
beforeEach(function (done) {
12+
app = loopback()
13+
app.set('legacyExplorer', false)
14+
var ds = loopback.createDataSource('memory')
15+
// create models
16+
Folder = ds.createModel('folder', {
17+
id: { type: Number, id: true },
18+
name: String
19+
})
20+
21+
Folder.hasMany(Folder, { as: 'children', foreignKey: 'parentId' })
22+
Folder.belongsTo(Folder, { as: 'parent', foreignKey: 'parentId' })
23+
// add models
24+
app.model(Folder)
25+
26+
// make data
27+
Folder.create(
28+
[
29+
{ name: 'Folder 1', parentId: 0 },
30+
{ name: 'Folder 2', parentId: 1 },
31+
{ name: 'Folder 3', parentId: 1 },
32+
{ name: 'Folder 4', parentId: 3 }
33+
],
34+
function (err, foders) {
35+
if (err) console.error(err)
36+
done()
37+
}
38+
)
39+
40+
app.use(loopback.rest())
41+
JSONAPIComponent(app, { restApiRoot: '' })
42+
})
43+
44+
it('should make initial data', function (done) {
45+
request(app).get('/folders').end(function (err, res) {
46+
expect(err).to.equal(null)
47+
expect(res.body.data.length).to.equal(4)
48+
done(err)
49+
})
50+
})
51+
52+
it('should have children', function (done) {
53+
request(app).get('/folders/1/children').end(function (err, res) {
54+
expect(err).to.equal(null)
55+
expect(res.body.data.length).to.equal(2)
56+
expect(res.body.data[0].relationships.children.data).to.equal(undefined)
57+
expect(res.body.data[1].relationships.children.data).to.equal(undefined)
58+
done(err)
59+
})
60+
})
61+
})

0 commit comments

Comments
 (0)