From 386098ed2b96d2f979b82023c0eda0c318b29e16 Mon Sep 17 00:00:00 2001 From: David Mehren Date: Thu, 14 Oct 2021 20:17:28 +0200 Subject: [PATCH] Move common test preparations into TestSetup class Signed-off-by: David Mehren --- test/public-api/tokens.e2e-spec.ts | 84 ++++++----------------------- test/test-setup.ts | 85 ++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 69 deletions(-) create mode 100644 test/test-setup.ts diff --git a/test/public-api/tokens.e2e-spec.ts b/test/public-api/tokens.e2e-spec.ts index 6ffb3e9e5..7bb96cc91 100644 --- a/test/public-api/tokens.e2e-spec.ts +++ b/test/public-api/tokens.e2e-spec.ts @@ -3,86 +3,32 @@ * * SPDX-License-Identifier: AGPL-3.0-only */ -import { INestApplication } from '@nestjs/common'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { Test } from '@nestjs/testing'; -import { TypeOrmModule } from '@nestjs/typeorm'; import request from 'supertest'; -import { PrivateApiModule } from '../../src/api/private/private-api.module'; -import { AuthModule } from '../../src/auth/auth.module'; -import { MockAuthGuard } from '../../src/auth/mock-auth.guard'; -import { TokenAuthGuard } from '../../src/auth/token.strategy'; import { AuthConfig } from '../../src/config/auth.config'; -import appConfigMock from '../../src/config/mock/app.config.mock'; -import authConfigMock from '../../src/config/mock/auth.config.mock'; -import customizationConfigMock from '../../src/config/mock/customization.config.mock'; -import externalServicesConfigMock from '../../src/config/mock/external-services.config.mock'; -import mediaConfigMock from '../../src/config/mock/media.config.mock'; -import { GroupsModule } from '../../src/groups/groups.module'; -import { HistoryModule } from '../../src/history/history.module'; -import { IdentityService } from '../../src/identity/identity.service'; -import { LoggerModule } from '../../src/logger/logger.module'; -import { MediaModule } from '../../src/media/media.module'; -import { NotesModule } from '../../src/notes/notes.module'; -import { PermissionsModule } from '../../src/permissions/permissions.module'; import { User } from '../../src/users/user.entity'; -import { UsersModule } from '../../src/users/users.module'; -import { UsersService } from '../../src/users/users.service'; import { setupSessionMiddleware } from '../../src/utils/session'; +import { TestSetup } from '../test-setup'; describe('Tokens', () => { - let app: INestApplication; - let userService: UsersService; - let identityService: IdentityService; - let user: User; + let testSetup: TestSetup; let agent: request.SuperAgentTest; + + let user: User; let keyId: string; beforeAll(async () => { - const moduleRef = await Test.createTestingModule({ - imports: [ - ConfigModule.forRoot({ - isGlobal: true, - load: [ - appConfigMock, - authConfigMock, - mediaConfigMock, - customizationConfigMock, - externalServicesConfigMock, - ], - }), - PrivateApiModule, - NotesModule, - PermissionsModule, - GroupsModule, - TypeOrmModule.forRoot({ - type: 'sqlite', - database: './hedgedoc-e2e-private-me.sqlite', - autoLoadEntities: true, - synchronize: true, - dropSchema: true, - }), - LoggerModule, - AuthModule, - UsersModule, - MediaModule, - HistoryModule, - ], - }) - .overrideGuard(TokenAuthGuard) - .useClass(MockAuthGuard) - .compile(); - const config = moduleRef.get(ConfigService); - identityService = moduleRef.get(IdentityService); - app = moduleRef.createNestApplication(); - userService = moduleRef.get(UsersService); - user = await userService.createUser('hardcoded', 'Testy'); - await identityService.createLocalIdentity(user, 'test'); - const authConfig = config.get('authConfig') as AuthConfig; - setupSessionMiddleware(app, authConfig); - await app.init(); - agent = request.agent(app.getHttpServer()); + testSetup = await TestSetup.create(); + + user = await testSetup.userService.createUser('hardcoded', 'Testy'); + await testSetup.identityService.createLocalIdentity(user, 'test'); + + const authConfig = testSetup.configService.get('authConfig') as AuthConfig; + setupSessionMiddleware(testSetup.app, authConfig); + + await testSetup.app.init(); + + agent = request.agent(testSetup.app.getHttpServer()); await agent .post('/auth/local/login') .send({ username: 'hardcoded', password: 'test' }) diff --git a/test/test-setup.ts b/test/test-setup.ts new file mode 100644 index 000000000..625106124 --- /dev/null +++ b/test/test-setup.ts @@ -0,0 +1,85 @@ +/* + * SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file) + * + * SPDX-License-Identifier: AGPL-3.0-only + */ +import { INestApplication } from '@nestjs/common'; +import { ConfigModule, ConfigService } from '@nestjs/config'; +import { Test, TestingModule } from '@nestjs/testing'; +import { TypeOrmModule } from '@nestjs/typeorm'; + +import { PrivateApiModule } from '../src/api/private/private-api.module'; +import { AuthModule } from '../src/auth/auth.module'; +import { MockAuthGuard } from '../src/auth/mock-auth.guard'; +import { TokenAuthGuard } from '../src/auth/token.strategy'; +import appConfigMock from '../src/config/mock/app.config.mock'; +import authConfigMock from '../src/config/mock/auth.config.mock'; +import customizationConfigMock from '../src/config/mock/customization.config.mock'; +import externalServicesConfigMock from '../src/config/mock/external-services.config.mock'; +import mediaConfigMock from '../src/config/mock/media.config.mock'; +import { GroupsModule } from '../src/groups/groups.module'; +import { HistoryModule } from '../src/history/history.module'; +import { IdentityService } from '../src/identity/identity.service'; +import { LoggerModule } from '../src/logger/logger.module'; +import { MediaModule } from '../src/media/media.module'; +import { NotesModule } from '../src/notes/notes.module'; +import { PermissionsModule } from '../src/permissions/permissions.module'; +import { UsersModule } from '../src/users/users.module'; +import { UsersService } from '../src/users/users.service'; + +export class TestSetup { + moduleRef: TestingModule; + app: INestApplication; + + userService: UsersService; + configService: ConfigService; + identityService: IdentityService; + + public static async create(): Promise { + const testSetup = new TestSetup(); + + testSetup.moduleRef = await Test.createTestingModule({ + imports: [ + ConfigModule.forRoot({ + isGlobal: true, + load: [ + appConfigMock, + authConfigMock, + mediaConfigMock, + customizationConfigMock, + externalServicesConfigMock, + ], + }), + PrivateApiModule, + NotesModule, + PermissionsModule, + GroupsModule, + TypeOrmModule.forRoot({ + type: 'sqlite', + database: ':memory:', + autoLoadEntities: true, + synchronize: true, + dropSchema: true, + }), + LoggerModule, + AuthModule, + UsersModule, + MediaModule, + HistoryModule, + ], + }) + .overrideGuard(TokenAuthGuard) + .useClass(MockAuthGuard) + .compile(); + + testSetup.userService = testSetup.moduleRef.get(UsersService); + testSetup.configService = + testSetup.moduleRef.get(ConfigService); + testSetup.identityService = + testSetup.moduleRef.get(IdentityService); + + testSetup.app = testSetup.moduleRef.createNestApplication(); + + return testSetup; + } +}