From b063847849a84db885337dc8e84e75ddaf87011f Mon Sep 17 00:00:00 2001 From: roschaefer Date: Sun, 19 Jan 2020 23:53:36 +0100 Subject: [PATCH] refactor: Make `db:setup` init stage of `migrate` --- .travis.yml | 2 +- backend/README.md | 6 +- backend/package.json | 6 +- .../src/activitypub/routes/webfinger.spec.js | 4 +- backend/src/{seed/reset-db.js => db/clean.js} | 2 +- backend/src/db/migrate/store.js | 10 +- ...387929122-merge_duplicate_user_accounts.js | 89 ++++++------ backend/src/{bootstrap => db}/neo4j.js | 0 backend/src/{seed/seed-db.js => db/seed.js} | 4 +- backend/src/db/setup.js | 7 - backend/src/{seed => }/factories/badges.js | 0 .../src/{seed => }/factories/categories.js | 0 backend/src/{seed => }/factories/comments.js | 0 backend/src/{seed => }/factories/donations.js | 0 .../{seed => }/factories/emailAddresses.js | 0 backend/src/{seed => }/factories/index.js | 2 +- backend/src/{seed => }/factories/locations.js | 0 backend/src/{seed => }/factories/posts.js | 0 backend/src/{seed => }/factories/reports.js | 0 .../src/{seed => }/factories/socialMedia.js | 0 backend/src/{seed => }/factories/tags.js | 0 .../factories/unverifiedEmailAddresses.js | 0 backend/src/{seed => }/factories/users.js | 2 +- backend/src/jest/helpers.js | 5 - backend/src/jwt/decode.spec.js | 4 +- .../hashtags/hashtagsMiddleware.spec.js | 4 +- .../notificationsMiddleware.spec.js | 4 +- .../src/middleware/orderByMiddleware.spec.js | 4 +- .../src/middleware/permissionsMiddleware.js | 2 +- .../middleware/permissionsMiddleware.spec.js | 4 +- .../src/middleware/slugifyMiddleware.spec.js | 4 +- .../softDelete/softDeleteMiddleware.spec.js | 4 +- .../validation/validationMiddleware.spec.js | 4 +- backend/src/models/User.spec.js | 4 +- backend/src/schema/resolvers/comments.spec.js | 4 +- .../src/schema/resolvers/donations.spec.js | 4 +- backend/src/schema/resolvers/emails.spec.js | 4 +- backend/src/schema/resolvers/follow.js | 2 +- backend/src/schema/resolvers/follow.spec.js | 4 +- .../src/schema/resolvers/locations.spec.js | 4 +- .../src/schema/resolvers/moderation.spec.js | 4 +- .../schema/resolvers/notifications.spec.js | 4 +- .../schema/resolvers/passwordReset.spec.js | 4 +- backend/src/schema/resolvers/posts.spec.js | 4 +- backend/src/schema/resolvers/registration.js | 2 +- .../src/schema/resolvers/registration.spec.js | 4 +- backend/src/schema/resolvers/reports.spec.js | 4 +- backend/src/schema/resolvers/rewards.js | 2 +- backend/src/schema/resolvers/rewards.spec.js | 4 +- backend/src/schema/resolvers/shout.spec.js | 4 +- backend/src/schema/resolvers/socialMedia.js | 2 +- .../src/schema/resolvers/socialMedia.spec.js | 4 +- .../src/schema/resolvers/statistics.spec.js | 4 +- .../src/schema/resolvers/user_management.js | 2 +- .../schema/resolvers/user_management.spec.js | 4 +- backend/src/schema/resolvers/users.js | 2 +- backend/src/schema/resolvers/users.spec.js | 4 +- .../resolvers/users/blockedUsers.spec.js | 4 +- .../schema/resolvers/users/location.spec.js | 4 +- backend/src/seed/seed-helpers.js | 134 ------------------ backend/src/server.js | 2 +- backend/test/features/support/steps.js | 2 +- cypress/support/factories.js | 4 +- features/support/steps.js | 2 +- 64 files changed, 139 insertions(+), 270 deletions(-) rename backend/src/{seed/reset-db.js => db/clean.js} (91%) rename backend/src/{bootstrap => db}/neo4j.js (100%) rename backend/src/{seed/seed-db.js => db/seed.js} (99%) delete mode 100644 backend/src/db/setup.js rename backend/src/{seed => }/factories/badges.js (100%) rename backend/src/{seed => }/factories/categories.js (100%) rename backend/src/{seed => }/factories/comments.js (100%) rename backend/src/{seed => }/factories/donations.js (100%) rename backend/src/{seed => }/factories/emailAddresses.js (100%) rename backend/src/{seed => }/factories/index.js (96%) rename backend/src/{seed => }/factories/locations.js (100%) rename backend/src/{seed => }/factories/posts.js (100%) rename backend/src/{seed => }/factories/reports.js (100%) rename backend/src/{seed => }/factories/socialMedia.js (100%) rename backend/src/{seed => }/factories/tags.js (100%) rename backend/src/{seed => }/factories/unverifiedEmailAddresses.js (100%) rename backend/src/{seed => }/factories/users.js (95%) delete mode 100644 backend/src/jest/helpers.js delete mode 100644 backend/src/seed/seed-helpers.js diff --git a/.travis.yml b/.travis.yml index 19ba3ff9d..110655c79 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ before_script: - docker-compose -f docker-compose.yml -f docker-compose.build-and-test.yml build # just tagging, just be quite fast - docker-compose -f docker-compose.yml -f docker-compose.build-and-test.yml up -d - wait-on http://localhost:7474 - - docker-compose -f docker-compose.yml -f docker-compose.build-and-test.yml exec neo4j db_setup + - docker-compose -f docker-compose.yml -f docker-compose.build-and-test.yml exec backend yarn run db:migrate init script: - export CYPRESS_RETRIES=1 diff --git a/backend/README.md b/backend/README.md index 5474c30d7..c42c5ac85 100644 --- a/backend/README.md +++ b/backend/README.md @@ -61,7 +61,7 @@ backend is running: {% tabs %} {% tab title="Docker" %} ```bash -docker-compose exec backend yarn run db:setup +docker-compose exec backend yarn run db:migrate init ``` {% endtab %} @@ -69,7 +69,7 @@ docker-compose exec backend yarn run db:setup ```bash # in folder backend/ # make sure your database is running on http://localhost:7474/browser/ -yarn run db:setup +yarn run db:migrate init ``` {% endtab %} {% endtabs %} @@ -94,7 +94,7 @@ $ docker-compose exec backend yarn run db:reset # you could also wipe out your neo4j database and delete all volumes with: $ docker-compose down -v # if container is not running, run this command to set up your database indeces and contstraints -$ docker-compose run neo4j db_setup +$ docker-compose run backend yarn run db:migrate init ``` {% endtab %} diff --git a/backend/package.json b/backend/package.json index bbdf951ad..3c9fda287 100644 --- a/backend/package.json +++ b/backend/package.json @@ -10,9 +10,9 @@ "dev:debug": "nodemon --exec babel-node --inspect=0.0.0.0:9229 src/ -e js,gql", "lint": "eslint src --config .eslintrc.js", "test": "jest --forceExit --detectOpenHandles --runInBand", - "db:reset": "babel-node src/seed/reset-db.js", - "db:seed": "babel-node src/seed/seed-db.js", - "db:setup": "babel-node src/db/setup.js", + "db:clean": "babel-node src/db/clean.js", + "db:reset": "yarn run db:clean", + "db:seed": "babel-node src/db/seed.js", "__migrate": "migrate --compiler 'js:@babel/register' --migrations-dir ./src/db/migrations", "db:migrate": "yarn run __migrate --store ./src/db/migrate/store.js", "db:migrate:create": "yarn run __migrate --template-file ./src/db/migrate/template.js create", diff --git a/backend/src/activitypub/routes/webfinger.spec.js b/backend/src/activitypub/routes/webfinger.spec.js index 4e9b2196d..06ca4577d 100644 --- a/backend/src/activitypub/routes/webfinger.spec.js +++ b/backend/src/activitypub/routes/webfinger.spec.js @@ -1,6 +1,6 @@ import { handler } from './webfinger' -import Factory from '../../seed/factories' -import { getDriver } from '../../bootstrap/neo4j' +import Factory from '../../factories' +import { getDriver } from '../../db/neo4j' let resource, res, json, status, contentType diff --git a/backend/src/seed/reset-db.js b/backend/src/db/clean.js similarity index 91% rename from backend/src/seed/reset-db.js rename to backend/src/db/clean.js index 125d135d8..cbb1412e2 100644 --- a/backend/src/seed/reset-db.js +++ b/backend/src/db/clean.js @@ -1,4 +1,4 @@ -import { cleanDatabase } from './factories' +import { cleanDatabase } from '../factories' if (process.env.NODE_ENV === 'production') { throw new Error(`You cannot clean the database in production environment!`) diff --git a/backend/src/db/migrate/store.js b/backend/src/db/migrate/store.js index 68bf4e8d9..9984b3971 100644 --- a/backend/src/db/migrate/store.js +++ b/backend/src/db/migrate/store.js @@ -1,6 +1,14 @@ -import { getDriver } from '../../bootstrap/neo4j' +import { getDriver, getNeode } from '../../db/neo4j' class Store { + async init(fn) { + const neode = getNeode() + await getNeode().schema.install() + // eslint-disable-next-line no-console + console.log('Successfully created database indices and constraints!') + neode.driver.close() + } + async load(fn) { const driver = getDriver() const session = driver.session() diff --git a/backend/src/db/migrations/1579387929122-merge_duplicate_user_accounts.js b/backend/src/db/migrations/1579387929122-merge_duplicate_user_accounts.js index 7d2abcdeb..9dbc8ad05 100644 --- a/backend/src/db/migrations/1579387929122-merge_duplicate_user_accounts.js +++ b/backend/src/db/migrations/1579387929122-merge_duplicate_user_accounts.js @@ -1,8 +1,7 @@ -import { throwError, of, concat } from 'rxjs' -import { tap, flatMap, mergeMap, map, catchError, filter } from 'rxjs/operators' -import CONFIG from '../../src/config' -import { getNeode, getDriver } from '../../src/bootstrap/neo4j' -import normalizeEmail from '../../src/schema/resolvers//helpers/normalizeEmail' +import { throwError, concat } from 'rxjs' +import { flatMap, mergeMap, map, catchError, filter } from 'rxjs/operators' +import { getDriver } from '../neo4j' +import normalizeEmail from '../../schema/resolvers//helpers/normalizeEmail' export const description = ` This migration merges duplicate :User and :EmailAddress nodes. It became @@ -13,7 +12,7 @@ export const description = ` This led to about 40 duplicate user and email address nodes in our database. ` -export function up (next) { +export function up(next) { const driver = getDriver() const rxSession = driver.rxSession() rxSession @@ -22,18 +21,19 @@ export function up (next) { flatMap(txc => concat( txc - .run("MATCH (email:EmailAddress) RETURN email {.email}") - .records() - .pipe( - map(record => { - const { email } = record.get('email') - const normalizedEmail = normalizeEmail(email) - return { email, normalizedEmail } - }), - filter(({email, normalizedEmail}) => email !== normalizedEmail), - mergeMap(({email, normalizedEmail})=> { - return txc - .run(` + .run('MATCH (email:EmailAddress) RETURN email {.email}') + .records() + .pipe( + map(record => { + const { email } = record.get('email') + const normalizedEmail = normalizeEmail(email) + return { email, normalizedEmail } + }), + filter(({ email, normalizedEmail }) => email !== normalizedEmail), + mergeMap(({ email, normalizedEmail }) => { + return txc + .run( + ` MATCH (oldUser:User)-[:PRIMARY_EMAIL]->(oldEmail:EmailAddress {email: $email}), (oldUser)-[previousRelationship]-(oldEmail) MATCH (user:User)-[:PRIMARY_EMAIL]->(email:EmailAddress {email: $normalizedEmail}) DELETE previousRelationship @@ -41,37 +41,44 @@ export function up (next) { CALL apoc.refactor.mergeNodes([user, oldUser], { properties: 'discard', mergeRels: true }) YIELD node as mergedUser CALL apoc.refactor.mergeNodes([email, oldEmail], { properties: 'discard', mergeRels: true }) YIELD node as mergedEmail RETURN user {.*}, email {.*} - `, { email, normalizedEmail }) - .records() - .pipe( - map(r => ({ - oldEmail: email, - email: r.get('email'), - user: r.get('user'), - })) - ) - }), - ), + `, + { email, normalizedEmail }, + ) + .records() + .pipe( + map(r => ({ + oldEmail: email, + email: r.get('email'), + user: r.get('user'), + })), + ) + }), + ), txc.commit(), - ).pipe(catchError(err => txc.rollback().pipe(throwError(err)))) - ) + ).pipe(catchError(err => txc.rollback().pipe(throwError(err)))), + ), ) .subscribe({ - next: ({ user, email, oldUser, oldEmail }) => console.log(` - Merged: - ============================= - userId: ${user.id} - email: ${oldEmail} => ${email.email} - ============================= - `), + next: ({ user, email, oldUser, oldEmail }) => + // eslint-disable-next-line no-console + console.log(` + Merged: + ============================= + userId: ${user.id} + email: ${oldEmail} => ${email.email} + ============================= + `), complete: () => { + // eslint-disable-next-line no-console console.log('Merging of duplicate users completed') next() }, - error: error => throw new Error(error) + error: error => { + throw new Error(error) + }, }) } -export function down () { - throw new Error("Irreversible migration") +export function down() { + throw new Error('Irreversible migration') } diff --git a/backend/src/bootstrap/neo4j.js b/backend/src/db/neo4j.js similarity index 100% rename from backend/src/bootstrap/neo4j.js rename to backend/src/db/neo4j.js diff --git a/backend/src/seed/seed-db.js b/backend/src/db/seed.js similarity index 99% rename from backend/src/seed/seed-db.js rename to backend/src/db/seed.js index 4178169bb..f3c46b0d4 100644 --- a/backend/src/seed/seed-db.js +++ b/backend/src/db/seed.js @@ -2,8 +2,8 @@ import faker from 'faker' import sample from 'lodash/sample' import { createTestClient } from 'apollo-server-testing' import createServer from '../server' -import Factory from './factories' -import { getNeode, getDriver } from '../bootstrap/neo4j' +import Factory from '../factories' +import { getNeode, getDriver } from '../db/neo4j' import { gql } from '../helpers/jest' const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl'] diff --git a/backend/src/db/setup.js b/backend/src/db/setup.js deleted file mode 100644 index 33667ff1b..000000000 --- a/backend/src/db/setup.js +++ /dev/null @@ -1,7 +0,0 @@ -import { getNeode } from '../bootstrap/neo4j' - -(async() => { - await getNeode().schema.install() - console.log('Schema installed!') - process.exit(0) -})() diff --git a/backend/src/seed/factories/badges.js b/backend/src/factories/badges.js similarity index 100% rename from backend/src/seed/factories/badges.js rename to backend/src/factories/badges.js diff --git a/backend/src/seed/factories/categories.js b/backend/src/factories/categories.js similarity index 100% rename from backend/src/seed/factories/categories.js rename to backend/src/factories/categories.js diff --git a/backend/src/seed/factories/comments.js b/backend/src/factories/comments.js similarity index 100% rename from backend/src/seed/factories/comments.js rename to backend/src/factories/comments.js diff --git a/backend/src/seed/factories/donations.js b/backend/src/factories/donations.js similarity index 100% rename from backend/src/seed/factories/donations.js rename to backend/src/factories/donations.js diff --git a/backend/src/seed/factories/emailAddresses.js b/backend/src/factories/emailAddresses.js similarity index 100% rename from backend/src/seed/factories/emailAddresses.js rename to backend/src/factories/emailAddresses.js diff --git a/backend/src/seed/factories/index.js b/backend/src/factories/index.js similarity index 96% rename from backend/src/seed/factories/index.js rename to backend/src/factories/index.js index ff6a52a76..c3ab14f64 100644 --- a/backend/src/seed/factories/index.js +++ b/backend/src/factories/index.js @@ -1,4 +1,4 @@ -import { getDriver, getNeode } from '../../bootstrap/neo4j' +import { getDriver, getNeode } from '../db/neo4j' const factories = { Badge: require('./badges.js').default, diff --git a/backend/src/seed/factories/locations.js b/backend/src/factories/locations.js similarity index 100% rename from backend/src/seed/factories/locations.js rename to backend/src/factories/locations.js diff --git a/backend/src/seed/factories/posts.js b/backend/src/factories/posts.js similarity index 100% rename from backend/src/seed/factories/posts.js rename to backend/src/factories/posts.js diff --git a/backend/src/seed/factories/reports.js b/backend/src/factories/reports.js similarity index 100% rename from backend/src/seed/factories/reports.js rename to backend/src/factories/reports.js diff --git a/backend/src/seed/factories/socialMedia.js b/backend/src/factories/socialMedia.js similarity index 100% rename from backend/src/seed/factories/socialMedia.js rename to backend/src/factories/socialMedia.js diff --git a/backend/src/seed/factories/tags.js b/backend/src/factories/tags.js similarity index 100% rename from backend/src/seed/factories/tags.js rename to backend/src/factories/tags.js diff --git a/backend/src/seed/factories/unverifiedEmailAddresses.js b/backend/src/factories/unverifiedEmailAddresses.js similarity index 100% rename from backend/src/seed/factories/unverifiedEmailAddresses.js rename to backend/src/factories/unverifiedEmailAddresses.js diff --git a/backend/src/seed/factories/users.js b/backend/src/factories/users.js similarity index 95% rename from backend/src/seed/factories/users.js rename to backend/src/factories/users.js index d56c42d0a..57f69b76b 100644 --- a/backend/src/seed/factories/users.js +++ b/backend/src/factories/users.js @@ -1,6 +1,6 @@ import faker from 'faker' import uuid from 'uuid/v4' -import encryptPassword from '../../helpers/encryptPassword' +import encryptPassword from '../helpers/encryptPassword' import slugify from 'slug' export default function create() { diff --git a/backend/src/jest/helpers.js b/backend/src/jest/helpers.js deleted file mode 100644 index 201d68c14..000000000 --- a/backend/src/jest/helpers.js +++ /dev/null @@ -1,5 +0,0 @@ -//* This is a fake ES2015 template string, just to benefit of syntax -// highlighting of `gql` template strings in certain editors. -export function gql(strings) { - return strings.join('') -} diff --git a/backend/src/jwt/decode.spec.js b/backend/src/jwt/decode.spec.js index 7aa703d97..71444a3e5 100644 --- a/backend/src/jwt/decode.spec.js +++ b/backend/src/jwt/decode.spec.js @@ -1,5 +1,5 @@ -import Factory from '../seed/factories/index' -import { getDriver, getNeode } from '../bootstrap/neo4j' +import Factory from '../factories/index' +import { getDriver, getNeode } from '../db/neo4j' import decode from './decode' const factory = Factory() diff --git a/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js b/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js index 0fa1e2dc5..2247e692d 100644 --- a/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js +++ b/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js @@ -1,7 +1,7 @@ import { gql } from '../../helpers/jest' -import Factory from '../../seed/factories' +import Factory from '../../factories' import { createTestClient } from 'apollo-server-testing' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' let server diff --git a/backend/src/middleware/notifications/notificationsMiddleware.spec.js b/backend/src/middleware/notifications/notificationsMiddleware.spec.js index c5f5990d3..136388b88 100644 --- a/backend/src/middleware/notifications/notificationsMiddleware.spec.js +++ b/backend/src/middleware/notifications/notificationsMiddleware.spec.js @@ -1,7 +1,7 @@ import { gql } from '../../helpers/jest' -import Factory from '../../seed/factories' +import Factory from '../../factories' import { createTestClient } from 'apollo-server-testing' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' let server, query, mutate, notifiedUser, authenticatedUser diff --git a/backend/src/middleware/orderByMiddleware.spec.js b/backend/src/middleware/orderByMiddleware.spec.js index 129f3a8b4..8d92a5b5d 100644 --- a/backend/src/middleware/orderByMiddleware.spec.js +++ b/backend/src/middleware/orderByMiddleware.spec.js @@ -1,6 +1,6 @@ import { gql } from '../helpers/jest' -import Factory from '../seed/factories' -import { getNeode, getDriver } from '../bootstrap/neo4j' +import Factory from '../factories' +import { getNeode, getDriver } from '../db/neo4j' import { createTestClient } from 'apollo-server-testing' import createServer from '../server' diff --git a/backend/src/middleware/permissionsMiddleware.js b/backend/src/middleware/permissionsMiddleware.js index a4c41871f..3e5bbd6e9 100644 --- a/backend/src/middleware/permissionsMiddleware.js +++ b/backend/src/middleware/permissionsMiddleware.js @@ -1,5 +1,5 @@ import { rule, shield, deny, allow, or } from 'graphql-shield' -import { getNeode } from '../bootstrap/neo4j' +import { getNeode } from '../db/neo4j' import CONFIG from '../config' const debug = !!CONFIG.DEBUG diff --git a/backend/src/middleware/permissionsMiddleware.spec.js b/backend/src/middleware/permissionsMiddleware.spec.js index 60aff961d..a4f13ea0c 100644 --- a/backend/src/middleware/permissionsMiddleware.spec.js +++ b/backend/src/middleware/permissionsMiddleware.spec.js @@ -1,8 +1,8 @@ import { createTestClient } from 'apollo-server-testing' import createServer from '../server' -import Factory from '../seed/factories' +import Factory from '../factories' import { gql } from '../helpers/jest' -import { getDriver, getNeode } from '../bootstrap/neo4j' +import { getDriver, getNeode } from '../db/neo4j' const factory = Factory() const instance = getNeode() diff --git a/backend/src/middleware/slugifyMiddleware.spec.js b/backend/src/middleware/slugifyMiddleware.spec.js index 1c2e59317..cf9f0941c 100644 --- a/backend/src/middleware/slugifyMiddleware.spec.js +++ b/backend/src/middleware/slugifyMiddleware.spec.js @@ -1,6 +1,6 @@ -import Factory from '../seed/factories' +import Factory from '../factories' import { gql } from '../helpers/jest' -import { getNeode, getDriver } from '../bootstrap/neo4j' +import { getNeode, getDriver } from '../db/neo4j' import createServer from '../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/middleware/softDelete/softDeleteMiddleware.spec.js b/backend/src/middleware/softDelete/softDeleteMiddleware.spec.js index b7c16dfd3..6e1735af2 100644 --- a/backend/src/middleware/softDelete/softDeleteMiddleware.spec.js +++ b/backend/src/middleware/softDelete/softDeleteMiddleware.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/middleware/validation/validationMiddleware.spec.js b/backend/src/middleware/validation/validationMiddleware.spec.js index d093f939a..38cd010b4 100644 --- a/backend/src/middleware/validation/validationMiddleware.spec.js +++ b/backend/src/middleware/validation/validationMiddleware.spec.js @@ -1,6 +1,6 @@ import { gql } from '../../helpers/jest' -import Factory from '../../seed/factories' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import Factory from '../../factories' +import { getNeode, getDriver } from '../../db/neo4j' import { createTestClient } from 'apollo-server-testing' import createServer from '../../server' diff --git a/backend/src/models/User.spec.js b/backend/src/models/User.spec.js index 433cc5a6f..7bdde7014 100644 --- a/backend/src/models/User.spec.js +++ b/backend/src/models/User.spec.js @@ -1,5 +1,5 @@ -import Factory from '../seed/factories' -import { getNeode } from '../bootstrap/neo4j' +import Factory from '../factories' +import { getNeode } from '../db/neo4j' const factory = Factory() const neode = getNeode() diff --git a/backend/src/schema/resolvers/comments.spec.js b/backend/src/schema/resolvers/comments.spec.js index f96a60514..9877161db 100644 --- a/backend/src/schema/resolvers/comments.spec.js +++ b/backend/src/schema/resolvers/comments.spec.js @@ -1,8 +1,8 @@ -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' import { createTestClient } from 'apollo-server-testing' import createServer from '../../server' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' const driver = getDriver() const neode = getNeode() diff --git a/backend/src/schema/resolvers/donations.spec.js b/backend/src/schema/resolvers/donations.spec.js index d8dd5db06..c382eb475 100644 --- a/backend/src/schema/resolvers/donations.spec.js +++ b/backend/src/schema/resolvers/donations.spec.js @@ -1,7 +1,7 @@ import { createTestClient } from 'apollo-server-testing' -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' let mutate, query, authenticatedUser, variables diff --git a/backend/src/schema/resolvers/emails.spec.js b/backend/src/schema/resolvers/emails.spec.js index 82ce43337..97a1f0c29 100644 --- a/backend/src/schema/resolvers/emails.spec.js +++ b/backend/src/schema/resolvers/emails.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getDriver, getNeode } from '../../bootstrap/neo4j' +import { getDriver, getNeode } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/follow.js b/backend/src/schema/resolvers/follow.js index 0416fe3d2..80cce8400 100644 --- a/backend/src/schema/resolvers/follow.js +++ b/backend/src/schema/resolvers/follow.js @@ -1,4 +1,4 @@ -import { getNeode } from '../../bootstrap/neo4j' +import { getNeode } from '../../db/neo4j' const neode = getNeode() diff --git a/backend/src/schema/resolvers/follow.spec.js b/backend/src/schema/resolvers/follow.spec.js index ff884666e..ad836a461 100644 --- a/backend/src/schema/resolvers/follow.spec.js +++ b/backend/src/schema/resolvers/follow.spec.js @@ -1,6 +1,6 @@ import { createTestClient } from 'apollo-server-testing' -import Factory from '../../seed/factories' -import { getDriver, getNeode } from '../../bootstrap/neo4j' +import Factory from '../../factories' +import { getDriver, getNeode } from '../../db/neo4j' import createServer from '../../server' import { gql } from '../../helpers/jest' diff --git a/backend/src/schema/resolvers/locations.spec.js b/backend/src/schema/resolvers/locations.spec.js index f4a846afd..aba11f9bc 100644 --- a/backend/src/schema/resolvers/locations.spec.js +++ b/backend/src/schema/resolvers/locations.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/moderation.spec.js b/backend/src/schema/resolvers/moderation.spec.js index f76cbdf46..cd502be75 100644 --- a/backend/src/schema/resolvers/moderation.spec.js +++ b/backend/src/schema/resolvers/moderation.spec.js @@ -1,7 +1,7 @@ import { createTestClient } from 'apollo-server-testing' -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' const factory = Factory() diff --git a/backend/src/schema/resolvers/notifications.spec.js b/backend/src/schema/resolvers/notifications.spec.js index 89bbd2528..a5c46e930 100644 --- a/backend/src/schema/resolvers/notifications.spec.js +++ b/backend/src/schema/resolvers/notifications.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getDriver } from '../../bootstrap/neo4j' +import { getDriver } from '../../db/neo4j' import { createTestClient } from 'apollo-server-testing' import createServer from '../.././server' diff --git a/backend/src/schema/resolvers/passwordReset.spec.js b/backend/src/schema/resolvers/passwordReset.spec.js index be3c8c085..d7b3a0157 100644 --- a/backend/src/schema/resolvers/passwordReset.spec.js +++ b/backend/src/schema/resolvers/passwordReset.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createPasswordReset from './helpers/createPasswordReset' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/posts.spec.js b/backend/src/schema/resolvers/posts.spec.js index dcbd16d5d..71d1aa359 100644 --- a/backend/src/schema/resolvers/posts.spec.js +++ b/backend/src/schema/resolvers/posts.spec.js @@ -1,7 +1,7 @@ import { createTestClient } from 'apollo-server-testing' -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' const driver = getDriver() diff --git a/backend/src/schema/resolvers/registration.js b/backend/src/schema/resolvers/registration.js index e03f294cd..1e7708395 100644 --- a/backend/src/schema/resolvers/registration.js +++ b/backend/src/schema/resolvers/registration.js @@ -1,5 +1,5 @@ import { UserInputError } from 'apollo-server' -import { getNeode } from '../../bootstrap/neo4j' +import { getNeode } from '../../db/neo4j' import fileUpload from './fileUpload' import encryptPassword from '../../helpers/encryptPassword' import generateNonce from './helpers/generateNonce' diff --git a/backend/src/schema/resolvers/registration.spec.js b/backend/src/schema/resolvers/registration.spec.js index 8f3a7ac39..23b1f9d2a 100644 --- a/backend/src/schema/resolvers/registration.spec.js +++ b/backend/src/schema/resolvers/registration.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getDriver, getNeode } from '../../bootstrap/neo4j' +import { getDriver, getNeode } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/reports.spec.js b/backend/src/schema/resolvers/reports.spec.js index 8b1bb925d..7f827b111 100644 --- a/backend/src/schema/resolvers/reports.spec.js +++ b/backend/src/schema/resolvers/reports.spec.js @@ -1,8 +1,8 @@ import { createTestClient } from 'apollo-server-testing' import createServer from '../.././server' -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getDriver, getNeode } from '../../bootstrap/neo4j' +import { getDriver, getNeode } from '../../db/neo4j' const factory = Factory() const instance = getNeode() diff --git a/backend/src/schema/resolvers/rewards.js b/backend/src/schema/resolvers/rewards.js index 44bdab770..311cfd2e6 100644 --- a/backend/src/schema/resolvers/rewards.js +++ b/backend/src/schema/resolvers/rewards.js @@ -1,4 +1,4 @@ -import { getNeode } from '../../bootstrap/neo4j' +import { getNeode } from '../../db/neo4j' import { UserInputError } from 'apollo-server' const neode = getNeode() diff --git a/backend/src/schema/resolvers/rewards.spec.js b/backend/src/schema/resolvers/rewards.spec.js index e6f67ecab..fe2807f25 100644 --- a/backend/src/schema/resolvers/rewards.spec.js +++ b/backend/src/schema/resolvers/rewards.spec.js @@ -1,7 +1,7 @@ import { createTestClient } from 'apollo-server-testing' -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' const factory = Factory() diff --git a/backend/src/schema/resolvers/shout.spec.js b/backend/src/schema/resolvers/shout.spec.js index e747946aa..104a28399 100644 --- a/backend/src/schema/resolvers/shout.spec.js +++ b/backend/src/schema/resolvers/shout.spec.js @@ -1,7 +1,7 @@ import { createTestClient } from 'apollo-server-testing' -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' let mutate, query, authenticatedUser, variables diff --git a/backend/src/schema/resolvers/socialMedia.js b/backend/src/schema/resolvers/socialMedia.js index c206778e5..c5b9dcd91 100644 --- a/backend/src/schema/resolvers/socialMedia.js +++ b/backend/src/schema/resolvers/socialMedia.js @@ -1,4 +1,4 @@ -import { getNeode } from '../../bootstrap/neo4j' +import { getNeode } from '../../db/neo4j' import Resolver from './helpers/Resolver' const neode = getNeode() diff --git a/backend/src/schema/resolvers/socialMedia.spec.js b/backend/src/schema/resolvers/socialMedia.spec.js index 8f6d91d43..f292b58a0 100644 --- a/backend/src/schema/resolvers/socialMedia.spec.js +++ b/backend/src/schema/resolvers/socialMedia.spec.js @@ -1,8 +1,8 @@ import { createTestClient } from 'apollo-server-testing' import createServer from '../../server' -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' const driver = getDriver() const factory = Factory() diff --git a/backend/src/schema/resolvers/statistics.spec.js b/backend/src/schema/resolvers/statistics.spec.js index 48baf00cd..e2b9dafe4 100644 --- a/backend/src/schema/resolvers/statistics.spec.js +++ b/backend/src/schema/resolvers/statistics.spec.js @@ -1,7 +1,7 @@ import { createTestClient } from 'apollo-server-testing' -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' let query, authenticatedUser diff --git a/backend/src/schema/resolvers/user_management.js b/backend/src/schema/resolvers/user_management.js index 4d035d9fa..4d40a6f63 100644 --- a/backend/src/schema/resolvers/user_management.js +++ b/backend/src/schema/resolvers/user_management.js @@ -1,7 +1,7 @@ import encode from '../../jwt/encode' import bcrypt from 'bcryptjs' import { AuthenticationError } from 'apollo-server' -import { getNeode } from '../../bootstrap/neo4j' +import { getNeode } from '../../db/neo4j' import normalizeEmail from './helpers/normalizeEmail' import log from './helpers/databaseLogger' diff --git a/backend/src/schema/resolvers/user_management.spec.js b/backend/src/schema/resolvers/user_management.spec.js index 3527e5dc2..5e7043e74 100644 --- a/backend/src/schema/resolvers/user_management.spec.js +++ b/backend/src/schema/resolvers/user_management.spec.js @@ -1,11 +1,11 @@ import jwt from 'jsonwebtoken' import CONFIG from './../../config' -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' import { createTestClient } from 'apollo-server-testing' import createServer, { context } from '../../server' import encode from '../../jwt/encode' -import { getNeode } from '../../bootstrap/neo4j' +import { getNeode } from '../../db/neo4j' const factory = Factory() const neode = getNeode() diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js index 0b3f13631..6183511f1 100644 --- a/backend/src/schema/resolvers/users.js +++ b/backend/src/schema/resolvers/users.js @@ -1,6 +1,6 @@ import { neo4jgraphql } from 'neo4j-graphql-js' import fileUpload from './fileUpload' -import { getNeode } from '../../bootstrap/neo4j' +import { getNeode } from '../../db/neo4j' import { UserInputError, ForbiddenError } from 'apollo-server' import Resolver from './helpers/Resolver' import log from './helpers/databaseLogger' diff --git a/backend/src/schema/resolvers/users.spec.js b/backend/src/schema/resolvers/users.spec.js index 5d1ebd8e2..cfd84fcf7 100644 --- a/backend/src/schema/resolvers/users.spec.js +++ b/backend/src/schema/resolvers/users.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' +import Factory from '../../factories' import { gql } from '../../helpers/jest' -import { getNeode, getDriver } from '../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/users/blockedUsers.spec.js b/backend/src/schema/resolvers/users/blockedUsers.spec.js index 11bcb823d..bec8b59d0 100644 --- a/backend/src/schema/resolvers/users/blockedUsers.spec.js +++ b/backend/src/schema/resolvers/users/blockedUsers.spec.js @@ -1,8 +1,8 @@ import { createTestClient } from 'apollo-server-testing' import createServer from '../../../server' -import Factory from '../../../seed/factories' +import Factory from '../../../factories' import { gql } from '../../../helpers/jest' -import { getNeode, getDriver } from '../../../bootstrap/neo4j' +import { getNeode, getDriver } from '../../../db/neo4j' const driver = getDriver() const factory = Factory() diff --git a/backend/src/schema/resolvers/users/location.spec.js b/backend/src/schema/resolvers/users/location.spec.js index 59d093afb..f7315174c 100644 --- a/backend/src/schema/resolvers/users/location.spec.js +++ b/backend/src/schema/resolvers/users/location.spec.js @@ -1,6 +1,6 @@ import { gql } from '../../../helpers/jest' -import Factory from '../../../seed/factories' -import { getNeode, getDriver } from '../../../bootstrap/neo4j' +import Factory from '../../../factories' +import { getNeode, getDriver } from '../../../db/neo4j' import { createTestClient } from 'apollo-server-testing' import createServer from '../../../server' diff --git a/backend/src/seed/seed-helpers.js b/backend/src/seed/seed-helpers.js deleted file mode 100644 index 913ca1d54..000000000 --- a/backend/src/seed/seed-helpers.js +++ /dev/null @@ -1,134 +0,0 @@ -const _ = require('lodash') -const faker = require('faker') -const unsplashTopics = [ - 'love', - 'family', - 'spring', - 'business', - 'nature', - 'travel', - 'happy', - 'landscape', - 'health', - 'friends', - 'computer', - 'autumn', - 'space', - 'animal', - 'smile', - 'face', - 'people', - 'portrait', - 'amazing', -] -let unsplashTopicsTmp = [] - -const ngoLogos = [ - 'http://www.fetchlogos.com/wp-content/uploads/2015/11/Girl-Scouts-Of-The-Usa-Logo.jpg', - 'http://logos.textgiraffe.com/logos/logo-name/Ngo-designstyle-friday-m.png', - 'http://seeklogo.com/images/N/ngo-logo-BD53A3E024-seeklogo.com.png', - 'https://dcassetcdn.com/design_img/10133/25833/25833_303600_10133_image.jpg', - 'https://cdn.tutsplus.com/vector/uploads/legacy/articles/08bad_ngologos/20.jpg', - 'https://cdn.tutsplus.com/vector/uploads/legacy/articles/08bad_ngologos/33.jpg', - null, -] - -const difficulties = ['easy', 'medium', 'hard'] - -export default { - randomItem: (items, filter) => { - const ids = filter - ? Object.keys(items).filter(id => { - return filter(items[id]) - }) - : _.keys(items) - const randomIds = _.shuffle(ids) - return items[randomIds.pop()] - }, - randomItems: (items, key = 'id', min = 1, max = 1) => { - const randomIds = _.shuffle(_.keys(items)) - const res = [] - - const count = _.random(min, max) - - for (let i = 0; i < count; i++) { - let r = items[randomIds.pop()][key] - if (key === 'id') { - r = r.toString() - } - res.push(r) - } - return res - }, - random: items => { - return _.shuffle(items).pop() - }, - randomDifficulty: () => { - return _.shuffle(difficulties).pop() - }, - randomLogo: () => { - return _.shuffle(ngoLogos).pop() - }, - randomUnsplashUrl: () => { - if (Math.random() < 0.6) { - // do not attach images in 60 percent of the cases (faster seeding) - return - } - if (unsplashTopicsTmp.length < 2) { - unsplashTopicsTmp = _.shuffle(unsplashTopics) - } - return ( - 'https://source.unsplash.com/daily?' + unsplashTopicsTmp.pop() + ',' + unsplashTopicsTmp.pop() - ) - }, - randomCategories: (seederstore, allowEmpty = false) => { - let count = Math.round(Math.random() * 3) - if (allowEmpty === false && count === 0) { - count = 1 - } - const categorieIds = _.shuffle(_.keys(seederstore.categories)) - const ids = [] - for (let i = 0; i < count; i++) { - ids.push(categorieIds.pop()) - } - return ids - }, - randomAddresses: () => { - const count = Math.round(Math.random() * 3) - const addresses = [] - for (let i = 0; i < count; i++) { - addresses.push({ - city: faker.address.city(), - zipCode: faker.address.zipCode(), - street: faker.address.streetAddress(), - country: faker.address.countryCode(), - lat: 54.032726 - Math.random() * 10, - lng: 6.558838 + Math.random() * 10, - }) - } - return addresses - }, - /** - * Get array of ids from the given seederstore items after mapping them by the key in the values - * - * @param items items from the seederstore - * @param values values for which you need the ids - * @param key the field key that is represented in the values (slug, name, etc.) - */ - mapIdsByKey: (items, values, key) => { - const res = [] - values.forEach(value => { - res.push(_.find(items, [key, value]).id.toString()) - }) - return res - }, - genInviteCode: () => { - const chars = '23456789abcdefghkmnpqrstuvwxyzABCDEFGHJKLMNPRSTUVWXYZ' - let code = '' - for (let i = 0; i < 8; i++) { - const n = _.random(0, chars.length - 1) - code += chars.substr(n, 1) - } - return code - }, -} diff --git a/backend/src/server.js b/backend/src/server.js index bd9973a39..02e166b71 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -3,7 +3,7 @@ import helmet from 'helmet' import { ApolloServer } from 'apollo-server-express' import CONFIG from './config' import middleware from './middleware' -import { getNeode, getDriver } from './bootstrap/neo4j' +import { getNeode, getDriver } from './db/neo4j' import decode from './jwt/decode' import schema from './schema' import webfinger from './activitypub/routes/webfinger' diff --git a/backend/test/features/support/steps.js b/backend/test/features/support/steps.js index 73d059348..70802f4e2 100644 --- a/backend/test/features/support/steps.js +++ b/backend/test/features/support/steps.js @@ -3,7 +3,7 @@ import { Given, When, Then, AfterAll } from 'cucumber' import { expect } from 'chai' // import { client } from '../../../src/activitypub/apollo-client' import { GraphQLClient } from 'graphql-request' -import Factory from '../../../src/seed/factories' +import Factory from '../../../src/factories' const debug = require('debug')('ea:test:steps') const factory = Factory() diff --git a/cypress/support/factories.js b/cypress/support/factories.js index e0b6210d8..1b76a1a01 100644 --- a/cypress/support/factories.js +++ b/cypress/support/factories.js @@ -1,5 +1,5 @@ -import Factory from '../../backend/src/seed/factories' -import { getDriver, getNeode } from '../../backend/src/bootstrap/neo4j' +import Factory from '../../backend/src/factories' +import { getDriver, getNeode } from '../../backend/src/db/neo4j' const neo4jConfigs = { uri: Cypress.env('NEO4J_URI'), diff --git a/features/support/steps.js b/features/support/steps.js index 923dc9766..71f493834 100644 --- a/features/support/steps.js +++ b/features/support/steps.js @@ -1,6 +1,6 @@ // features/support/steps.js import { Given, When, Then, After, AfterAll } from 'cucumber' -import Factory from '../../backend/src/seed/factories' +import Factory from '../../backend/src/factories' import dotenv from 'dotenv' import expect from 'expect'