validate env booleans as true/false strings only.
Avoid @IsBoolean with implicit conversion mismatching isEnabled(); add tests and shared BOOLEAN_STRING_VALUES.
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
import 'reflect-metadata';
|
||||
import { validate } from './validate';
|
||||
|
||||
const validConfig = (overrides: Record<string, unknown> = {}): Record<string, unknown> => ({
|
||||
NODE_ENV: 'development',
|
||||
BACKEND_PORT: 3000,
|
||||
POSTGRES_USER: 'postgres',
|
||||
POSTGRES_PASSWORD: 'postgres',
|
||||
POSTGRES_DB: 'private_image',
|
||||
POSTGRES_HOST: 'postgres',
|
||||
POSTGRES_PORT: 5432,
|
||||
POSTGRES_MIGRATIONS_RUN: 'false',
|
||||
CORS_ORIGINS: 'http://localhost:5173',
|
||||
MAX_IMAGES_PER_UPLOAD: 10,
|
||||
MULTER_MAX_FILE_BYTES: 10485760,
|
||||
ALTCHA_ENABLED: 'true',
|
||||
ALTCHA_HMAC_KEY: 'secret',
|
||||
ALTCHA_MAX_NUMBER: 50000,
|
||||
NEVER_MODE_INACTIVITY_DAYS: 365,
|
||||
THROTTLE_TTL_MS: 60000,
|
||||
THROTTLE_LIMIT: 1000,
|
||||
THROTTLE_UPLOAD_TTL_MS: 60000,
|
||||
THROTTLE_UPLOAD_LIMIT: 20,
|
||||
...overrides
|
||||
});
|
||||
|
||||
describe('validate', () => {
|
||||
it('accepts true and false env boolean strings', () => {
|
||||
expect(() => validate(validConfig({ POSTGRES_MIGRATIONS_RUN: 'true' }))).not.toThrow();
|
||||
expect(() => validate(validConfig({ ALTCHA_ENABLED: 'false' }))).not.toThrow();
|
||||
});
|
||||
|
||||
it('rejects non-literal boolean env values', () => {
|
||||
expect(() => validate(validConfig({ ALTCHA_ENABLED: 'yes' }))).toThrow();
|
||||
expect(() => validate(validConfig({ POSTGRES_MIGRATIONS_RUN: '1' }))).toThrow();
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,7 @@
|
||||
import { plainToClass } from 'class-transformer';
|
||||
import { IsBoolean, IsEnum, IsNotEmpty, IsNumber, IsString, Max, Min, validateSync } from 'class-validator';
|
||||
import { IsEnum, IsIn, IsNotEmpty, IsNumber, IsString, Max, Min, validateSync } from 'class-validator';
|
||||
import { BOOLEAN_STRING_VALUES } from '../consts/booleanStringValues';
|
||||
import type { BooleanStringValue } from '../types/BooleanStringValue';
|
||||
import { NodeEnv } from '../types/NodeEnv';
|
||||
|
||||
class EnvironmentVariables {
|
||||
@@ -36,8 +38,8 @@ class EnvironmentVariables {
|
||||
POSTGRES_PORT: number;
|
||||
|
||||
@IsNotEmpty()
|
||||
@IsBoolean()
|
||||
POSTGRES_MIGRATIONS_RUN: boolean;
|
||||
@IsIn(BOOLEAN_STRING_VALUES)
|
||||
POSTGRES_MIGRATIONS_RUN: BooleanStringValue;
|
||||
|
||||
@IsNotEmpty()
|
||||
@IsString()
|
||||
@@ -56,8 +58,8 @@ class EnvironmentVariables {
|
||||
MULTER_MAX_FILE_BYTES: number;
|
||||
|
||||
@IsNotEmpty()
|
||||
@IsBoolean()
|
||||
ALTCHA_ENABLED: boolean;
|
||||
@IsIn(BOOLEAN_STRING_VALUES)
|
||||
ALTCHA_ENABLED: BooleanStringValue;
|
||||
|
||||
@IsNotEmpty()
|
||||
@IsString()
|
||||
|
||||
Reference in New Issue
Block a user