From b9cfe82b470769b489f35fb58f6825c2c026d5d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1z=C3=A1r=20Viktor?= Date: Tue, 27 Sep 2016 10:13:21 +0200 Subject: [PATCH] Fix inheritance associations --- dist/package.json | 2 +- package.json | 2 +- src/Types/EntityContext.js | 4 ++-- test/unit-tests/ODataV4ReadTests.js | 35 ++++++++++++++++++++++++++++- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/dist/package.json b/dist/package.json index bdece214..de410753 100644 --- a/dist/package.json +++ b/dist/package.json @@ -1,6 +1,6 @@ { "name": "jaydata", - "version": "1.5.8", + "version": "1.5.9", "description": "Cross-platform HTML5 data-management, JavaScript Language Query (JSLQ) support for OData, SQLite, WebSQL, IndexedDB, YQL and Facebook (packaged for Node.JS)", "keywords": [ "HTML5 data management", diff --git a/package.json b/package.json index 3735e080..570ef75f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jaydata", - "version": "1.5.8", + "version": "1.5.9", "description": "Cross-platform HTML5 data-management, JavaScript Language Query (JSLQ) support for OData, SQLite, WebSQL, IndexedDB, YQL and Facebook (packaged for Node.JS)", "keywords": [ "HTML5 data management", diff --git a/src/Types/EntityContext.js b/src/Types/EntityContext.js index 8b0d3cfd..5cbbd608 100644 --- a/src/Types/EntityContext.js +++ b/src/Types/EntityContext.js @@ -611,7 +611,7 @@ $data.Class.define('$data.EntityContext', null, null, this._addNavigationPropertyDefinition(dbEntityInstanceDefinition, memDef, memDef.name); var associationType = memDef.inverseProperty === '$$unbound' ? '$$unbound' : '0..1'; - var association = this._addAssociationElement(storageModel.LogicalType, associationType, memDef.name, refereedStorageModel.LogicalType, "*", memDef.inverseProperty); + var association = this._addAssociationElement(memDef.definedBy, associationType, memDef.name, refereedStorageModel.LogicalType, "*", memDef.inverseProperty); storageModel.Associations[memDef.name] = association; storageModel.Associations.push(association); }, @@ -656,7 +656,7 @@ $data.Class.define('$data.EntityContext', null, null, this._addNavigationPropertyDefinition(dbEntityInstanceDefinition, memDef, memDef.name); - var association = this._addAssociationElement(storageModel.LogicalType, + var association = this._addAssociationElement(memDef.definedBy, memDef.required ? "0..1" : "1", memDef.name, refereedStorageModel.LogicalType, diff --git a/test/unit-tests/ODataV4ReadTests.js b/test/unit-tests/ODataV4ReadTests.js index 59caca4b..642c71ee 100644 --- a/test/unit-tests/ODataV4ReadTests.js +++ b/test/unit-tests/ODataV4ReadTests.js @@ -539,7 +539,7 @@ describe('OData protocol tests', function () { }) }) - describe.only('inheritance', () => { + describe('inheritance', () => { it('read', () => { return ctx.GenericArticles.toArray().then((articles) => { expect(articles.filter(it => it.Id == 1)[0].getType()).to.equal($data('Inheritance.PublicArticle')); @@ -567,6 +567,39 @@ describe('OData protocol tests', function () { ctx.prepareRequest = t; return p; }); + + it('include 1..*', () => { + var q = ctx.GenericArticles.include('RelatedAuthors').toTraceString(); + expect(q.queryText).to.equal('/GenericArticles?$expand=Inheritance.PublicArticle/RelatedAuthors'); + }); + + it('include 1..1', () => { + $data.Entity.extend('myBaseClass', { + id: { type: 'int', computed: true, key: true } + }); + + $data('myBaseClass').extend('myInheritedClass', { + association: { type: 'anotherInheritedClass', inverseProperty: 'inverse', required: true } + }); + + $data.Entity.extend('anotherClass', { + foobar: { type: 'string' } + }); + + $data.Entity.extend('anotherInheritedClass', { + inverse: { type: 'myInheritedClass', inverseProperty: 'association' } + }); + + $data.EntityContext.extend('myInheritanceContext', { + mySet: { type: $data.EntitySet, elementType: 'myBaseClass' } + }); + + var ctx = new ($data('myInheritanceContext'))('http://myodataservice.com'); + return ctx.onReady().then(() => { + var q = ctx.mySet.include('association').toTraceString(); + expect(q.queryText).to.equal('/mySet?$expand=myInheritedClass/association'); + }); + }); }); })