diff --git a/test/public-api/alias.e2e-spec.ts b/test/public-api/alias.e2e-spec.ts index 5bc359c61..27d7c880d 100644 --- a/test/public-api/alias.e2e-spec.ts +++ b/test/public-api/alias.e2e-spec.ts @@ -3,73 +3,29 @@ * * 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 { PublicApiModule } from '../../src/api/public/public-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 mediaConfigMock from '../../src/config/mock/media.config.mock'; -import { GroupsModule } from '../../src/groups/groups.module'; -import { LoggerModule } from '../../src/logger/logger.module'; import { AliasCreateDto } from '../../src/notes/alias-create.dto'; import { AliasUpdateDto } from '../../src/notes/alias-update.dto'; -import { AliasService } from '../../src/notes/alias.service'; -import { NotesModule } from '../../src/notes/notes.module'; -import { NotesService } from '../../src/notes/notes.service'; -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 { TestSetup } from '../test-setup'; describe('Notes', () => { - let app: INestApplication; - let notesService: NotesService; - let aliasService: AliasService; + let testSetup: TestSetup; + let user: User; let content: string; let forbiddenNoteId: string; beforeAll(async () => { - const moduleRef = await Test.createTestingModule({ - imports: [ - ConfigModule.forRoot({ - isGlobal: true, - load: [mediaConfigMock, appConfigMock], - }), - PublicApiModule, - NotesModule, - PermissionsModule, - GroupsModule, - TypeOrmModule.forRoot({ - type: 'sqlite', - database: './hedgedoc-e2e-notes.sqlite', - autoLoadEntities: true, - synchronize: true, - dropSchema: true, - }), - LoggerModule, - AuthModule, - UsersModule, - ], - }) - .overrideGuard(TokenAuthGuard) - .useClass(MockAuthGuard) - .compile(); + testSetup = await TestSetup.create(); - const config = moduleRef.get(ConfigService); - forbiddenNoteId = config.get('appConfig').forbiddenNoteIds[0]; - app = moduleRef.createNestApplication(); - await app.init(); - notesService = moduleRef.get(NotesService); - aliasService = moduleRef.get(AliasService); - const userService = moduleRef.get(UsersService); - user = await userService.createUser('hardcoded', 'Testy'); + forbiddenNoteId = + testSetup.configService.get('appConfig').forbiddenNoteIds[0]; + + await testSetup.app.init(); + + user = await testSetup.userService.createUser('hardcoded', 'Testy'); content = 'This is a test note.'; }); @@ -81,14 +37,18 @@ describe('Notes', () => { }; let publicId = ''; beforeAll(async () => { - const note = await notesService.createNote(content, testAlias, user); + const note = await testSetup.notesService.createNote( + content, + testAlias, + user, + ); publicId = note.publicId; }); it('create with normal alias', async () => { const newAlias = 'normalAlias'; newAliasDto.newAlias = newAlias; - const metadata = await request(app.getHttpServer()) + const metadata = await request(testSetup.app.getHttpServer()) .post(`/alias`) .set('Content-Type', 'application/json') .send(newAliasDto) @@ -96,7 +56,7 @@ describe('Notes', () => { expect(metadata.body.name).toEqual(newAlias); expect(metadata.body.primaryAlias).toBeFalsy(); expect(metadata.body.noteId).toEqual(publicId); - const note = await request(app.getHttpServer()) + const note = await request(testSetup.app.getHttpServer()) .get(`/notes/${newAlias}`) .expect(200); expect(note.body.metadata.aliases).toContain(newAlias); @@ -107,7 +67,7 @@ describe('Notes', () => { describe('does not create an alias', () => { it('because of a forbidden alias', async () => { newAliasDto.newAlias = forbiddenNoteId; - await request(app.getHttpServer()) + await request(testSetup.app.getHttpServer()) .post(`/alias`) .set('Content-Type', 'application/json') .send(newAliasDto) @@ -115,7 +75,7 @@ describe('Notes', () => { }); it('because of a alias that is a public id', async () => { newAliasDto.newAlias = publicId; - await request(app.getHttpServer()) + await request(testSetup.app.getHttpServer()) .post(`/alias`) .set('Content-Type', 'application/json') .send(newAliasDto) @@ -132,13 +92,17 @@ describe('Notes', () => { }; let publicId = ''; beforeAll(async () => { - const note = await notesService.createNote(content, testAlias, user); + const note = await testSetup.notesService.createNote( + content, + testAlias, + user, + ); publicId = note.publicId; - await aliasService.addAlias(note, newAlias); + await testSetup.aliasService.addAlias(note, newAlias); }); it('updates a note with a normal alias', async () => { - const metadata = await request(app.getHttpServer()) + const metadata = await request(testSetup.app.getHttpServer()) .put(`/alias/${newAlias}`) .set('Content-Type', 'application/json') .send(changeAliasDto) @@ -146,7 +110,7 @@ describe('Notes', () => { expect(metadata.body.name).toEqual(newAlias); expect(metadata.body.primaryAlias).toBeTruthy(); expect(metadata.body.noteId).toEqual(publicId); - const note = await request(app.getHttpServer()) + const note = await request(testSetup.app.getHttpServer()) .get(`/notes/${newAlias}`) .expect(200); expect(note.body.metadata.aliases).toContain(newAlias); @@ -156,7 +120,7 @@ describe('Notes', () => { describe('does not update', () => { it('a note with unknown alias', async () => { - await request(app.getHttpServer()) + await request(testSetup.app.getHttpServer()) .put(`/alias/i_dont_exist`) .set('Content-Type', 'application/json') .send(changeAliasDto) @@ -164,7 +128,7 @@ describe('Notes', () => { }); it('if the property primaryAlias is false', async () => { changeAliasDto.primaryAlias = false; - await request(app.getHttpServer()) + await request(testSetup.app.getHttpServer()) .put(`/alias/${newAlias}`) .set('Content-Type', 'application/json') .send(changeAliasDto) @@ -177,37 +141,45 @@ describe('Notes', () => { const testAlias = 'aliasTest3'; const newAlias = 'normalAlias3'; beforeAll(async () => { - const note = await notesService.createNote(content, testAlias, user); - await aliasService.addAlias(note, newAlias); + const note = await testSetup.notesService.createNote( + content, + testAlias, + user, + ); + await testSetup.aliasService.addAlias(note, newAlias); }); it('deletes a normal alias', async () => { - await request(app.getHttpServer()) + await request(testSetup.app.getHttpServer()) .delete(`/alias/${newAlias}`) .expect(204); - await request(app.getHttpServer()).get(`/notes/${newAlias}`).expect(404); + await request(testSetup.app.getHttpServer()) + .get(`/notes/${newAlias}`) + .expect(404); }); it('does not delete an unknown alias', async () => { - await request(app.getHttpServer()) + await request(testSetup.app.getHttpServer()) .delete(`/alias/i_dont_exist`) .expect(404); }); it('does not delete a primary alias (if it is not the only one)', async () => { - const note = await notesService.getNoteByIdOrAlias(testAlias); - await aliasService.addAlias(note, newAlias); - await request(app.getHttpServer()) + const note = await testSetup.notesService.getNoteByIdOrAlias(testAlias); + await testSetup.aliasService.addAlias(note, newAlias); + await request(testSetup.app.getHttpServer()) .delete(`/alias/${testAlias}`) .expect(400); - await request(app.getHttpServer()).get(`/notes/${newAlias}`).expect(200); + await request(testSetup.app.getHttpServer()) + .get(`/notes/${newAlias}`) + .expect(200); }); it('deletes a primary alias (if it is the only one)', async () => { - await request(app.getHttpServer()) + await request(testSetup.app.getHttpServer()) .delete(`/alias/${newAlias}`) .expect(204); - await request(app.getHttpServer()) + await request(testSetup.app.getHttpServer()) .delete(`/alias/${testAlias}`) .expect(204); }); diff --git a/test/test-setup.ts b/test/test-setup.ts index 0258f8096..960c379fc 100644 --- a/test/test-setup.ts +++ b/test/test-setup.ts @@ -25,6 +25,7 @@ import { IdentityService } from '../src/identity/identity.service'; import { LoggerModule } from '../src/logger/logger.module'; import { MediaModule } from '../src/media/media.module'; import { MediaService } from '../src/media/media.service'; +import { AliasService } from '../src/notes/alias.service'; import { NotesModule } from '../src/notes/notes.module'; import { NotesService } from '../src/notes/notes.service'; import { PermissionsModule } from '../src/permissions/permissions.module'; @@ -41,6 +42,7 @@ export class TestSetup { notesService: NotesService; mediaService: MediaService; historyService: HistoryService; + aliasService: AliasService; public static async create(): Promise { const testSetup = new TestSetup(); @@ -91,6 +93,8 @@ export class TestSetup { testSetup.moduleRef.get(MediaService); testSetup.historyService = testSetup.moduleRef.get(HistoryService); + testSetup.aliasService = + testSetup.moduleRef.get(AliasService); testSetup.app = testSetup.moduleRef.createNestApplication();