mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2024-11-26 03:33:58 -05:00
Media E2E tests: Add error handling for upload cleanup
Previously, `fs.rmdir` was called multiple times on the same path, even when the path was already deleted. This causes test failures in Node 16. This commit extracts the cleanup code into a utility function and ensures that no error is thrown when the given path is already deleted. Signed-off-by: David Mehren <git@herrmehren.de>
This commit is contained in:
parent
20f527eb80
commit
79065b8d3f
3 changed files with 31 additions and 6 deletions
|
@ -26,6 +26,7 @@ import { join } from 'path';
|
||||||
import { PrivateApiModule } from '../../src/api/private/private-api.module';
|
import { PrivateApiModule } from '../../src/api/private/private-api.module';
|
||||||
import { UsersService } from '../../src/users/users.service';
|
import { UsersService } from '../../src/users/users.service';
|
||||||
import { ConsoleLoggerService } from '../../src/logger/console-logger.service';
|
import { ConsoleLoggerService } from '../../src/logger/console-logger.service';
|
||||||
|
import { ensureDeleted } from '../utils';
|
||||||
|
|
||||||
describe('Media', () => {
|
describe('Media', () => {
|
||||||
let app: NestExpressApplication;
|
let app: NestExpressApplication;
|
||||||
|
@ -95,7 +96,7 @@ describe('Media', () => {
|
||||||
});
|
});
|
||||||
describe('fails:', () => {
|
describe('fails:', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fs.rmdir(uploadPath, { recursive: true });
|
await ensureDeleted(uploadPath);
|
||||||
});
|
});
|
||||||
it('MIME type not supported', async () => {
|
it('MIME type not supported', async () => {
|
||||||
await request(app.getHttpServer())
|
await request(app.getHttpServer())
|
||||||
|
@ -125,14 +126,14 @@ describe('Media', () => {
|
||||||
.expect(500);
|
.expect(500);
|
||||||
});
|
});
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
await fs.rmdir(uploadPath, { recursive: true });
|
await ensureDeleted(uploadPath);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
// Delete the upload folder
|
// Delete the upload folder
|
||||||
await fs.rmdir(uploadPath, { recursive: true });
|
await ensureDeleted(uploadPath);
|
||||||
await app.close();
|
await app.close();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -25,6 +25,7 @@ import { TokenAuthGuard } from '../../src/auth/token-auth.guard';
|
||||||
import { MockAuthGuard } from '../../src/auth/mock-auth.guard';
|
import { MockAuthGuard } from '../../src/auth/mock-auth.guard';
|
||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
import { ConsoleLoggerService } from '../../src/logger/console-logger.service';
|
import { ConsoleLoggerService } from '../../src/logger/console-logger.service';
|
||||||
|
import { ensureDeleted } from '../utils';
|
||||||
|
|
||||||
describe('Media', () => {
|
describe('Media', () => {
|
||||||
let app: NestExpressApplication;
|
let app: NestExpressApplication;
|
||||||
|
@ -91,7 +92,7 @@ describe('Media', () => {
|
||||||
});
|
});
|
||||||
describe('fails:', () => {
|
describe('fails:', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fs.rmdir(uploadPath, { recursive: true });
|
await ensureDeleted(uploadPath);
|
||||||
});
|
});
|
||||||
it('MIME type not supported', async () => {
|
it('MIME type not supported', async () => {
|
||||||
await request(app.getHttpServer())
|
await request(app.getHttpServer())
|
||||||
|
@ -121,7 +122,7 @@ describe('Media', () => {
|
||||||
.expect(500);
|
.expect(500);
|
||||||
});
|
});
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
await fs.rmdir(uploadPath, { recursive: true });
|
await ensureDeleted(uploadPath);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -141,7 +142,7 @@ describe('Media', () => {
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
// Delete the upload folder
|
// Delete the upload folder
|
||||||
await fs.rmdir(uploadPath, { recursive: true });
|
await ensureDeleted(uploadPath);
|
||||||
await app.close();
|
await app.close();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
23
test/utils.ts
Normal file
23
test/utils.ts
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { promises as fs } from 'fs';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures the directory at `path` is deleted.
|
||||||
|
* If `path` does not exist, nothing happens.
|
||||||
|
*/
|
||||||
|
export async function ensureDeleted(path: string): Promise<void> {
|
||||||
|
try {
|
||||||
|
await fs.rmdir(path, { recursive: true });
|
||||||
|
} catch (e) {
|
||||||
|
if (e.code && e.code == 'ENOENT') {
|
||||||
|
// ignore error, path is already deleted
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue