Files
nullcart/backend/src/validation/decorators/isConfirmationTiers.spec.ts
T
nobswebdev deb5f8c2c3 Require min 1 confirmation in payment tier config.
Disallow minConfirmations: 0 for BTC and XMR tiers at startup validation, update env examples and deploy docs, and drop tx-detected UI copy and legacy tests.
2026-09-08 23:31:23 +02:00

73 lines
2.4 KiB
TypeScript

import { validateSync } from 'class-validator';
import { IsConfirmationTiers } from './isConfirmationTiers';
class TestDto {
@IsConfirmationTiers()
CONFIRMATION_TIERS: string;
}
const validateTiers = (value: string) => {
const dto = Object.assign(new TestDto(), { CONFIRMATION_TIERS: value });
return validateSync(dto);
};
const validTiers =
'[{"upToTotalFiat":"25","minConfirmations":1},{"upToTotalFiat":"250","minConfirmations":5},{"minConfirmations":10}]';
describe('IsConfirmationTiers', () => {
it('accepts valid default tiers', () => {
expect(validateTiers(validTiers)).toHaveLength(0);
});
it('rejects empty string', () => {
expect(validateTiers('').length).toBeGreaterThan(0);
});
it('rejects invalid JSON', () => {
expect(validateTiers('not-json').length).toBeGreaterThan(0);
});
it('rejects empty array', () => {
expect(validateTiers('[]').length).toBeGreaterThan(0);
});
it('rejects minConfirmations: 0', () => {
const tiers =
'[{"upToTotalFiat":"25","minConfirmations":0},{"upToTotalFiat":"250","minConfirmations":5},{"minConfirmations":10}]';
expect(validateTiers(tiers).length).toBeGreaterThan(0);
});
it('rejects non-numeric minConfirmations', () => {
const tiers =
'[{"upToTotalFiat":"25","minConfirmations":"foo"},{"upToTotalFiat":"250","minConfirmations":5},{"minConfirmations":10}]';
expect(validateTiers(tiers).length).toBeGreaterThan(0);
});
it('rejects missing upToTotalFiat on non-final tier', () => {
const tiers = '[{"minConfirmations":1},{"upToTotalFiat":"250","minConfirmations":5},{"minConfirmations":10}]';
expect(validateTiers(tiers).length).toBeGreaterThan(0);
});
it('rejects non-positive upToTotalFiat on non-final tier', () => {
const tiers = '[{"upToTotalFiat":"0","minConfirmations":1},{"minConfirmations":10}]';
expect(validateTiers(tiers).length).toBeGreaterThan(0);
});
it('rejects negative minConfirmations', () => {
const tiers = '[{"upToTotalFiat":"25","minConfirmations":-1},{"minConfirmations":10}]';
expect(validateTiers(tiers).length).toBeGreaterThan(0);
});
it('rejects catch-all tier with upToTotalFiat', () => {
const tiers = '[{"upToTotalFiat":"25","minConfirmations":1},{"upToTotalFiat":"999","minConfirmations":10}]';
expect(validateTiers(tiers).length).toBeGreaterThan(0);
});
});