diff --git a/src/graphql-schema.spec.js b/src/graphql-schema.spec.js index 69073444c..21b3f3d61 100644 --- a/src/graphql-schema.spec.js +++ b/src/graphql-schema.spec.js @@ -1,7 +1,7 @@ import { request } from 'graphql-request' import { create, cleanDatabase } from './seed/factories' import jwt from 'jsonwebtoken' -import { host } from './jest/helpers' +import { testServerHost as host } from './jest/helpers' describe('login', () => { const mutation = (params) => { diff --git a/src/jest/helpers.js b/src/jest/helpers.js index 01a26e9d3..cb86bf785 100644 --- a/src/jest/helpers.js +++ b/src/jest/helpers.js @@ -1,8 +1,8 @@ import { request } from 'graphql-request' -export const host = 'http://127.0.0.1:4123' +export const testServerHost = 'http://127.0.0.1:4123' -export async function authenticatedHeaders ({ email, password }) { +export async function authenticatedHeaders ({ email, password }, host = testServerHost) { const mutation = ` mutation { login(email:"${email}", password:"${password}"){ diff --git a/src/middleware/permissionsMiddleware.spec.js b/src/middleware/permissionsMiddleware.spec.js index cf86d11c9..481e340cb 100644 --- a/src/middleware/permissionsMiddleware.spec.js +++ b/src/middleware/permissionsMiddleware.spec.js @@ -1,5 +1,5 @@ import { create, cleanDatabase } from '../seed/factories' -import { host, authenticatedHeaders } from '../jest/helpers' +import { testServerHost as host, authenticatedHeaders } from '../jest/helpers' import { GraphQLClient } from 'graphql-request' describe('authorization', () => { diff --git a/src/seed/data/index.js b/src/seed/data/index.js index 5df9ee404..483ad065a 100644 --- a/src/seed/data/index.js +++ b/src/seed/data/index.js @@ -3,14 +3,12 @@ export default { Category: require('./categories.js').default, Tags: require('./tags.js').default, - User: require('./users.js').default, UserBadges: require('./users-badges.js').default, UserBlacklist: require('./users-blacklist.js').default, UserFollows: require('./users-follows.js').default, UserFriends: require('./users-friends.js').default, Organization: require('./organizations.js').default, - Post: require('./posts.js').default, Comment: require('./comments.js').default, UserShouts: require('./users-shouts.js').default diff --git a/src/seed/factories/index.js b/src/seed/factories/index.js index 74076872b..faf2b93cc 100644 --- a/src/seed/factories/index.js +++ b/src/seed/factories/index.js @@ -1,3 +1,4 @@ +import { GraphQLClient } from 'graphql-request' import ApolloClient from 'apollo-client' import gql from 'graphql-tag' import dotenv from 'dotenv' @@ -6,25 +7,30 @@ import { InMemoryCache } from 'apollo-cache-inmemory' import neo4j from '../../bootstrap/neo4j' import fetch from 'node-fetch' +export const seedServerHost = 'http://127.0.0.1:4001' + dotenv.config() const apolloClient = new ApolloClient({ - link: new HttpLink({ uri: 'http://localhost:4001', fetch }), + link: new HttpLink({ uri: seedServerHost, fetch }), cache: new InMemoryCache() }) const driver = neo4j().getDriver() const builders = { - 'user': require('./users.js').default + 'user': require('./users.js').default, + 'post': require('./posts.js').default } const buildMutation = (model, parameters) => { return builders[model](parameters) } -const create = (model, parameters) => { - return apolloClient.mutate({ mutation: gql(buildMutation(model, parameters)) }) +const create = (model, parameters, options) => { + const graphQLClient = new GraphQLClient(seedServerHost, options) + const mutation = buildMutation(model, parameters) + return graphQLClient.request(mutation) } const cleanDatabase = async () => { diff --git a/src/seed/factories/posts.js b/src/seed/factories/posts.js new file mode 100644 index 000000000..3dc240d9f --- /dev/null +++ b/src/seed/factories/posts.js @@ -0,0 +1,34 @@ + +import faker from 'faker' + +export default function (params) { + const { + id = `u${faker.random.number()}`, + title = faker.lorem.sentence(), + content = [ + faker.lorem.sentence(), + faker.lorem.sentence(), + faker.lorem.sentence(), + faker.lorem.sentence(), + faker.lorem.sentence(), + ].join('. '), + image = faker.image.imageUrl(), + visibility = 'public', + disabled = false, + deleted = false + } = params + + return ` + mutation { + CreatePost( + id: "${id}", + title: "${title}", + content: "${content}", + image: "${image}", + visibility: ${visibility}, + disabled: ${disabled}, + deleted: ${deleted} + ) { id, title } + } + ` +} diff --git a/src/seed/factories/users.js b/src/seed/factories/users.js index 452059a73..7ead2d9f0 100644 --- a/src/seed/factories/users.js +++ b/src/seed/factories/users.js @@ -2,23 +2,27 @@ import faker from 'faker' export default function (params) { const { + id = `u${faker.random.number()}`, name = faker.name.findName(), email = faker.internet.email(), password = '1234', - avatar = faker.internet.avatar() + role = 'user', + avatar = faker.internet.avatar(), + disabled = false, + deleted = false } = params return ` mutation { - u1: CreateUser( - id: "u1", + CreateUser( + id: "${id}", name: "${name}", password: "${password}", email: "${email}", avatar: "${avatar}", - role: admin, - disabled: false, - deleted: false) { + role: ${role}, + disabled: ${disabled}, + deleted: ${deleted}) { id name email diff --git a/src/seed/seed-db.js b/src/seed/seed-db.js index e6adbe1a2..7b9f3b775 100644 --- a/src/seed/seed-db.js +++ b/src/seed/seed-db.js @@ -1,4 +1,5 @@ -import { apolloClient } from './factories' +import { create, apolloClient, seedServerHost as host } from './factories' +import { authenticatedHeaders } from '../jest/helpers.js' import gql from 'graphql-tag' import asyncForEach from '../helpers/asyncForEach' import seed from './data' @@ -6,6 +7,32 @@ import seed from './data' (async function () { // prefer factories + try { + const [admin, moderator, user, ...otherUsers] = await Promise.all([ + create('user', {id: 'u1', name: 'Peter Lustig' , role: 'admin' , email: 'admin@example.org', password: '1234'}), + create('user', {id: 'u2', name: 'Bob der Baumeister', role: 'moderator', email: 'moderator@example.org'}), + create('user', {id: 'u3', name: 'Jenny Rostock' , role: 'user' , email: 'user@example.org'}), + create('user', {id: 'u4', name: 'Angie Banjie' , role: 'user' , email: 'angie@example.org'}), + ]) + + // TODO: other users, not only admin, are authors of a post + const headers = await authenticatedHeaders({ + email: 'admin@example.org', + password: '1234' + }, host) + await create('post', {id: 'p1'}, { headers } ) + await create('post', {id: 'p2'}, { headers } ) + await create('post', {id: 'p3'}, { headers } ) + await create('post', {id: 'p4'}, { headers } ) + await create('post', {id: 'p5'}, { headers } ) + await create('post', {id: 'p6'}, { headers } ) + } catch(err) { + /* eslint-disable-next-line no-console */ + console.error(err) + process.exit(1) + } + + let data = {} // legacy seeds await asyncForEach(Object.keys(seed), async key => {