44 lines
1.6 KiB
JavaScript
44 lines
1.6 KiB
JavaScript
import { describe, expect, it } from 'vitest';
|
|
import { applicationSchema } from '../src/schemas/application.js';
|
|
|
|
const valid = {
|
|
agreement_date: '2026-09-30',
|
|
full_name: 'Asha Rao',
|
|
age: 42,
|
|
address: 'Pune',
|
|
registration_no: 'MMC-12345',
|
|
medical_council: 'Maharashtra Medical Council',
|
|
pan: 'ABCDE1234F',
|
|
gstin: '27AAPFU0939F1ZV',
|
|
bank_name: 'State Bank of India',
|
|
account_holder: 'Asha Rao',
|
|
account_number: '123456789012',
|
|
ifsc: 'SBIN0001234',
|
|
};
|
|
|
|
describe('applicationSchema', () => {
|
|
it('accepts a complete agreement', () => {
|
|
expect(applicationSchema.parse(valid).registration_no).toBe('MMC-12345');
|
|
});
|
|
|
|
it('allows a missing GSTIN', () => {
|
|
const parsed = applicationSchema.parse({ ...valid, gstin: '' });
|
|
expect(parsed.gstin).toBeUndefined();
|
|
});
|
|
|
|
it('strips HTML from text fields', () => {
|
|
const parsed = applicationSchema.parse({ ...valid, full_name: 'Asha <b>Rao</b>' });
|
|
expect(parsed.full_name).toBe('Asha Rao');
|
|
});
|
|
|
|
it('rejects invalid agreement fields', () => {
|
|
expect(() => applicationSchema.parse({ ...valid, pan: 'abcde1234f' })).toThrow();
|
|
expect(() => applicationSchema.parse({ ...valid, ifsc: 'SBIN1001234' })).toThrow();
|
|
expect(() => applicationSchema.parse({ ...valid, gstin: 'NOT-A-GSTIN' })).toThrow();
|
|
expect(() => applicationSchema.parse({ ...valid, account_number: '12345678' })).toThrow();
|
|
expect(() => applicationSchema.parse({ ...valid, age: 20 })).toThrow();
|
|
expect(() => applicationSchema.parse({ ...valid, age: 101 })).toThrow();
|
|
expect(() => applicationSchema.parse({ ...valid, registration_no: ' ' })).toThrow();
|
|
});
|
|
});
|