1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-05 17:53:12 +02:00

chore: add new parse function with tests

This commit is contained in:
Thomas Heartman 2024-08-21 09:19:55 +02:00
parent 3cd312f9a9
commit 04ae667a67
No known key found for this signature in database
GPG Key ID: BD1F880DAED1EE78
2 changed files with 53 additions and 0 deletions

View File

@ -1,6 +1,7 @@
import {
parseEnvVarBoolean,
parseEnvVarNumber,
parseEnvVarNumberWithBounds,
parseEnvVarStrings,
} from './parseEnvVar';
@ -39,3 +40,36 @@ test('parseEnvVarStringList', () => {
expect(parseEnvVarStrings('a,b,c', [])).toEqual(['a', 'b', 'c']);
expect(parseEnvVarStrings(' a,,,b, c , ,', [])).toEqual(['a', 'b', 'c']);
});
describe('parseEnvVarNumberWithBounds', () => {
const parse = parseEnvVarNumberWithBounds;
test('works the same as parseEnvVarNumber', () => {
expect(parse('', { fallback: 1 })).toEqual(1);
expect(parse(' ', { fallback: 1 })).toEqual(1);
expect(parse('a', { fallback: 1 })).toEqual(1);
expect(parse('1', { fallback: 1 })).toEqual(1);
expect(parse('2', { fallback: 1 })).toEqual(2);
expect(parse('2e2', { fallback: 1 })).toEqual(2);
expect(parse('-1', { fallback: 1 })).toEqual(-1);
});
test('prefers options override over default value if present', () => {
expect(parse('', { fallback: 1, optionsOverride: 2 })).toEqual(2);
});
test('accepts 0 as options override', () => {
expect(parse('', { fallback: 1, optionsOverride: 0 })).toEqual(0);
});
test('prefers env var over options override', () => {
expect(parse('5', { fallback: 1, optionsOverride: 2 })).toEqual(5);
});
test('clamps the number to greater than or equal to the min number if provided', () => {
expect(parse('1', { fallback: 0, min: 2 })).toEqual(2);
expect(parse('', { fallback: 0, min: 2 })).toEqual(2);
expect(parse('', { fallback: 0, optionsOverride: 1, min: 2 })).toEqual(
2,
);
});
});

View File

@ -38,3 +38,22 @@ export function parseEnvVarStrings(
return defaultVal;
}
type parseEnvVarNumberWithBoundsOptions = {
fallback: number;
min?: number;
optionsOverride?: number;
};
export function parseEnvVarNumberWithBounds(
envVar: string | undefined,
{ min, fallback, optionsOverride }: parseEnvVarNumberWithBoundsOptions,
): number {
const parsed = parseEnvVarNumber(envVar, optionsOverride ?? fallback);
if (min) {
return Math.max(min, parsed);
}
return parsed;
}