Skip to content

Commit

Permalink
fix: unable to use objectId size higher than 19 on GraphQL API (#7722)
Browse files Browse the repository at this point in the history
mtrezza authored Nov 27, 2021

Unverified

This commit is not signed, but one or more authors requires that any commit attributed to them is signed.
1 parent 2923833 commit 8ee0445
Showing 4 changed files with 35 additions and 10 deletions.
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -35,7 +35,7 @@
"follow-redirects": "1.14.2",
"graphql": "15.6.0",
"graphql-list-fields": "2.0.2",
"graphql-relay": "0.9.0",
"graphql-relay": "0.7.0",
"graphql-tag": "2.12.5",
"graphql-upload": "11.0.0",
"intersect": "1.0.1",
29 changes: 24 additions & 5 deletions spec/ParseGraphQLServer.spec.js
Original file line number Diff line number Diff line change
@@ -2284,8 +2284,7 @@ describe('ParseGraphQLServer', () => {
expect(nodeResult.data.node2.objectId).toBe(obj2.id);
expect(nodeResult.data.node2.someField).toBe('some value 2');
});
// TODO: (moumouls, davimacedo) Fix flaky test
xit('Id inputs should work either with global id or object id', async () => {
it('Id inputs should work either with global id or object id', async () => {
try {
await apolloClient.mutate({
mutation: gql`
@@ -2592,9 +2591,12 @@ describe('ParseGraphQLServer', () => {
.map(value => value.node.someField)
.sort()
).toEqual(['some value 22', 'some value 44']);
expect(
findSecondaryObjectsResult.data.secondaryObjects.edges[0].node.id
).toBeLessThan(findSecondaryObjectsResult.data.secondaryObjects.edges[1].node.id);
// NOTE: Here @davimacedo tried to test RelayID order, but the test is wrong since
// "objectId1" < "objectId2" do not always keep the order when objectId is transformed
// to base64 by Relay
// "SecondaryObject:bBRgmzIRRM" < "SecondaryObject:nTMcuVbATY" true
// base64("SecondaryObject:bBRgmzIRRM"") < base64(""SecondaryObject:nTMcuVbATY"") false
// "U2Vjb25kYXJ5T2JqZWN0OmJCUmdteklSUk0=" < "U2Vjb25kYXJ5T2JqZWN0Om5UTWN1VmJBVFk=" false
expect(
findSecondaryObjectsResult.data.secondaryObjects.edges[0].node.objectId
).toBeLessThan(
@@ -2760,6 +2762,23 @@ describe('ParseGraphQLServer', () => {
handleError(e);
}
});
it('Id inputs should work either with global id or object id with objectId higher than 19', async () => {
await reconfigureServer({ objectIdSize: 20 });
const obj = new Parse.Object('SomeClass');
await obj.save({ name: 'aname', type: 'robot' });
const result = await apolloClient.query({
query: gql`
query getSomeClass($id: ID!) {
someClass(id: $id) {
objectId
id
}
}
`,
variables: { id: obj.id },
});
expect(result.data.someClass.objectId).toEqual(obj.id);
});
});
});

8 changes: 7 additions & 1 deletion src/Adapters/Storage/Postgres/PostgresStorageAdapter.js
Original file line number Diff line number Diff line change
@@ -1807,7 +1807,13 @@ export class PostgresStorageAdapter implements StorageAdapter {
if (key === 'ACL') {
memo.push('_rperm');
memo.push('_wperm');
} else if (key.length > 0) {
} else if (
key.length > 0 &&
// Remove selected field not referenced in the schema
// Relation is not a column in postgres
// $score is a Parse special field and is also not a column
((schema.fields[key] && schema.fields[key].type !== 'Relation') || key === '$score')
) {
memo.push(key);
}
return memo;

0 comments on commit 8ee0445

Please sign in to comment.