From e458be2d8bab1b62dfbf3414bfb4ed3a0a57fad2 Mon Sep 17 00:00:00 2001 From: Antoine Cormouls Date: Fri, 9 Oct 2020 11:58:32 +0200 Subject: [PATCH] transform input types also on user mutations --- package-lock.json | 3 ++- spec/ParseGraphQLServer.spec.js | 33 +++++++++++++++++++++++++++ src/GraphQL/loaders/usersMutations.js | 17 ++++++++++++-- 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c1f9735fed..08c5429864 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5248,7 +5248,8 @@ "crypto-js": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", - "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==", + "optional": true }, "css-select": { "version": "1.2.0", diff --git a/spec/ParseGraphQLServer.spec.js b/spec/ParseGraphQLServer.spec.js index 34cd8a8f11..bac3e418a6 100644 --- a/spec/ParseGraphQLServer.spec.js +++ b/spec/ParseGraphQLServer.spec.js @@ -7235,7 +7235,9 @@ describe('ParseGraphQLServer', () => { const clientMutationId = uuidv4(); const userSchema = new Parse.Schema('_User'); userSchema.addString('someField'); + userSchema.addPointer('aPointer', '_User'); await userSchema.update(); + await parseGraphQLServer.parseGraphQLSchema.databaseController.schemaCache.clear(); const result = await apolloClient.mutate({ mutation: gql` @@ -7246,6 +7248,10 @@ describe('ParseGraphQLServer', () => { sessionToken user { someField + aPointer { + id + username + } } } } @@ -7257,6 +7263,13 @@ describe('ParseGraphQLServer', () => { fields: { username: 'user1', password: 'user1', + aPointer: { + createAndLink: { + username: 'user2', + password: 'user2', + someField: 'someValue2', + }, + }, someField: 'someValue', }, }, @@ -7266,6 +7279,10 @@ describe('ParseGraphQLServer', () => { expect(result.data.signUp.clientMutationId).toEqual(clientMutationId); expect(result.data.signUp.viewer.sessionToken).toBeDefined(); expect(result.data.signUp.viewer.user.someField).toEqual('someValue'); + expect(result.data.signUp.viewer.user.aPointer.id).toBeDefined(); + expect(result.data.signUp.viewer.user.aPointer.username).toEqual( + 'user2' + ); expect(typeof result.data.signUp.viewer.sessionToken).toBe('string'); }); @@ -7282,6 +7299,7 @@ describe('ParseGraphQLServer', () => { }); userSchema.addString('someField'); + userSchema.addPointer('aPointer', '_User'); await userSchema.update(); await parseGraphQLServer.parseGraphQLSchema.databaseController.schemaCache.clear(); const result = await apolloClient.mutate({ @@ -7293,6 +7311,10 @@ describe('ParseGraphQLServer', () => { sessionToken user { someField + aPointer { + id + username + } } } } @@ -7309,6 +7331,13 @@ describe('ParseGraphQLServer', () => { }, fields: { someField: 'someValue', + aPointer: { + createAndLink: { + username: 'user2', + password: 'user2', + someField: 'someValue2', + }, + }, }, }, }, @@ -7324,6 +7353,10 @@ describe('ParseGraphQLServer', () => { expect(typeof result.data.logInWith.viewer.sessionToken).toBe( 'string' ); + expect(result.data.logInWith.viewer.user.aPointer.id).toBeDefined(); + expect(result.data.logInWith.viewer.user.aPointer.username).toEqual( + 'user2' + ); }); it('should log the user in', async () => { diff --git a/src/GraphQL/loaders/usersMutations.js b/src/GraphQL/loaders/usersMutations.js index 09d66bd90e..34f58205fc 100644 --- a/src/GraphQL/loaders/usersMutations.js +++ b/src/GraphQL/loaders/usersMutations.js @@ -9,6 +9,7 @@ import UsersRouter from '../../Routers/UsersRouter'; import * as objectsMutations from '../helpers/objectsMutations'; import { OBJECT } from './defaultGraphQLTypes'; import { getUserFromSessionToken } from './usersQueries'; +import { transformTypes } from '../transformers/mutation'; const usersRouter = new UsersRouter(); @@ -41,9 +42,15 @@ const load = parseGraphQLSchema => { const { fields } = args; const { config, auth, info } = context; + const parseFields = await transformTypes('create', fields, { + className: '_User', + parseGraphQLSchema, + req: { config, auth, info }, + }); + const { sessionToken, objectId } = await objectsMutations.createObject( '_User', - fields, + parseFields, config, auth, info @@ -119,9 +126,15 @@ const load = parseGraphQLSchema => { const { fields, authData } = args; const { config, auth, info } = context; + const parseFields = await transformTypes('create', fields, { + className: '_User', + parseGraphQLSchema, + req: { config, auth, info }, + }); + const { sessionToken, objectId } = await objectsMutations.createObject( '_User', - { ...fields, authData }, + { ...parseFields, authData }, config, auth, info