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
  • Loading branch information
mtrezza authored Nov 27, 2021
1 parent 2923833 commit 8ee0445
Show file tree
Hide file tree
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
Expand Up @@ -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",
Expand Down
29 changes: 24 additions & 5 deletions spec/ParseGraphQLServer.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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);
});
});
});

Expand Down
8 changes: 7 additions & 1 deletion src/Adapters/Storage/Postgres/PostgresStorageAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 8ee0445

Please sign in to comment.