62 lines
2.2 KiB
TypeScript
62 lines
2.2 KiB
TypeScript
import { BadRequestException, ValidationPipe } from '@nestjs/common';
|
|
import { CredentialsDto } from '../modules/auth/presentation/auth.dto';
|
|
import {
|
|
CreateBankCardDto,
|
|
UpdateBankCardDto,
|
|
} from '../modules/banking/bank-cards/presentation/bank-card.dto';
|
|
|
|
describe('DTO validation', () => {
|
|
const pipe = new ValidationPipe({ transform: true, whitelist: true });
|
|
|
|
it('requires credentials and normalizes a valid email', async () => {
|
|
const metadata = { type: 'body' as const, metatype: CredentialsDto };
|
|
await expect(pipe.transform({}, metadata)).rejects.toBeInstanceOf(
|
|
BadRequestException,
|
|
);
|
|
await expect(
|
|
pipe.transform({ email: 'user@example.com' }, metadata),
|
|
).rejects.toBeInstanceOf(BadRequestException);
|
|
await expect(
|
|
pipe.transform(
|
|
{ email: ' User@Example.com ', password: 'long-enough-password' },
|
|
metadata,
|
|
),
|
|
).resolves.toEqual({
|
|
email: 'user@example.com',
|
|
password: 'long-enough-password',
|
|
});
|
|
});
|
|
|
|
it('requires and validates nested money in a new card', async () => {
|
|
const metadata = { type: 'body' as const, metatype: CreateBankCardDto };
|
|
const card = {
|
|
id: '00000000-0000-4000-8000-000000000001',
|
|
name: 'Everyday',
|
|
openingDate: '2026-09-13',
|
|
};
|
|
for (const openingBalance of [undefined, null, {}, { currency: 'RUB' }]) {
|
|
await expect(
|
|
pipe.transform({ ...card, openingBalance }, metadata),
|
|
).rejects.toBeInstanceOf(BadRequestException);
|
|
}
|
|
const valid = {
|
|
...card,
|
|
openingBalance: { currency: 'RUB', value: '100.00' },
|
|
};
|
|
await expect(pipe.transform(valid, metadata)).resolves.toEqual(valid);
|
|
});
|
|
|
|
it('keeps update fields optional while requiring version and rejecting null', async () => {
|
|
const metadata = { type: 'body' as const, metatype: UpdateBankCardDto };
|
|
await expect(pipe.transform({}, metadata)).rejects.toBeInstanceOf(
|
|
BadRequestException,
|
|
);
|
|
await expect(
|
|
pipe.transform({ version: 1, name: null }, metadata),
|
|
).rejects.toBeInstanceOf(BadRequestException);
|
|
await expect(
|
|
pipe.transform({ version: 1 }, metadata),
|
|
).resolves.toMatchObject({ version: 1 });
|
|
});
|
|
});
|