From cee9327ac9fb5dec1e2c6293a4955390db059ff8 Mon Sep 17 00:00:00 2001 From: Arnaud MONCEL Date: Mon, 31 Jan 2022 09:42:35 +0100 Subject: [PATCH] fix: return data of field who have the same name as model (#880) --- src/services/requested-fields-extractor.js | 6 +- .../requested-fields-extractor.test.js | 63 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/src/services/requested-fields-extractor.js b/src/services/requested-fields-extractor.js index a7ee3895..ddfa5406 100644 --- a/src/services/requested-fields-extractor.js +++ b/src/services/requested-fields-extractor.js @@ -61,8 +61,10 @@ function extractRequestedFields(requestedFields, modelOrAssociation, schemas) { )) .flat(); - const modelFields = requestedFields[modelOrAssociation.name].split(',') - .filter((fieldName) => !requestedFields[fieldName]); + const modelFields = requestedFields[modelOrAssociation.name] + .split(',') + .filter((fieldName) => + Object.prototype.hasOwnProperty.call(modelOrAssociation.rawAttributes, fieldName)); const smartFields = extractRequestedSmartField(requestedFields, schemas[modelOrAssociation.name]); diff --git a/test/services/requested-fields-extractor.test.js b/test/services/requested-fields-extractor.test.js index e8bbec52..3e40de05 100644 --- a/test/services/requested-fields-extractor.test.js +++ b/test/services/requested-fields-extractor.test.js @@ -23,6 +23,11 @@ describe('services > requested-fields-extractor', () => { name: 'user', primaryKeys: { id: null, uid: null }, associations: {}, + rawAttributes: { + id: {}, + uid: {}, + name: {}, + }, }; const schemas = { @@ -51,6 +56,11 @@ describe('services > requested-fields-extractor', () => { name: 'user', primaryKeys: { id: null, uid: null }, associations: {}, + rawAttributes: { + id: {}, + uid: {}, + name: {}, + }, }; const schemas = { @@ -68,6 +78,38 @@ describe('services > requested-fields-extractor', () => { expect(result).toStrictEqual(['id', 'name']); }); + it('should include field with same name as the model', () => { + expect.assertions(1); + + const fields = { + user: 'id,user', + }; + + const model = { + name: 'user', + primaryKeys: { id: null }, + associations: {}, + rawAttributes: { + id: {}, + user: {}, + }, + }; + + const schemas = { + user: { + name: 'user', + fields: [{ + field: 'user', + isVirtual: false, + }], + }, + }; + + const result = extractRequestedFields(fields, model, schemas); + + expect(result).toStrictEqual(['id', 'user']); + }); + it('should include all associations\' requested fields', () => { expect.assertions(1); @@ -87,6 +129,11 @@ describe('services > requested-fields-extractor', () => { }, }, }, + rawAttributes: { + id: {}, + uid: {}, + name: {}, + }, }; const schemas = { @@ -130,6 +177,12 @@ describe('services > requested-fields-extractor', () => { }, }, }, + rawAttributes: { + id: {}, + uid: {}, + name: {}, + account: {}, + }, }; const schemas = { @@ -180,6 +233,12 @@ describe('services > requested-fields-extractor', () => { }, }, }, + rawAttributes: { + id: {}, + uid: {}, + name: {}, + account: {}, + }, }; const schemas = { @@ -222,6 +281,10 @@ describe('services > requested-fields-extractor', () => { name: 'user', primaryKeys: { id: null, uid: null }, associations: {}, + rawAttributes: { + id: {}, + uid: {}, + }, }; const schemas = {