Fix seeds without the use of neode

@appinteractive ping
This commit is contained in:
Robert Schäfer 2019-02-18 15:35:45 +01:00
parent f024bd3821
commit 1734554a88
8 changed files with 86 additions and 17 deletions

View File

@ -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) => {

View File

@ -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}"){

View File

@ -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', () => {

View File

@ -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

View File

@ -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 () => {

View File

@ -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 }
}
`
}

View File

@ -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

View File

@ -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 => {