Skip to content

Commit ed86c80

Browse files
authored
fix: unable to use objectId size higher than 19 on GraphQL API (#7627)
1 parent c789f6c commit ed86c80

File tree

4 files changed

+35
-10
lines changed

4 files changed

+35
-10
lines changed

package-lock.json

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"follow-redirects": "1.14.5",
3636
"graphql": "15.7.0",
3737
"graphql-list-fields": "2.0.2",
38-
"graphql-relay": "0.9.0",
38+
"graphql-relay": "0.7.0",
3939
"graphql-tag": "2.12.5",
4040
"graphql-upload": "11.0.0",
4141
"intersect": "1.0.1",

spec/ParseGraphQLServer.spec.js

+24-5
Original file line numberDiff line numberDiff line change
@@ -2287,8 +2287,7 @@ describe('ParseGraphQLServer', () => {
22872287
expect(nodeResult.data.node2.objectId).toBe(obj2.id);
22882288
expect(nodeResult.data.node2.someField).toBe('some value 2');
22892289
});
2290-
// TODO: (moumouls, davimacedo) Fix flaky test
2291-
xit('Id inputs should work either with global id or object id', async () => {
2290+
it('Id inputs should work either with global id or object id', async () => {
22922291
try {
22932292
await apolloClient.mutate({
22942293
mutation: gql`
@@ -2595,9 +2594,12 @@ describe('ParseGraphQLServer', () => {
25952594
.map(value => value.node.someField)
25962595
.sort()
25972596
).toEqual(['some value 22', 'some value 44']);
2598-
expect(
2599-
findSecondaryObjectsResult.data.secondaryObjects.edges[0].node.id
2600-
).toBeLessThan(findSecondaryObjectsResult.data.secondaryObjects.edges[1].node.id);
2597+
// NOTE: Here @davimacedo tried to test RelayID order, but the test is wrong since
2598+
// "objectId1" < "objectId2" do not always keep the order when objectId is transformed
2599+
// to base64 by Relay
2600+
// "SecondaryObject:bBRgmzIRRM" < "SecondaryObject:nTMcuVbATY" true
2601+
// base64("SecondaryObject:bBRgmzIRRM"") < base64(""SecondaryObject:nTMcuVbATY"") false
2602+
// "U2Vjb25kYXJ5T2JqZWN0OmJCUmdteklSUk0=" < "U2Vjb25kYXJ5T2JqZWN0Om5UTWN1VmJBVFk=" false
26012603
expect(
26022604
findSecondaryObjectsResult.data.secondaryObjects.edges[0].node.objectId
26032605
).toBeLessThan(
@@ -2763,6 +2765,23 @@ describe('ParseGraphQLServer', () => {
27632765
handleError(e);
27642766
}
27652767
});
2768+
it('Id inputs should work either with global id or object id with objectId higher than 19', async () => {
2769+
await reconfigureServer({ objectIdSize: 20 });
2770+
const obj = new Parse.Object('SomeClass');
2771+
await obj.save({ name: 'aname', type: 'robot' });
2772+
const result = await apolloClient.query({
2773+
query: gql`
2774+
query getSomeClass($id: ID!) {
2775+
someClass(id: $id) {
2776+
objectId
2777+
id
2778+
}
2779+
}
2780+
`,
2781+
variables: { id: obj.id },
2782+
});
2783+
expect(result.data.someClass.objectId).toEqual(obj.id);
2784+
});
27662785
});
27672786
});
27682787

src/Adapters/Storage/Postgres/PostgresStorageAdapter.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -1807,7 +1807,13 @@ export class PostgresStorageAdapter implements StorageAdapter {
18071807
if (key === 'ACL') {
18081808
memo.push('_rperm');
18091809
memo.push('_wperm');
1810-
} else if (key.length > 0) {
1810+
} else if (
1811+
key.length > 0 &&
1812+
// Remove selected field not referenced in the schema
1813+
// Relation is not a column in postgres
1814+
// $score is a Parse special field and is also not a column
1815+
((schema.fields[key] && schema.fields[key].type !== 'Relation') || key === '$score')
1816+
) {
18111817
memo.push(key);
18121818
}
18131819
return memo;

0 commit comments

Comments
 (0)