From deb4b4f69844f7d1fb0a65c5783e5f278a71d055 Mon Sep 17 00:00:00 2001 From: roschaefer Date: Tue, 12 Nov 2019 19:12:16 +0100 Subject: [PATCH 1/2] fix: return `null` for missig translations A query such as `{ notifications }` would return `null` for Locations with a missing translation, e.g. `nameRU`. This would not happen for queries implemented by `neo4j-graphql-js` because they nullify all missing attributes automatically. --- backend/src/schema/resolvers/locations.js | 19 ++++ .../src/schema/resolvers/locations.spec.js | 86 +++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 backend/src/schema/resolvers/locations.js create mode 100644 backend/src/schema/resolvers/locations.spec.js diff --git a/backend/src/schema/resolvers/locations.js b/backend/src/schema/resolvers/locations.js new file mode 100644 index 000000000..be72001f7 --- /dev/null +++ b/backend/src/schema/resolvers/locations.js @@ -0,0 +1,19 @@ +import Resolver from './helpers/Resolver' + +export default { + Location: { + ...Resolver('Location', { + undefinedToNull: [ + 'nameEN', + 'nameDE', + 'nameFR', + 'nameNL', + 'nameIT', + 'nameES', + 'namePT', + 'namePL', + 'nameRU', + ], + }), + }, +} diff --git a/backend/src/schema/resolvers/locations.spec.js b/backend/src/schema/resolvers/locations.spec.js new file mode 100644 index 000000000..8234fddbf --- /dev/null +++ b/backend/src/schema/resolvers/locations.spec.js @@ -0,0 +1,86 @@ +import Factory from '../../seed/factories' +import { gql } from '../../jest/helpers' +import { neode as getNeode, getDriver } from '../../bootstrap/neo4j' +import createServer from '../../server' +import { createTestClient } from 'apollo-server-testing' + +const factory = Factory() + +let mutate +let authenticatedUser + +const driver = getDriver() +const neode = getNeode() + +beforeAll(() => { + const { server } = createServer({ + context: () => { + return { + driver, + neode, + user: authenticatedUser, + } + }, + }) + mutate = createTestClient(server).mutate +}) + +afterEach(async () => { + await factory.cleanDatabase() +}) + +describe('resolvers', () => { + describe('Location', () => { + describe('custom mutation, not handled by neo4j-graphql-js', () => { + let variables + const updateUserMutation = gql` + mutation($id: ID!, $name: String) { + UpdateUser(id: $id, name: $name) { + name + location { + name: nameRU + nameEN + } + } + } + ` + + beforeEach(async () => { + variables = { + id: 'u47', + name: 'John Doughnut', + } + const Paris = await factory.create('Location', { + id: 'region.9397217726497330', + name: 'Paris', + type: 'region', + lat: 2.35183, + lng: 48.85658, + nameEN: 'Paris', + }) + + const user = await factory.create('User', { + id: 'u47', + name: 'John Doe', + }) + await user.relateTo(Paris, 'isIn') + authenticatedUser = await user.toJson() + }) + + it('returns `null` if location translation is not available', async () => { + await expect(mutate({ mutation: updateUserMutation, variables })).resolves.toMatchObject({ + data: { + UpdateUser: { + name: 'John Doughnut', + location: { + name: null, + nameEN: 'Paris', + }, + }, + }, + errors: undefined, + }) + }) + }) + }) +}) From ecf0e5948b2590d7ba25de3f904ea7893a0db55a Mon Sep 17 00:00:00 2001 From: mattwr18 Date: Tue, 12 Nov 2019 21:09:02 +0100 Subject: [PATCH 2/2] Commit to trigger build - prefer variables on one line --- backend/src/schema/resolvers/locations.spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/src/schema/resolvers/locations.spec.js b/backend/src/schema/resolvers/locations.spec.js index 8234fddbf..aed2419e0 100644 --- a/backend/src/schema/resolvers/locations.spec.js +++ b/backend/src/schema/resolvers/locations.spec.js @@ -6,8 +6,7 @@ import { createTestClient } from 'apollo-server-testing' const factory = Factory() -let mutate -let authenticatedUser +let mutate, authenticatedUser const driver = getDriver() const neode = getNeode()