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.
73 lines
2.4 KiB
TypeScript
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);
|
|
});
|
|
});
|