Skip to content

Commit 32c7ab6

Browse files
yomybabyMoumouls
andcommitted
fix: graphql query transformer drop the condition when where argument has false or 0 value on object field
- Change test style - Remove unnecessary assertion Co-authored-by: Antoine Cormouls <[email protected]>
1 parent 42c9543 commit 32c7ab6

File tree

2 files changed

+121
-1
lines changed

2 files changed

+121
-1
lines changed

spec/ParseGraphQLServer.spec.js

+120
Original file line numberDiff line numberDiff line change
@@ -9516,6 +9516,126 @@ describe('ParseGraphQLServer', () => {
95169516
}
95179517
});
95189518

9519+
it('should support where argument on object field that contains false boolean value or 0 number value', async () => {
9520+
try {
9521+
const someObjectFieldValue = {
9522+
foo: { bar: 'baz', qux: true, quux: 100 },
9523+
number: 10,
9524+
};
9525+
9526+
const object = new Parse.Object('SomeClass');
9527+
await object.save({
9528+
someObjectField: someObjectFieldValue,
9529+
});
9530+
9531+
const whereWithQuxFalse = {
9532+
someObjectField: {
9533+
notEqualTo: { key: 'foo.bar', value: 'bat' },
9534+
greaterThan: { key: 'number', value: 9 },
9535+
lessThan: { key: 'number', value: 11 },
9536+
equalTo: { key: 'foo.qux', value: false },
9537+
},
9538+
};
9539+
const whereWithQuxTrue = {
9540+
someObjectField: {
9541+
...whereWithQuxFalse.someObjectField,
9542+
equalTo: { key: 'foo.qux', value: true },
9543+
},
9544+
};
9545+
const whereWithQuux0 = {
9546+
someObjectField: {
9547+
notEqualTo: { key: 'foo.bar', value: 'bat' },
9548+
greaterThan: { key: 'number', value: 9 },
9549+
lessThan: { key: 'number', value: 11 },
9550+
equalTo: { key: 'foo.quux', value: 0 },
9551+
},
9552+
};
9553+
const whereWithQuux100 = {
9554+
someObjectField: {
9555+
notEqualTo: { key: 'foo.bar', value: 'bat' },
9556+
greaterThan: { key: 'number', value: 9 },
9557+
lessThan: { key: 'number', value: 11 },
9558+
equalTo: { key: 'foo.quux', value: 100 },
9559+
},
9560+
};
9561+
const queryResult = await apolloClient.query({
9562+
query: gql`
9563+
query GetSomeObject(
9564+
$id: ID!
9565+
$whereWithQuxFalse: SomeClassWhereInput
9566+
$whereWithQuxTrue: SomeClassWhereInput
9567+
$whereWithQuux0: SomeClassWhereInput
9568+
$whereWithQuux100: SomeClassWhereInput
9569+
) {
9570+
someClass(id: $id) {
9571+
id
9572+
someObjectField
9573+
}
9574+
someClasses(where: $whereWithQuxFalse) {
9575+
edges {
9576+
node {
9577+
id
9578+
someObjectField
9579+
}
9580+
}
9581+
}
9582+
someClassesWithQuxTrue: someClasses(where: $whereWithQuxTrue) {
9583+
edges {
9584+
node {
9585+
id
9586+
someObjectField
9587+
}
9588+
}
9589+
}
9590+
someClassesWithQuux0: someClasses(where: $whereWithQuux0) {
9591+
edges {
9592+
node {
9593+
id
9594+
someObjectField
9595+
}
9596+
}
9597+
}
9598+
someClassesWithQuux100: someClasses(where: $whereWithQuux100) {
9599+
edges {
9600+
node {
9601+
id
9602+
someObjectField
9603+
}
9604+
}
9605+
}
9606+
}
9607+
`,
9608+
variables: {
9609+
id: object.id,
9610+
whereWithQuxFalse,
9611+
whereWithQuxTrue,
9612+
whereWithQuux0,
9613+
whereWithQuux100,
9614+
},
9615+
});
9616+
9617+
const {
9618+
someClass: getResult,
9619+
someClasses,
9620+
someClassesWithQuxTrue,
9621+
someClassesWithQuux0,
9622+
someClassesWithQuux100,
9623+
} = queryResult.data;
9624+
9625+
const { someObjectField } = getResult;
9626+
expect(someObjectField).toEqual(someObjectFieldValue);
9627+
9628+
// Checks class query results
9629+
expect(someClasses.edges.length).toEqual(0);
9630+
expect(someClassesWithQuxTrue.edges.length).toEqual(1);
9631+
9632+
expect(someClassesWithQuux0.edges.length).toEqual(0);
9633+
expect(someClassesWithQuux100.edges.length).toEqual(1);
9634+
} catch (e) {
9635+
handleError(e);
9636+
}
9637+
});
9638+
95199639
it('should support object composed queries', async () => {
95209640
try {
95219641
const someObjectFieldValue1 = {

src/GraphQL/transformers/query.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ const transformQueryConstraintInputToParse = (
108108
* }
109109
* }
110110
*/
111-
if (fieldValue.key && fieldValue.value && parentConstraints && parentFieldName) {
111+
if (fieldValue.key && fieldValue.value !== undefined && parentConstraints && parentFieldName) {
112112
delete parentConstraints[parentFieldName];
113113
parentConstraints[`${parentFieldName}.${fieldValue.key}`] = {
114114
...parentConstraints[`${parentFieldName}.${fieldValue.key}`],

0 commit comments

Comments
 (0)