mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-06-02 16:09:59 -04:00

The realtime note map has been moved into its own class to separate the realtime note business logic from the storing logic. Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
288 lines
8.6 KiB
TypeScript
288 lines
8.6 KiB
TypeScript
/*
|
|
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
import mockedEnv from 'mocked-env';
|
|
|
|
import appConfig from './app.config';
|
|
import { Loglevel } from './loglevel.enum';
|
|
|
|
describe('appConfig', () => {
|
|
const domain = 'https://example.com';
|
|
const invalidDomain = 'localhost';
|
|
const rendererOrigin = 'https://render.example.com';
|
|
const port = 3333;
|
|
const negativePort = -9000;
|
|
const floatPort = 3.14;
|
|
const outOfRangePort = 1000000;
|
|
const invalidPort = 'not-a-port';
|
|
const loglevel = Loglevel.TRACE;
|
|
const invalidLoglevel = 'not-a-loglevel';
|
|
const invalidPersistInterval = -1;
|
|
|
|
describe('correctly parses config', () => {
|
|
it('when given correct and complete environment variables', async () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
HD_RENDERER_ORIGIN: rendererOrigin,
|
|
PORT: port.toString(),
|
|
HD_LOGLEVEL: loglevel,
|
|
HD_PERSIST_INTERVAL: '100',
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
const config = appConfig();
|
|
expect(config.domain).toEqual(domain);
|
|
expect(config.rendererOrigin).toEqual(rendererOrigin);
|
|
expect(config.port).toEqual(port);
|
|
expect(config.loglevel).toEqual(loglevel);
|
|
expect(config.persistInterval).toEqual(100);
|
|
restore();
|
|
});
|
|
|
|
it('when no HD_RENDER_ORIGIN is set', () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
PORT: port.toString(),
|
|
HD_LOGLEVEL: loglevel,
|
|
HD_PERSIST_INTERVAL: '100',
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
const config = appConfig();
|
|
expect(config.domain).toEqual(domain);
|
|
expect(config.rendererOrigin).toEqual(domain);
|
|
expect(config.port).toEqual(port);
|
|
expect(config.loglevel).toEqual(loglevel);
|
|
expect(config.persistInterval).toEqual(100);
|
|
restore();
|
|
});
|
|
|
|
it('when no PORT is set', () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
HD_RENDERER_ORIGIN: rendererOrigin,
|
|
HD_LOGLEVEL: loglevel,
|
|
HD_PERSIST_INTERVAL: '100',
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
const config = appConfig();
|
|
expect(config.domain).toEqual(domain);
|
|
expect(config.rendererOrigin).toEqual(rendererOrigin);
|
|
expect(config.port).toEqual(3000);
|
|
expect(config.loglevel).toEqual(loglevel);
|
|
expect(config.persistInterval).toEqual(100);
|
|
restore();
|
|
});
|
|
|
|
it('when no HD_LOGLEVEL is set', () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
HD_RENDERER_ORIGIN: rendererOrigin,
|
|
PORT: port.toString(),
|
|
HD_PERSIST_INTERVAL: '100',
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
const config = appConfig();
|
|
expect(config.domain).toEqual(domain);
|
|
expect(config.rendererOrigin).toEqual(rendererOrigin);
|
|
expect(config.port).toEqual(port);
|
|
expect(config.loglevel).toEqual(Loglevel.WARN);
|
|
expect(config.persistInterval).toEqual(100);
|
|
restore();
|
|
});
|
|
|
|
it('when no HD_PERSIST_INTERVAL is set', () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
HD_RENDERER_ORIGIN: rendererOrigin,
|
|
HD_LOGLEVEL: loglevel,
|
|
PORT: port.toString(),
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
const config = appConfig();
|
|
expect(config.domain).toEqual(domain);
|
|
expect(config.rendererOrigin).toEqual(rendererOrigin);
|
|
expect(config.port).toEqual(port);
|
|
expect(config.loglevel).toEqual(Loglevel.TRACE);
|
|
expect(config.persistInterval).toEqual(10);
|
|
restore();
|
|
});
|
|
|
|
it('when HD_PERSIST_INTERVAL is zero', () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
HD_RENDERER_ORIGIN: rendererOrigin,
|
|
HD_LOGLEVEL: loglevel,
|
|
PORT: port.toString(),
|
|
HD_PERSIST_INTERVAL: '0',
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
const config = appConfig();
|
|
expect(config.domain).toEqual(domain);
|
|
expect(config.rendererOrigin).toEqual(rendererOrigin);
|
|
expect(config.port).toEqual(port);
|
|
expect(config.loglevel).toEqual(Loglevel.TRACE);
|
|
expect(config.persistInterval).toEqual(0);
|
|
restore();
|
|
});
|
|
});
|
|
describe('throws error', () => {
|
|
it('when given a non-valid HD_DOMAIN', async () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: invalidDomain,
|
|
PORT: port.toString(),
|
|
HD_LOGLEVEL: loglevel,
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
expect(() => appConfig()).toThrow('HD_DOMAIN');
|
|
restore();
|
|
});
|
|
|
|
it('when given a negative PORT', async () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
PORT: negativePort.toString(),
|
|
HD_LOGLEVEL: loglevel,
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
expect(() => appConfig()).toThrow('"PORT" must be a positive number');
|
|
restore();
|
|
});
|
|
|
|
it('when given a out-of-range PORT', async () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
PORT: outOfRangePort.toString(),
|
|
HD_LOGLEVEL: loglevel,
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
expect(() => appConfig()).toThrow(
|
|
'"PORT" must be less than or equal to 65535',
|
|
);
|
|
restore();
|
|
});
|
|
|
|
it('when given a non-integer PORT', async () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
PORT: floatPort.toString(),
|
|
HD_LOGLEVEL: loglevel,
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
expect(() => appConfig()).toThrow('"PORT" must be an integer');
|
|
restore();
|
|
});
|
|
|
|
it('when given a non-number PORT', async () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
PORT: invalidPort,
|
|
HD_LOGLEVEL: loglevel,
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
expect(() => appConfig()).toThrow('"PORT" must be a number');
|
|
restore();
|
|
});
|
|
|
|
it('when given a non-loglevel HD_LOGLEVEL', async () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
PORT: port.toString(),
|
|
HD_LOGLEVEL: invalidLoglevel,
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
expect(() => appConfig()).toThrow('HD_LOGLEVEL');
|
|
restore();
|
|
});
|
|
|
|
it('when given a negative HD_PERSIST_INTERVAL', () => {
|
|
const restore = mockedEnv(
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
HD_DOMAIN: domain,
|
|
PORT: port.toString(),
|
|
HD_LOGLEVEL: invalidLoglevel,
|
|
HD_PERSIST_INTERVAL: invalidPersistInterval.toString(),
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
},
|
|
{
|
|
clear: true,
|
|
},
|
|
);
|
|
expect(() => appConfig()).toThrow('HD_PERSIST_INTERVAL');
|
|
restore();
|
|
});
|
|
});
|
|
});
|