Skip to content

Commit 95f3d7a

Browse files
committed
fix: graphql query transformer drop the condition when where argument has false value on object field
1 parent 0dc2843 commit 95f3d7a

File tree

2 files changed

+113
-1
lines changed

2 files changed

+113
-1
lines changed

spec/ParseGraphQLServer.spec.js

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9515,6 +9515,118 @@ describe('ParseGraphQLServer', () => {
95159515
}
95169516
});
95179517

9518+
it('should support where argument on object field that contains boolean value', async () => {
9519+
try {
9520+
const someObjectFieldValue = {
9521+
foo: { bar: 'baz', qux: true },
9522+
number: 10,
9523+
};
9524+
9525+
await apolloClient.mutate({
9526+
mutation: gql`
9527+
mutation CreateClass($schemaFields: SchemaFieldsInput) {
9528+
createClass(input: { name: "SomeClass", schemaFields: $schemaFields }) {
9529+
clientMutationId
9530+
}
9531+
}
9532+
`,
9533+
variables: {
9534+
schemaFields: {
9535+
addObjects: [{ name: 'someObjectField' }],
9536+
},
9537+
},
9538+
context: {
9539+
headers: {
9540+
'X-Parse-Master-Key': 'test',
9541+
},
9542+
},
9543+
});
9544+
await parseGraphQLServer.parseGraphQLSchema.schemaCache.clear();
9545+
9546+
const schema = await new Parse.Schema('SomeClass').get();
9547+
expect(schema.fields.someObjectField.type).toEqual('Object');
9548+
9549+
const createResult = await apolloClient.mutate({
9550+
mutation: gql`
9551+
mutation CreateSomeObject($fields: CreateSomeClassFieldsInput) {
9552+
createSomeClass(input: { fields: $fields }) {
9553+
someClass {
9554+
id
9555+
}
9556+
}
9557+
}
9558+
`,
9559+
variables: {
9560+
fields: {
9561+
someObjectField: someObjectFieldValue,
9562+
},
9563+
},
9564+
});
9565+
9566+
const whereWithQuxFalse = {
9567+
someObjectField: {
9568+
notEqualTo: { key: 'foo.bar', value: 'bat' },
9569+
greaterThan: { key: 'number', value: 9 },
9570+
lessThan: { key: 'number', value: 11 },
9571+
equalTo: { key: 'foo.qux', value: false },
9572+
},
9573+
};
9574+
const whereWithQuxTrue = {
9575+
someObjectField: {
9576+
...whereWithQuxFalse.someObjectField,
9577+
equalTo: { key: 'foo.qux', value: true },
9578+
},
9579+
};
9580+
const queryResult = await apolloClient.query({
9581+
query: gql`
9582+
query GetSomeObject(
9583+
$id: ID!
9584+
$whereWithQuxFalse: SomeClassWhereInput
9585+
$whereWithQuxTrue: SomeClassWhereInput
9586+
) {
9587+
someClass(id: $id) {
9588+
id
9589+
someObjectField
9590+
}
9591+
someClasses(where: $whereWithQuxFalse) {
9592+
edges {
9593+
node {
9594+
id
9595+
someObjectField
9596+
}
9597+
}
9598+
}
9599+
someClassesWithQuxTrue: someClasses(where: $whereWithQuxTrue) {
9600+
edges {
9601+
node {
9602+
id
9603+
someObjectField
9604+
}
9605+
}
9606+
}
9607+
}
9608+
`,
9609+
variables: {
9610+
id: createResult.data.createSomeClass.someClass.id,
9611+
whereWithQuxFalse,
9612+
whereWithQuxTrue,
9613+
},
9614+
});
9615+
9616+
const { someClass: getResult, someClasses, someClassesWithQuxTrue } = queryResult.data;
9617+
9618+
const { someObjectField } = getResult;
9619+
expect(typeof someObjectField).toEqual('object');
9620+
expect(someObjectField).toEqual(someObjectFieldValue);
9621+
9622+
// Checks class query results
9623+
expect(someClasses.edges.length).toEqual(0);
9624+
expect(someClassesWithQuxTrue.edges.length).toEqual(1);
9625+
} catch (e) {
9626+
handleError(e);
9627+
}
9628+
});
9629+
95189630
it('should support object composed queries', async () => {
95199631
try {
95209632
const someObjectFieldValue1 = {

src/GraphQL/transformers/query.js

Lines changed: 1 addition & 1 deletion
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)