diff --git a/test/public-api/fixtures/test.png b/test/public-api/fixtures/test.png new file mode 100644 index 000000000..5f04fc472 Binary files /dev/null and b/test/public-api/fixtures/test.png differ diff --git a/test/public-api/media.e2e-spec.ts b/test/public-api/media.e2e-spec.ts new file mode 100644 index 000000000..a1f2c8357 --- /dev/null +++ b/test/public-api/media.e2e-spec.ts @@ -0,0 +1,79 @@ +import { NestExpressApplication } from '@nestjs/platform-express'; +import { Test } from '@nestjs/testing'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { promises as fs } from 'fs'; +import * as request from 'supertest'; +import { PublicApiModule } from '../../src/api/public/public-api.module'; +import { GroupsModule } from '../../src/groups/groups.module'; +import { LoggerModule } from '../../src/logger/logger.module'; +import { NestConsoleLoggerService } from '../../src/logger/nest-console-logger.service'; +import { MediaModule } from '../../src/media/media.module'; +import { MediaService } from '../../src/media/media.service'; +import { NotesModule } from '../../src/notes/notes.module'; +import { NotesService } from '../../src/notes/notes.service'; +import { PermissionsModule } from '../../src/permissions/permissions.module'; +import { UsersService } from '../../src/users/users.service'; + +describe('Notes', () => { + let app: NestExpressApplication; + let mediaService: MediaService; + + beforeAll(async () => { + const moduleRef = await Test.createTestingModule({ + imports: [ + PublicApiModule, + MediaModule, + TypeOrmModule.forRoot({ + type: 'sqlite', + database: './hedgedoc-e2e.sqlite', + autoLoadEntities: true, + dropSchema: true, + synchronize: true, + }), + NotesModule, + PermissionsModule, + GroupsModule, + LoggerModule, + ], + }).compile(); + app = moduleRef.createNestApplication(); + app.useStaticAssets('uploads', { + prefix: '/uploads', + }); + await app.init(); + const logger = await app.resolve(NestConsoleLoggerService); + logger.log('Switching logger', 'AppBootstrap'); + app.useLogger(logger); + const notesService: NotesService = moduleRef.get('NotesService'); + await notesService.createNote('test content', 'test_upload_media'); + const usersService: UsersService = moduleRef.get('UsersService'); + await usersService.createUser('hardcoded', 'Hard Coded'); + mediaService = moduleRef.get('MediaService'); + }); + + it('POST /media', async () => { + const uploadResponse = await request(app.getHttpServer()) + .post('/media') + .attach('file', 'test/public-api/fixtures/test.png') + .set('HedgeDoc-Note', 'test_upload_media') + .expect('Content-Type', /json/) + .expect(201); + const path = uploadResponse.body.link; + const testImage = await fs.readFile('test/public-api/fixtures/test.png'); + const downloadResponse = await request(app.getHttpServer()).get(path); + expect(downloadResponse.body).toEqual(testImage); + }); + + it('DELETE /media/{filename}', async () => { + const testImage = await fs.readFile('test/public-api/fixtures/test.png'); + const url = await mediaService.saveFile( + testImage, + 'hardcoded', + 'test_upload_media', + ); + const filename = url.split('/').pop(); + await request(app.getHttpServer()) + .delete('/media/' + filename) + .expect(200); + }); +});