diff --git a/spec/AuthenticationAdapters.spec.js b/spec/AuthenticationAdapters.spec.js index a42017769b..2465ab1181 100644 --- a/spec/AuthenticationAdapters.spec.js +++ b/spec/AuthenticationAdapters.spec.js @@ -25,7 +25,6 @@ describe('AuthenticationProviders', function () { 'gcenter', 'gpgames', 'facebook', - 'facebookaccountkit', 'github', 'instagram', 'google', @@ -43,7 +42,7 @@ describe('AuthenticationProviders', function () { 'phantauth', 'microsoft', ].map(function (providerName) { - it('Should validate structure of ' + providerName, (done) => { + it('Should validate structure of ' + providerName, done => { const provider = require('../lib/Adapters/Auth/' + providerName); jequal(typeof provider.validateAuthData, 'function'); jequal(typeof provider.validateAppId, 'function'); @@ -71,7 +70,7 @@ describe('AuthenticationProviders', function () { return; } spyOn(require('../lib/Adapters/Auth/httpsRequest'), 'get').and.callFake( - (options) => { + options => { if ( options === 'https://oauth.vk.com/access_token?client_id=appId&client_secret=appSecret&v=5.59&grant_type=client_credentials' @@ -175,7 +174,7 @@ describe('AuthenticationProviders', function () { body: jsonBody, }; return request(options) - .then((response) => { + .then(response => { if (callback) { callback(null, response, response.data); } @@ -184,7 +183,7 @@ describe('AuthenticationProviders', function () { body: response.data, }; }) - .catch((error) => { + .catch(error => { if (callback) { callback(error); } @@ -192,7 +191,7 @@ describe('AuthenticationProviders', function () { }); }; - it('should create user with REST API', (done) => { + it('should create user with REST API', done => { createOAuthUser((error, response, body) => { expect(error).toBe(null); const b = body; @@ -203,7 +202,7 @@ describe('AuthenticationProviders', function () { const q = new Parse.Query('_Session'); q.equalTo('sessionToken', sessionToken); q.first({ useMasterKey: true }) - .then((res) => { + .then(res => { if (!res) { fail('should not fail fetching the session'); done(); @@ -219,7 +218,7 @@ describe('AuthenticationProviders', function () { }); }); - it('should only create a single user with REST API', (done) => { + it('should only create a single user with REST API', done => { let objectId; createOAuthUser((error, response, body) => { expect(error).toBe(null); @@ -239,9 +238,9 @@ describe('AuthenticationProviders', function () { }); }); - it("should fail to link if session token don't match user", (done) => { + it("should fail to link if session token don't match user", done => { Parse.User.signUp('myUser', 'password') - .then((user) => { + .then(user => { return createOAuthUserWithSessionToken(user.getSessionToken()); }) .then(() => { @@ -250,7 +249,7 @@ describe('AuthenticationProviders', function () { .then(() => { return Parse.User.signUp('myUser2', 'password'); }) - .then((user) => { + .then(user => { return createOAuthUserWithSessionToken(user.getSessionToken()); }) .then(fail, ({ data }) => { @@ -330,7 +329,7 @@ describe('AuthenticationProviders', function () { expect(typeof authAdapter.validateAppId).toBe('function'); } - it('properly loads custom adapter', (done) => { + it('properly loads custom adapter', done => { const validAuthData = { id: 'hello', token: 'world', @@ -370,14 +369,14 @@ describe('AuthenticationProviders', function () { expect(appIdSpy).not.toHaveBeenCalled(); done(); }, - (err) => { + err => { jfail(err); done(); } ); }); - it('properly loads custom adapter module object', (done) => { + it('properly loads custom adapter module object', done => { const authenticationHandler = authenticationLoader({ customAuthentication: path.resolve('./spec/support/CustomAuth.js'), }); @@ -394,14 +393,14 @@ describe('AuthenticationProviders', function () { () => { done(); }, - (err) => { + err => { jfail(err); done(); } ); }); - it('properly loads custom adapter module object (again)', (done) => { + it('properly loads custom adapter module object (again)', done => { const authenticationHandler = authenticationLoader({ customAuthentication: { module: path.resolve('./spec/support/CustomAuthFunction.js'), @@ -421,7 +420,7 @@ describe('AuthenticationProviders', function () { () => { done(); }, - (err) => { + err => { jfail(err); done(); } @@ -512,84 +511,6 @@ describe('AuthenticationProviders', function () { expect(appIds).toEqual(['a', 'b']); expect(providerOptions).toEqual(options.custom); }); - - it('properly loads Facebook accountkit adapter with options', () => { - const options = { - facebookaccountkit: { - appIds: ['a', 'b'], - appSecret: 'secret', - }, - }; - const { - adapter, - appIds, - providerOptions, - } = authenticationLoader.loadAuthAdapter('facebookaccountkit', options); - validateAuthenticationAdapter(adapter); - expect(appIds).toEqual(['a', 'b']); - expect(providerOptions.appSecret).toEqual('secret'); - }); - - it('should fail if Facebook appIds is not configured properly', (done) => { - const options = { - facebookaccountkit: { - appIds: [], - }, - }; - const { adapter, appIds } = authenticationLoader.loadAuthAdapter( - 'facebookaccountkit', - options - ); - adapter.validateAppId(appIds).then(done.fail, (err) => { - expect(err.code).toBe(Parse.Error.OBJECT_NOT_FOUND); - done(); - }); - }); - - it('should fail to validate Facebook accountkit auth with bad token', (done) => { - const options = { - facebookaccountkit: { - appIds: ['a', 'b'], - }, - }; - const authData = { - id: 'fakeid', - access_token: 'badtoken', - }; - const { adapter } = authenticationLoader.loadAuthAdapter( - 'facebookaccountkit', - options - ); - adapter.validateAuthData(authData).then(done.fail, (err) => { - expect(err.code).toBe(190); - expect(err.type).toBe('OAuthException'); - done(); - }); - }); - - it('should fail to validate Facebook accountkit auth with bad token regardless of app secret proof', (done) => { - const options = { - facebookaccountkit: { - appIds: ['a', 'b'], - appSecret: 'badsecret', - }, - }; - const authData = { - id: 'fakeid', - access_token: 'badtoken', - }; - const { adapter, providerOptions } = authenticationLoader.loadAuthAdapter( - 'facebookaccountkit', - options - ); - adapter - .validateAuthData(authData, providerOptions) - .then(done.fail, (err) => { - expect(err.code).toBe(190); - expect(err.type).toBe('OAuthException'); - done(); - }); - }); }); describe('instagram auth adapter', () => { @@ -1653,13 +1574,13 @@ describe('microsoft graph auth adapter', () => { }); }); - it('should fail to validate Microsoft Graph auth with bad token', (done) => { + it('should fail to validate Microsoft Graph auth with bad token', done => { const authData = { id: 'fake-id', mail: 'fake@mail.com', access_token: 'very.long.bad.token', }; - microsoft.validateAuthData(authData).then(done.fail, (err) => { + microsoft.validateAuthData(authData).then(done.fail, err => { expect(err.code).toBe(101); expect(err.message).toBe( 'Microsoft Graph auth is invalid for this user.' diff --git a/spec/ParseGraphQLServer.spec.js b/spec/ParseGraphQLServer.spec.js index c1f23bc733..34cd8a8f11 100644 --- a/spec/ParseGraphQLServer.spec.js +++ b/spec/ParseGraphQLServer.spec.js @@ -2401,585 +2401,580 @@ describe('ParseGraphQLServer', () => { expect(nodeResult.data.node2.objectId).toBe(obj2.id); expect(nodeResult.data.node2.someField).toBe('some value 2'); }); - - it_only_db('mongo')( - 'Id inputs should work either with global id or object id', - async () => { - try { - await apolloClient.mutate({ - mutation: gql` - mutation CreateClasses { - secondaryObject: createClass( - input: { - name: "SecondaryObject" - schemaFields: { addStrings: [{ name: "someField" }] } - } - ) { - clientMutationId - } - primaryObject: createClass( - input: { - name: "PrimaryObject" - schemaFields: { - addStrings: [{ name: "stringField" }] - addArrays: [{ name: "arrayField" }] - addPointers: [ - { - name: "pointerField" - targetClassName: "SecondaryObject" - } - ] - addRelations: [ - { - name: "relationField" - targetClassName: "SecondaryObject" - } - ] - } + // TODO: (moumouls, davimacedo) Fix flaky test + xit('Id inputs should work either with global id or object id', async () => { + try { + await apolloClient.mutate({ + mutation: gql` + mutation CreateClasses { + secondaryObject: createClass( + input: { + name: "SecondaryObject" + schemaFields: { addStrings: [{ name: "someField" }] } + } + ) { + clientMutationId + } + primaryObject: createClass( + input: { + name: "PrimaryObject" + schemaFields: { + addStrings: [{ name: "stringField" }] + addArrays: [{ name: "arrayField" }] + addPointers: [ + { + name: "pointerField" + targetClassName: "SecondaryObject" + } + ] + addRelations: [ + { + name: "relationField" + targetClassName: "SecondaryObject" + } + ] } - ) { - clientMutationId } + ) { + clientMutationId } - `, - context: { - headers: { - 'X-Parse-Master-Key': 'test', - }, + } + `, + context: { + headers: { + 'X-Parse-Master-Key': 'test', }, - }); + }, + }); - await resetGraphQLCache(); + await resetGraphQLCache(); - const createSecondaryObjectsResult = await apolloClient.mutate({ - mutation: gql` - mutation CreateSecondaryObjects { - secondaryObject1: createSecondaryObject( - input: { fields: { someField: "some value 1" } } - ) { - secondaryObject { - id - objectId - someField - } + const createSecondaryObjectsResult = await apolloClient.mutate({ + mutation: gql` + mutation CreateSecondaryObjects { + secondaryObject1: createSecondaryObject( + input: { fields: { someField: "some value 1" } } + ) { + secondaryObject { + id + objectId + someField } - secondaryObject2: createSecondaryObject( - input: { fields: { someField: "some value 2" } } - ) { - secondaryObject { - id - someField - } + } + secondaryObject2: createSecondaryObject( + input: { fields: { someField: "some value 2" } } + ) { + secondaryObject { + id + someField } - secondaryObject3: createSecondaryObject( - input: { fields: { someField: "some value 3" } } - ) { - secondaryObject { - objectId - someField - } + } + secondaryObject3: createSecondaryObject( + input: { fields: { someField: "some value 3" } } + ) { + secondaryObject { + objectId + someField } - secondaryObject4: createSecondaryObject( - input: { fields: { someField: "some value 4" } } - ) { - secondaryObject { - id - objectId - } + } + secondaryObject4: createSecondaryObject( + input: { fields: { someField: "some value 4" } } + ) { + secondaryObject { + id + objectId } - secondaryObject5: createSecondaryObject( - input: { fields: { someField: "some value 5" } } - ) { - secondaryObject { - id - } + } + secondaryObject5: createSecondaryObject( + input: { fields: { someField: "some value 5" } } + ) { + secondaryObject { + id } - secondaryObject6: createSecondaryObject( - input: { fields: { someField: "some value 6" } } - ) { - secondaryObject { - objectId - } + } + secondaryObject6: createSecondaryObject( + input: { fields: { someField: "some value 6" } } + ) { + secondaryObject { + objectId } - secondaryObject7: createSecondaryObject( - input: { fields: { someField: "some value 7" } } - ) { - secondaryObject { - someField - } + } + secondaryObject7: createSecondaryObject( + input: { fields: { someField: "some value 7" } } + ) { + secondaryObject { + someField } } - `, - context: { - headers: { - 'X-Parse-Master-Key': 'test', - }, + } + `, + context: { + headers: { + 'X-Parse-Master-Key': 'test', }, - }); + }, + }); - const updateSecondaryObjectsResult = await apolloClient.mutate({ - mutation: gql` - mutation UpdateSecondaryObjects( - $id1: ID! - $id2: ID! - $id3: ID! - $id4: ID! - $id5: ID! - $id6: ID! - ) { - secondaryObject1: updateSecondaryObject( - input: { - id: $id1 - fields: { someField: "some value 11" } - } - ) { - secondaryObject { - id - objectId - someField - } + const updateSecondaryObjectsResult = await apolloClient.mutate({ + mutation: gql` + mutation UpdateSecondaryObjects( + $id1: ID! + $id2: ID! + $id3: ID! + $id4: ID! + $id5: ID! + $id6: ID! + ) { + secondaryObject1: updateSecondaryObject( + input: { + id: $id1 + fields: { someField: "some value 11" } } - secondaryObject2: updateSecondaryObject( - input: { - id: $id2 - fields: { someField: "some value 22" } - } - ) { - secondaryObject { - id - someField - } + ) { + secondaryObject { + id + objectId + someField } - secondaryObject3: updateSecondaryObject( - input: { - id: $id3 - fields: { someField: "some value 33" } - } - ) { - secondaryObject { - objectId - someField - } + } + secondaryObject2: updateSecondaryObject( + input: { + id: $id2 + fields: { someField: "some value 22" } } - secondaryObject4: updateSecondaryObject( - input: { - id: $id4 - fields: { someField: "some value 44" } - } - ) { - secondaryObject { - id - objectId - } + ) { + secondaryObject { + id + someField } - secondaryObject5: updateSecondaryObject( - input: { - id: $id5 - fields: { someField: "some value 55" } - } - ) { - secondaryObject { - id - } + } + secondaryObject3: updateSecondaryObject( + input: { + id: $id3 + fields: { someField: "some value 33" } } - secondaryObject6: updateSecondaryObject( - input: { - id: $id6 - fields: { someField: "some value 66" } - } - ) { - secondaryObject { - objectId - } + ) { + secondaryObject { + objectId + someField } } - `, - variables: { - id1: - createSecondaryObjectsResult.data.secondaryObject1 - .secondaryObject.id, - id2: - createSecondaryObjectsResult.data.secondaryObject2 - .secondaryObject.id, - id3: - createSecondaryObjectsResult.data.secondaryObject3 - .secondaryObject.objectId, - id4: - createSecondaryObjectsResult.data.secondaryObject4 - .secondaryObject.objectId, - id5: - createSecondaryObjectsResult.data.secondaryObject5 - .secondaryObject.id, - id6: - createSecondaryObjectsResult.data.secondaryObject6 - .secondaryObject.objectId, - }, - context: { - headers: { - 'X-Parse-Master-Key': 'test', - }, - }, - }); - - const deleteSecondaryObjectsResult = await apolloClient.mutate({ - mutation: gql` - mutation DeleteSecondaryObjects( - $id1: ID! - $id3: ID! - $id5: ID! - $id6: ID! + secondaryObject4: updateSecondaryObject( + input: { + id: $id4 + fields: { someField: "some value 44" } + } ) { - secondaryObject1: deleteSecondaryObject( - input: { id: $id1 } - ) { - secondaryObject { - id - objectId - someField - } + secondaryObject { + id + objectId } - secondaryObject3: deleteSecondaryObject( - input: { id: $id3 } - ) { - secondaryObject { - objectId - someField - } + } + secondaryObject5: updateSecondaryObject( + input: { + id: $id5 + fields: { someField: "some value 55" } } - secondaryObject5: deleteSecondaryObject( - input: { id: $id5 } - ) { - secondaryObject { - id - } + ) { + secondaryObject { + id } - secondaryObject6: deleteSecondaryObject( - input: { id: $id6 } - ) { - secondaryObject { - objectId - } + } + secondaryObject6: updateSecondaryObject( + input: { + id: $id6 + fields: { someField: "some value 66" } + } + ) { + secondaryObject { + objectId } } - `, - variables: { - id1: - updateSecondaryObjectsResult.data.secondaryObject1 - .secondaryObject.id, - id3: - updateSecondaryObjectsResult.data.secondaryObject3 - .secondaryObject.objectId, - id5: - updateSecondaryObjectsResult.data.secondaryObject5 - .secondaryObject.id, - id6: - updateSecondaryObjectsResult.data.secondaryObject6 - .secondaryObject.objectId, - }, - context: { - headers: { - 'X-Parse-Master-Key': 'test', - }, + } + `, + variables: { + id1: + createSecondaryObjectsResult.data.secondaryObject1 + .secondaryObject.id, + id2: + createSecondaryObjectsResult.data.secondaryObject2 + .secondaryObject.id, + id3: + createSecondaryObjectsResult.data.secondaryObject3 + .secondaryObject.objectId, + id4: + createSecondaryObjectsResult.data.secondaryObject4 + .secondaryObject.objectId, + id5: + createSecondaryObjectsResult.data.secondaryObject5 + .secondaryObject.id, + id6: + createSecondaryObjectsResult.data.secondaryObject6 + .secondaryObject.objectId, + }, + context: { + headers: { + 'X-Parse-Master-Key': 'test', }, - }); + }, + }); - const getSecondaryObjectsResult = await apolloClient.query({ - query: gql` - query GetSecondaryObjects($id2: ID!, $id4: ID!) { - secondaryObject2: secondaryObject(id: $id2) { + const deleteSecondaryObjectsResult = await apolloClient.mutate({ + mutation: gql` + mutation DeleteSecondaryObjects( + $id1: ID! + $id3: ID! + $id5: ID! + $id6: ID! + ) { + secondaryObject1: deleteSecondaryObject( + input: { id: $id1 } + ) { + secondaryObject { id objectId someField } - secondaryObject4: secondaryObject(id: $id4) { + } + secondaryObject3: deleteSecondaryObject( + input: { id: $id3 } + ) { + secondaryObject { objectId someField } } - `, - variables: { - id2: - updateSecondaryObjectsResult.data.secondaryObject2 - .secondaryObject.id, - id4: - updateSecondaryObjectsResult.data.secondaryObject4 - .secondaryObject.objectId, + secondaryObject5: deleteSecondaryObject( + input: { id: $id5 } + ) { + secondaryObject { + id + } + } + secondaryObject6: deleteSecondaryObject( + input: { id: $id6 } + ) { + secondaryObject { + objectId + } + } + } + `, + variables: { + id1: + updateSecondaryObjectsResult.data.secondaryObject1 + .secondaryObject.id, + id3: + updateSecondaryObjectsResult.data.secondaryObject3 + .secondaryObject.objectId, + id5: + updateSecondaryObjectsResult.data.secondaryObject5 + .secondaryObject.id, + id6: + updateSecondaryObjectsResult.data.secondaryObject6 + .secondaryObject.objectId, + }, + context: { + headers: { + 'X-Parse-Master-Key': 'test', }, - context: { - headers: { - 'X-Parse-Master-Key': 'test', - }, + }, + }); + + const getSecondaryObjectsResult = await apolloClient.query({ + query: gql` + query GetSecondaryObjects($id2: ID!, $id4: ID!) { + secondaryObject2: secondaryObject(id: $id2) { + id + objectId + someField + } + secondaryObject4: secondaryObject(id: $id4) { + objectId + someField + } + } + `, + variables: { + id2: + updateSecondaryObjectsResult.data.secondaryObject2 + .secondaryObject.id, + id4: + updateSecondaryObjectsResult.data.secondaryObject4 + .secondaryObject.objectId, + }, + context: { + headers: { + 'X-Parse-Master-Key': 'test', }, - }); + }, + }); - const findSecondaryObjectsResult = await apolloClient.query({ - query: gql` - query FindSecondaryObjects( - $id1: ID! - $id2: ID! - $id3: ID! - $id4: ID! - $id5: ID! - $id6: ID! - ) { - secondaryObjects( - where: { - AND: [ - { - OR: [ - { id: { equalTo: $id2 } } - { - AND: [ - { id: { equalTo: $id4 } } - { objectId: { equalTo: $id4 } } - ] - } - ] - } - { id: { notEqualTo: $id1 } } - { id: { notEqualTo: $id3 } } - { objectId: { notEqualTo: $id2 } } - { objectId: { notIn: [$id5, $id6] } } - { id: { in: [$id2, $id4] } } - ] - } - order: [id_ASC, objectId_ASC] - ) { - edges { - node { - id - objectId - someField + const findSecondaryObjectsResult = await apolloClient.query({ + query: gql` + query FindSecondaryObjects( + $id1: ID! + $id2: ID! + $id3: ID! + $id4: ID! + $id5: ID! + $id6: ID! + ) { + secondaryObjects( + where: { + AND: [ + { + OR: [ + { id: { equalTo: $id2 } } + { + AND: [ + { id: { equalTo: $id4 } } + { objectId: { equalTo: $id4 } } + ] + } + ] } + { id: { notEqualTo: $id1 } } + { id: { notEqualTo: $id3 } } + { objectId: { notEqualTo: $id2 } } + { objectId: { notIn: [$id5, $id6] } } + { id: { in: [$id2, $id4] } } + ] + } + order: [id_ASC, objectId_ASC] + ) { + edges { + node { + id + objectId + someField } - count } + count } - `, - variables: { - id1: - deleteSecondaryObjectsResult.data.secondaryObject1 - .secondaryObject.objectId, - id2: getSecondaryObjectsResult.data.secondaryObject2.id, - id3: - deleteSecondaryObjectsResult.data.secondaryObject3 - .secondaryObject.objectId, - id4: - getSecondaryObjectsResult.data.secondaryObject4.objectId, - id5: - deleteSecondaryObjectsResult.data.secondaryObject5 - .secondaryObject.id, - id6: - deleteSecondaryObjectsResult.data.secondaryObject6 - .secondaryObject.objectId, - }, - context: { - headers: { - 'X-Parse-Master-Key': 'test', - }, + } + `, + variables: { + id1: + deleteSecondaryObjectsResult.data.secondaryObject1 + .secondaryObject.objectId, + id2: getSecondaryObjectsResult.data.secondaryObject2.id, + id3: + deleteSecondaryObjectsResult.data.secondaryObject3 + .secondaryObject.objectId, + id4: getSecondaryObjectsResult.data.secondaryObject4.objectId, + id5: + deleteSecondaryObjectsResult.data.secondaryObject5 + .secondaryObject.id, + id6: + deleteSecondaryObjectsResult.data.secondaryObject6 + .secondaryObject.objectId, + }, + context: { + headers: { + 'X-Parse-Master-Key': 'test', }, - }); + }, + }); - expect( - findSecondaryObjectsResult.data.secondaryObjects.count - ).toEqual(2); - expect( - findSecondaryObjectsResult.data.secondaryObjects.edges - .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 - ); - expect( - findSecondaryObjectsResult.data.secondaryObjects.edges[0].node - .objectId - ).toBeLessThan( - findSecondaryObjectsResult.data.secondaryObjects.edges[1].node - .objectId - ); - - const createPrimaryObjectResult = await apolloClient.mutate({ - mutation: gql` - mutation CreatePrimaryObject( - $pointer: Any - $secondaryObject2: ID! - $secondaryObject4: ID! - ) { - createPrimaryObject( - input: { - fields: { - stringField: "some value" - arrayField: [1, "abc", $pointer] - pointerField: { link: $secondaryObject2 } - relationField: { - add: [$secondaryObject2, $secondaryObject4] - } + expect( + findSecondaryObjectsResult.data.secondaryObjects.count + ).toEqual(2); + expect( + findSecondaryObjectsResult.data.secondaryObjects.edges + .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 + ); + expect( + findSecondaryObjectsResult.data.secondaryObjects.edges[0].node + .objectId + ).toBeLessThan( + findSecondaryObjectsResult.data.secondaryObjects.edges[1].node + .objectId + ); + + const createPrimaryObjectResult = await apolloClient.mutate({ + mutation: gql` + mutation CreatePrimaryObject( + $pointer: Any + $secondaryObject2: ID! + $secondaryObject4: ID! + ) { + createPrimaryObject( + input: { + fields: { + stringField: "some value" + arrayField: [1, "abc", $pointer] + pointerField: { link: $secondaryObject2 } + relationField: { + add: [$secondaryObject2, $secondaryObject4] } } - ) { - primaryObject { - id - stringField - arrayField { - ... on Element { - value - } - ... on SecondaryObject { - someField - } + } + ) { + primaryObject { + id + stringField + arrayField { + ... on Element { + value } - pointerField { - id - objectId + ... on SecondaryObject { someField } - relationField { - edges { - node { - id - objectId - someField - } + } + pointerField { + id + objectId + someField + } + relationField { + edges { + node { + id + objectId + someField } } } } } - `, - variables: { - pointer: { - __type: 'Pointer', - className: 'SecondaryObject', - objectId: - getSecondaryObjectsResult.data.secondaryObject4 - .objectId, - }, - secondaryObject2: - getSecondaryObjectsResult.data.secondaryObject2.id, - secondaryObject4: + } + `, + variables: { + pointer: { + __type: 'Pointer', + className: 'SecondaryObject', + objectId: getSecondaryObjectsResult.data.secondaryObject4.objectId, }, - context: { - headers: { - 'X-Parse-Master-Key': 'test', - }, + secondaryObject2: + getSecondaryObjectsResult.data.secondaryObject2.id, + secondaryObject4: + getSecondaryObjectsResult.data.secondaryObject4.objectId, + }, + context: { + headers: { + 'X-Parse-Master-Key': 'test', }, - }); + }, + }); - const updatePrimaryObjectResult = await apolloClient.mutate({ - mutation: gql` - mutation UpdatePrimaryObject( - $id: ID! - $secondaryObject2: ID! - $secondaryObject4: ID! - ) { - updatePrimaryObject( - input: { - id: $id - fields: { - pointerField: { link: $secondaryObject4 } - relationField: { - remove: [$secondaryObject2, $secondaryObject4] - } + const updatePrimaryObjectResult = await apolloClient.mutate({ + mutation: gql` + mutation UpdatePrimaryObject( + $id: ID! + $secondaryObject2: ID! + $secondaryObject4: ID! + ) { + updatePrimaryObject( + input: { + id: $id + fields: { + pointerField: { link: $secondaryObject4 } + relationField: { + remove: [$secondaryObject2, $secondaryObject4] } } - ) { - primaryObject { - id - stringField - arrayField { - ... on Element { - value - } - ... on SecondaryObject { - someField - } + } + ) { + primaryObject { + id + stringField + arrayField { + ... on Element { + value } - pointerField { - id - objectId + ... on SecondaryObject { someField } - relationField { - edges { - node { - id - objectId - someField - } + } + pointerField { + id + objectId + someField + } + relationField { + edges { + node { + id + objectId + someField } } } } } - `, - variables: { - id: - createPrimaryObjectResult.data.createPrimaryObject - .primaryObject.id, - secondaryObject2: - getSecondaryObjectsResult.data.secondaryObject2.id, - secondaryObject4: - getSecondaryObjectsResult.data.secondaryObject4.objectId, - }, - context: { - headers: { - 'X-Parse-Master-Key': 'test', - }, + } + `, + variables: { + id: + createPrimaryObjectResult.data.createPrimaryObject + .primaryObject.id, + secondaryObject2: + getSecondaryObjectsResult.data.secondaryObject2.id, + secondaryObject4: + getSecondaryObjectsResult.data.secondaryObject4.objectId, + }, + context: { + headers: { + 'X-Parse-Master-Key': 'test', }, - }); + }, + }); - expect( - createPrimaryObjectResult.data.createPrimaryObject - .primaryObject.stringField - ).toEqual('some value'); - expect( - createPrimaryObjectResult.data.createPrimaryObject - .primaryObject.arrayField - ).toEqual([ - { __typename: 'Element', value: 1 }, - { __typename: 'Element', value: 'abc' }, - { __typename: 'SecondaryObject', someField: 'some value 44' }, - ]); - expect( - createPrimaryObjectResult.data.createPrimaryObject - .primaryObject.pointerField.someField - ).toEqual('some value 22'); - expect( - createPrimaryObjectResult.data.createPrimaryObject.primaryObject.relationField.edges - .map(value => value.node.someField) - .sort() - ).toEqual(['some value 22', 'some value 44']); - expect( - updatePrimaryObjectResult.data.updatePrimaryObject - .primaryObject.stringField - ).toEqual('some value'); - expect( - updatePrimaryObjectResult.data.updatePrimaryObject - .primaryObject.arrayField - ).toEqual([ - { __typename: 'Element', value: 1 }, - { __typename: 'Element', value: 'abc' }, - { __typename: 'SecondaryObject', someField: 'some value 44' }, - ]); - expect( - updatePrimaryObjectResult.data.updatePrimaryObject - .primaryObject.pointerField.someField - ).toEqual('some value 44'); - expect( - updatePrimaryObjectResult.data.updatePrimaryObject - .primaryObject.relationField.edges - ).toEqual([]); - } catch (e) { - handleError(e); - } + expect( + createPrimaryObjectResult.data.createPrimaryObject.primaryObject + .stringField + ).toEqual('some value'); + expect( + createPrimaryObjectResult.data.createPrimaryObject.primaryObject + .arrayField + ).toEqual([ + { __typename: 'Element', value: 1 }, + { __typename: 'Element', value: 'abc' }, + { __typename: 'SecondaryObject', someField: 'some value 44' }, + ]); + expect( + createPrimaryObjectResult.data.createPrimaryObject.primaryObject + .pointerField.someField + ).toEqual('some value 22'); + expect( + createPrimaryObjectResult.data.createPrimaryObject.primaryObject.relationField.edges + .map(value => value.node.someField) + .sort() + ).toEqual(['some value 22', 'some value 44']); + expect( + updatePrimaryObjectResult.data.updatePrimaryObject.primaryObject + .stringField + ).toEqual('some value'); + expect( + updatePrimaryObjectResult.data.updatePrimaryObject.primaryObject + .arrayField + ).toEqual([ + { __typename: 'Element', value: 1 }, + { __typename: 'Element', value: 'abc' }, + { __typename: 'SecondaryObject', someField: 'some value 44' }, + ]); + expect( + updatePrimaryObjectResult.data.updatePrimaryObject.primaryObject + .pointerField.someField + ).toEqual('some value 44'); + expect( + updatePrimaryObjectResult.data.updatePrimaryObject.primaryObject + .relationField.edges + ).toEqual([]); + } catch (e) { + handleError(e); } - ); + }); }); }); diff --git a/src/Adapters/Auth/facebookaccountkit.js b/src/Adapters/Auth/facebookaccountkit.js deleted file mode 100644 index a650d23840..0000000000 --- a/src/Adapters/Auth/facebookaccountkit.js +++ /dev/null @@ -1,60 +0,0 @@ -const crypto = require('crypto'); -const httpsRequest = require('./httpsRequest'); -const Parse = require('parse/node').Parse; - -const graphRequest = path => { - return httpsRequest.get(`https://graph.accountkit.com/v1.1/${path}`); -}; - -function getRequestPath(authData, options) { - const access_token = authData.access_token, - appSecret = options && options.appSecret; - if (appSecret) { - const appsecret_proof = crypto - .createHmac('sha256', appSecret) - .update(access_token) - .digest('hex'); - return `me?access_token=${access_token}&appsecret_proof=${appsecret_proof}`; - } - return `me?access_token=${access_token}`; -} - -function validateAppId(appIds, authData, options) { - if (!appIds.length) { - return Promise.reject( - new Parse.Error( - Parse.Error.OBJECT_NOT_FOUND, - 'Facebook app id for Account Kit is not configured.' - ) - ); - } - return graphRequest(getRequestPath(authData, options)).then(data => { - if (data && data.application && appIds.indexOf(data.application.id) != -1) { - return; - } - throw new Parse.Error( - Parse.Error.OBJECT_NOT_FOUND, - 'Facebook app id for Account Kit is invalid for this user.' - ); - }); -} - -function validateAuthData(authData, options) { - return graphRequest(getRequestPath(authData, options)).then(data => { - if (data && data.error) { - throw data.error; - } - if (data && data.id == authData.id) { - return; - } - throw new Parse.Error( - Parse.Error.OBJECT_NOT_FOUND, - 'Facebook Account Kit auth is invalid for this user.' - ); - }); -} - -module.exports = { - validateAppId, - validateAuthData, -}; diff --git a/src/Adapters/Auth/index.js b/src/Adapters/Auth/index.js index e5e8c955bd..296013ce9a 100755 --- a/src/Adapters/Auth/index.js +++ b/src/Adapters/Auth/index.js @@ -4,7 +4,6 @@ const apple = require('./apple'); const gcenter = require('./gcenter'); const gpgames = require('./gpgames'); const facebook = require('./facebook'); -const facebookaccountkit = require('./facebookaccountkit'); const instagram = require('./instagram'); const linkedin = require('./linkedin'); const meetup = require('./meetup'); @@ -39,7 +38,6 @@ const providers = { gcenter, gpgames, facebook, - facebookaccountkit, instagram, linkedin, meetup, @@ -62,7 +60,7 @@ const providers = { }; function authDataValidator(adapter, appIds, options) { - return function(authData) { + return function (authData) { return adapter.validateAuthData(authData, options).then(() => { if (appIds) { return adapter.validateAppId(appIds, authData, options); @@ -117,13 +115,13 @@ function loadAuthAdapter(provider, authOptions) { return { adapter, appIds, providerOptions }; } -module.exports = function(authOptions = {}, enableAnonymousUsers = true) { +module.exports = function (authOptions = {}, enableAnonymousUsers = true) { let _enableAnonymousUsers = enableAnonymousUsers; - const setEnableAnonymousUsers = function(enable) { + const setEnableAnonymousUsers = function (enable) { _enableAnonymousUsers = enable; }; // To handle the test cases on configuration - const getValidatorForProvider = function(provider) { + const getValidatorForProvider = function (provider) { if (provider === 'anonymous' && !_enableAnonymousUsers) { return; }