From 10b65487eeea7cc57340537f59467d0f9017a7f0 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 18 Oct 2021 20:17:17 +0200 Subject: [PATCH] createServer for application and tests --- .github/workflows/test.yml | 8 +-- .../resolver/CommunityResolver.test.ts | 6 +- backend/src/graphql/schema.ts | 3 +- backend/src/index.ts | 55 +--------------- backend/src/server/createServer.ts | 63 +++++++++++++++++++ 5 files changed, 75 insertions(+), 60 deletions(-) create mode 100644 backend/src/server/createServer.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5e2bb16a9..e3f20fe09 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -373,10 +373,10 @@ jobs: ########################################################################## # UNIT TESTS BACKEND ##################################################### ########################################################################## - - name: backend | Unit tests - run: | - docker run -v ~/coverage:/app/coverage --rm gradido/backend:test yarn run test - cp -r ~/coverage ./coverage + - name: backend database | docker-compose + run: docker-compose -f docker-compose.yml up --detach mariadb + - name: backend Unit tests | up + run: docker-compose -f docker-compose.yml -f docker-compose.test.yml run -T backend yarn run test ########################################################################## # COVERAGE CHECK BACKEND ################################################# ########################################################################## diff --git a/backend/src/graphql/resolver/CommunityResolver.test.ts b/backend/src/graphql/resolver/CommunityResolver.test.ts index 34a6b81aa..e1556b9fc 100644 --- a/backend/src/graphql/resolver/CommunityResolver.test.ts +++ b/backend/src/graphql/resolver/CommunityResolver.test.ts @@ -2,14 +2,14 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { createTestClient } from 'apollo-server-testing' -import createTestServer from '../../test-server' +import createServer from '../../server/createServer' let query: any beforeAll(async () => { - const apollo = createTestServer() + const { apollo } = await createServer({}) - query = createTestClient(await apollo).query + query = createTestClient(apollo).query }) describe('CommunityResolver', () => { diff --git a/backend/src/graphql/schema.ts b/backend/src/graphql/schema.ts index 0a570ae82..5789f75ec 100644 --- a/backend/src/graphql/schema.ts +++ b/backend/src/graphql/schema.ts @@ -6,7 +6,8 @@ import isAuthorized from './directive/isAuthorized' const schema = async (): Promise => { return buildSchema({ - resolvers: [path.join(__dirname, 'resolver', `*.{js,ts}`)], + // ?!.*\.test\.js$ + resolvers: [path.join(__dirname, 'resolver', `!(*.test).{js,ts}`)], authChecker: isAuthorized, }) } diff --git a/backend/src/index.ts b/backend/src/index.ts index 916fe0550..a2e533e34 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,63 +1,14 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import 'reflect-metadata' -import express from 'express' -import { ApolloServer } from 'apollo-server-express' +import createServer from './server/createServer' // config import CONFIG from './config' -// database -import connection from './typeorm/connection' -import getDBVersion from './typeorm/getDBVersion' - -// server -import cors from './server/cors' -import context from './server/context' -import plugins from './server/plugins' - -// graphql -import schema from './graphql/schema' - -// TODO implement -// import queryComplexity, { simpleEstimator, fieldConfigEstimator } from "graphql-query-complexity"; - -const DB_VERSION = '0002-add_settings' - async function main() { - // open mysql connection - const con = await connection() - if (!con || !con.isConnected) { - throw new Error(`Couldn't open connection to database`) - } + const { app } = await createServer() - // check for correct database version - const dbVersion = await getDBVersion() - if (!dbVersion || dbVersion.indexOf(DB_VERSION) === -1) { - throw new Error( - `Wrong database version - the backend requires '${DB_VERSION}' but found '${ - dbVersion || 'None' - }'`, - ) - } - - // Express Server - const server = express() - - // cors - server.use(cors) - - // Apollo Server - const apollo = new ApolloServer({ - schema: await schema(), - playground: CONFIG.GRAPHIQL, - context, - plugins, - }) - apollo.applyMiddleware({ app: server }) - - // Start Server - server.listen(CONFIG.PORT, () => { + app.listen(CONFIG.PORT, () => { // eslint-disable-next-line no-console console.log(`Server is running at http://localhost:${CONFIG.PORT}`) if (CONFIG.GRAPHIQL) { diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts new file mode 100644 index 000000000..db841ab11 --- /dev/null +++ b/backend/src/server/createServer.ts @@ -0,0 +1,63 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ + +import 'reflect-metadata' + +import { ApolloServer } from 'apollo-server-express' +import express from 'express' + +// database +import connection from '../typeorm/connection' +import getDBVersion from '../typeorm/getDBVersion' + +// server +import cors from './cors' +import serverContext from './context' +import plugins from './plugins' + +// config +import CONFIG from '../config' + +// graphql +import schema from '../graphql/schema' + +// TODO implement +// import queryComplexity, { simpleEstimator, fieldConfigEstimator } from "graphql-query-complexity"; + +const DB_VERSION = '0002-add_settings' + +const createServer = async (context: any = serverContext): Promise => { + // open mysql connection + const con = await connection() + if (!con || !con.isConnected) { + throw new Error(`Couldn't open connection to database`) + } + + // check for correct database version + const dbVersion = await getDBVersion() + if (!dbVersion || dbVersion.indexOf(DB_VERSION) === -1) { + throw new Error( + `Wrong database version - the backend requires '${DB_VERSION}' but found '${ + dbVersion || 'None' + }'`, + ) + } + + // Express Server + const app = express() + + // cors + app.use(cors) + + // Apollo Server + const apollo = new ApolloServer({ + schema: await schema(), + playground: CONFIG.GRAPHIQL, + context, + plugins, + }) + apollo.applyMiddleware({ app }) + return { apollo, app } +} + +export default createServer