mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
224 lines
6.1 KiB
JavaScript
224 lines
6.1 KiB
JavaScript
import { gql } from '../../../helpers/jest'
|
|
import Factory, { cleanDatabase } from '../../../db/factories'
|
|
import { getNeode, getDriver } from '../../../db/neo4j'
|
|
import { createTestClient } from 'apollo-server-testing'
|
|
import createServer from '../../../server'
|
|
|
|
const neode = getNeode()
|
|
const driver = getDriver()
|
|
let authenticatedUser, mutate, query, variables
|
|
|
|
const updateUserMutation = gql`
|
|
mutation ($id: ID!, $name: String!, $locationName: String) {
|
|
UpdateUser(id: $id, name: $name, locationName: $locationName) {
|
|
locationName
|
|
}
|
|
}
|
|
`
|
|
const queryLocations = gql`
|
|
query ($place: String!, $lang: String!) {
|
|
queryLocations(place: $place, lang: $lang) {
|
|
place_name
|
|
id
|
|
}
|
|
}
|
|
`
|
|
const newlyCreatedNodesWithLocales = [
|
|
{
|
|
city: {
|
|
id: expect.stringContaining('place'),
|
|
type: 'place',
|
|
name: 'Welzheim',
|
|
nameEN: 'Welzheim',
|
|
nameDE: 'Welzheim',
|
|
namePT: 'Welzheim',
|
|
nameES: 'Welzheim',
|
|
nameFR: 'Welzheim',
|
|
nameIT: 'Welzheim',
|
|
nameRU: 'Вельцхайм',
|
|
nameNL: 'Welzheim',
|
|
namePL: 'Welzheim',
|
|
lng: 9.634741,
|
|
lat: 48.874924,
|
|
},
|
|
state: {
|
|
id: expect.stringContaining('region'),
|
|
type: 'region',
|
|
name: 'Baden-Württemberg',
|
|
nameDE: 'Baden-Württemberg',
|
|
nameEN: 'Baden-Württemberg',
|
|
nameES: 'Baden-Wurtemberg',
|
|
nameFR: 'Bade-Wurtemberg',
|
|
nameIT: 'Baden-Württemberg',
|
|
nameNL: 'Baden-Württemberg',
|
|
namePL: 'Badenia-Wirtembergia',
|
|
namePT: 'Baden-Württemberg',
|
|
nameRU: 'Баден-Вюртемберг',
|
|
},
|
|
country: {
|
|
id: expect.stringContaining('country'),
|
|
type: 'country',
|
|
name: 'Germany',
|
|
nameDE: 'Deutschland',
|
|
nameEN: 'Germany',
|
|
nameES: 'Alemania',
|
|
nameFR: 'Allemagne',
|
|
nameIT: 'Germania',
|
|
nameNL: 'Duitsland',
|
|
namePL: 'Niemcy',
|
|
namePT: 'Alemanha',
|
|
nameRU: 'Германия',
|
|
},
|
|
},
|
|
]
|
|
|
|
beforeAll(async () => {
|
|
await cleanDatabase()
|
|
|
|
const { server } = createServer({
|
|
context: () => {
|
|
return {
|
|
user: authenticatedUser,
|
|
neode,
|
|
driver,
|
|
}
|
|
},
|
|
})
|
|
mutate = createTestClient(server).mutate
|
|
query = createTestClient(server).query
|
|
})
|
|
|
|
afterAll(async () => {
|
|
await cleanDatabase()
|
|
})
|
|
|
|
beforeEach(() => {
|
|
variables = {}
|
|
authenticatedUser = null
|
|
})
|
|
|
|
// TODO: avoid database clean after each test in the future if possible for performance and flakyness reasons by filling the database step by step, see issue https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/4543
|
|
afterEach(async () => {
|
|
await cleanDatabase()
|
|
})
|
|
|
|
describe('Location Service', () => {
|
|
// Authentication
|
|
// TODO: unify, externalize, simplify, wtf?
|
|
let user
|
|
beforeEach(async () => {
|
|
user = await Factory.build('user', {
|
|
id: 'location-user',
|
|
})
|
|
authenticatedUser = await user.toJson()
|
|
})
|
|
|
|
it('query Location existing', async () => {
|
|
variables = {
|
|
place: 'Berlin',
|
|
lang: 'en',
|
|
}
|
|
const result = await query({ query: queryLocations, variables })
|
|
expect(result.data.queryLocations).toEqual(
|
|
expect.arrayContaining([
|
|
{ id: expect.stringMatching(/^place\.[0-9]+$/), place_name: 'Berlin, Germany' },
|
|
{
|
|
id: expect.stringMatching(/^place\.[0-9]+$/),
|
|
place_name: 'Berlin, Maryland, United States',
|
|
},
|
|
{
|
|
id: expect.stringMatching(/^place\.[0-9]+$/),
|
|
place_name: 'Berlin, Connecticut, United States',
|
|
},
|
|
{
|
|
id: expect.stringMatching(/^place\.[0-9]+$/),
|
|
place_name: 'Berlin, New Jersey, United States',
|
|
},
|
|
{
|
|
id: expect.stringMatching(/^place\.[0-9]+$/),
|
|
place_name: 'Berlin Heights, Ohio, United States',
|
|
},
|
|
]),
|
|
)
|
|
})
|
|
|
|
it('query Location existing in different language', async () => {
|
|
variables = {
|
|
place: 'Berlin',
|
|
lang: 'de',
|
|
}
|
|
const result = await query({ query: queryLocations, variables })
|
|
expect(result.data.queryLocations).toEqual([
|
|
{ id: expect.stringMatching(/^place\.[0-9]+$/), place_name: 'Berlin, Deutschland' },
|
|
{
|
|
id: expect.stringMatching(/^place\.[0-9]+$/),
|
|
place_name: 'Berlin, Maryland, Vereinigte Staaten',
|
|
},
|
|
{
|
|
id: expect.stringMatching(/^place\.[0-9]+$/),
|
|
place_name: 'Berlin, New Jersey, Vereinigte Staaten',
|
|
},
|
|
{
|
|
id: expect.stringMatching(/^place\.[0-9]+$/),
|
|
place_name: 'Berlin Heights, Ohio, Vereinigte Staaten',
|
|
},
|
|
{
|
|
id: expect.stringMatching(/^place\.[0-9]+$/),
|
|
place_name: 'Berlin, Massachusetts, Vereinigte Staaten',
|
|
},
|
|
])
|
|
})
|
|
|
|
it('query Location not existing', async () => {
|
|
variables = {
|
|
place: 'GbHtsd4sdHa',
|
|
lang: 'en',
|
|
}
|
|
const result = await query({ query: queryLocations, variables })
|
|
expect(result.data.queryLocations).toEqual([])
|
|
})
|
|
|
|
it('query Location without a place name given', async () => {
|
|
variables = {
|
|
place: '',
|
|
lang: 'en',
|
|
}
|
|
const result = await query({ query: queryLocations, variables })
|
|
expect(result.data.queryLocations).toEqual([])
|
|
})
|
|
})
|
|
|
|
describe('userMiddleware', () => {
|
|
describe('UpdateUser', () => {
|
|
let user
|
|
beforeEach(async () => {
|
|
user = await Factory.build('user', {
|
|
id: 'updating-user',
|
|
})
|
|
authenticatedUser = await user.toJson()
|
|
})
|
|
|
|
it('creates a Location node with localized city/state/country names', async () => {
|
|
variables = {
|
|
...variables,
|
|
id: 'updating-user',
|
|
name: 'Updating user',
|
|
locationName: 'Welzheim, Baden-Württemberg, Germany',
|
|
}
|
|
await mutate({ mutation: updateUserMutation, variables })
|
|
const locations = await neode.cypher(
|
|
`MATCH (city:Location)-[:IS_IN]->(state:Location)-[:IS_IN]->(country:Location) return city {.*}, state {.*}, country {.*}`,
|
|
)
|
|
expect(
|
|
locations.records.map((record) => {
|
|
return {
|
|
city: record.get('city'),
|
|
state: record.get('state'),
|
|
country: record.get('country'),
|
|
}
|
|
}),
|
|
).toEqual(newlyCreatedNodesWithLocales)
|
|
})
|
|
})
|
|
})
|