Skip to content

Commit 8f27c23

Browse files
fix(smart-field): smart field should allow to request all fields (#861)
1 parent d6bc7f3 commit 8f27c23

File tree

2 files changed

+89
-2
lines changed

2 files changed

+89
-2
lines changed

src/services/requested-fields-extractor.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ function extractRequestedFieldsForAssociation(associationName, requestedFields,
2727
return requestedFields.map((fieldName) => `${associationName}.${fieldName}`);
2828
}
2929

30+
function extractRequestedSmartField(requestedFields, schema) {
31+
const schemaSmartFields = schema.fields.filter(({ isVirtual }) => isVirtual);
32+
return requestedFields[schema.name].split(',')
33+
.filter((fieldName) => schemaSmartFields.some(({ field }) => field === fieldName));
34+
}
35+
3036
/**
3137
* @param {Record<string, string>} requestedFields
3238
* @param {*} modelOrAssociation
@@ -58,9 +64,12 @@ function extractRequestedFields(requestedFields, modelOrAssociation, schemas) {
5864
const modelFields = requestedFields[modelOrAssociation.name].split(',')
5965
.filter((fieldName) => !requestedFields[fieldName]);
6066

67+
const smartFields = extractRequestedSmartField(requestedFields, schemas[modelOrAssociation.name]);
68+
6169
return Array.from(new Set([
6270
...primaryKeyArray,
6371
...modelFields,
72+
...smartFields,
6473
...allAssociationFields,
6574
]));
6675
}

test/services/requested-fields-extractor.test.js

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,17 @@ describe('services > requested-fields-extractor', () => {
2525
associations: {},
2626
};
2727

28-
const result = extractRequestedFields(fields, model);
28+
const schemas = {
29+
user: {
30+
name: 'user',
31+
fields: [{
32+
field: 'name',
33+
isVirtual: false,
34+
}],
35+
},
36+
};
37+
38+
const result = extractRequestedFields(fields, model, schemas);
2939

3040
expect(result).toStrictEqual(['id', 'name']);
3141
});
@@ -43,7 +53,17 @@ describe('services > requested-fields-extractor', () => {
4353
associations: {},
4454
};
4555

46-
const result = extractRequestedFields(fields, model);
56+
const schemas = {
57+
user: {
58+
name: 'user',
59+
fields: [{
60+
field: 'name',
61+
isVirtual: false,
62+
}],
63+
},
64+
};
65+
66+
const result = extractRequestedFields(fields, model, schemas);
4767

4868
expect(result).toStrictEqual(['id', 'name']);
4969
});
@@ -70,7 +90,15 @@ describe('services > requested-fields-extractor', () => {
7090
};
7191

7292
const schemas = {
93+
user: {
94+
name: 'user',
95+
fields: [{
96+
field: 'name',
97+
isVirtual: false,
98+
}],
99+
},
73100
addresses: {
101+
name: 'addresses',
74102
fields: [{
75103
field: 'street',
76104
isVirtual: false,
@@ -105,7 +133,15 @@ describe('services > requested-fields-extractor', () => {
105133
};
106134

107135
const schemas = {
136+
user: {
137+
name: 'user',
138+
fields: [{
139+
field: 'name',
140+
isVirtual: false,
141+
}],
142+
},
108143
addresses: {
144+
name: 'addresses',
109145
fields: [
110146
{
111147
field: 'street',
@@ -147,7 +183,15 @@ describe('services > requested-fields-extractor', () => {
147183
};
148184

149185
const schemas = {
186+
user: {
187+
name: 'user',
188+
fields: [{
189+
field: 'name',
190+
isVirtual: false,
191+
}],
192+
},
150193
addresses: {
194+
name: 'addresses',
151195
fields: [
152196
{
153197
field: 'street',
@@ -166,4 +210,38 @@ describe('services > requested-fields-extractor', () => {
166210
'homeAddress',
167211
]);
168212
});
213+
214+
it('should include requested smart field', () => {
215+
expect.assertions(1);
216+
217+
const fields = {
218+
user: 'smartField',
219+
};
220+
221+
const model = {
222+
name: 'user',
223+
primaryKeys: { id: null, uid: null },
224+
associations: {},
225+
};
226+
227+
const schemas = {
228+
user: {
229+
name: 'user',
230+
fields: [{
231+
field: 'smartField',
232+
isVirtual: true,
233+
}, {
234+
field: 'anotherSmartField',
235+
isVirtual: true,
236+
}],
237+
},
238+
};
239+
240+
const result = extractRequestedFields(fields, model, schemas);
241+
242+
expect(result).toStrictEqual([
243+
'id',
244+
'smartField',
245+
]);
246+
});
169247
});

0 commit comments

Comments
 (0)