77 lines
2.3 KiB
TypeScript
77 lines
2.3 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
|
|
import { bankDateInputValue, bankMonth, bankToday } from "./form-validation";
|
|
import {
|
|
bankCardSchema,
|
|
bankDateSchema,
|
|
positiveMoneySchema,
|
|
} from "./form.schema";
|
|
import { bankMoneyValue } from "./money";
|
|
|
|
afterEach(() => vi.useRealTimers());
|
|
describe("bank form input", () => {
|
|
it("keeps input bounds exact without rounding and canonicalizes leading zeros", () => {
|
|
expect(positiveMoneySchema.safeParse("92233720368547758.07").success).toBe(
|
|
true,
|
|
);
|
|
|
|
for (const invalid of [
|
|
"92233720368547758.08",
|
|
"1.001",
|
|
"0",
|
|
"-1",
|
|
"abc",
|
|
"1e3",
|
|
]) {
|
|
expect(positiveMoneySchema.safeParse(invalid).success).toBe(false);
|
|
}
|
|
|
|
expect(bankMoneyValue(" -00010,20 ")).toBe("-10.20");
|
|
|
|
const values = {
|
|
bankName: "",
|
|
lastFour: "",
|
|
name: "A",
|
|
openingBalance: "-92233720368547758.08",
|
|
openingDate: "2026-01-01",
|
|
};
|
|
|
|
expect(bankCardSchema.safeParse(values).success).toBe(true);
|
|
expect(
|
|
bankCardSchema.safeParse({
|
|
...values,
|
|
openingBalance: "-92233720368547758.09",
|
|
}).success,
|
|
).toBe(false);
|
|
expect(
|
|
bankCardSchema.safeParse({ ...values, lastFour: "123" }).success,
|
|
).toBe(false);
|
|
});
|
|
it("uses Moscow date and refuses nonexistent or future calendar days", () => {
|
|
vi.useFakeTimers();
|
|
vi.setSystemTime(new Date("2026-08-31T21:30:00Z"));
|
|
expect(bankToday()).toBe("2026-09-01");
|
|
expect(bankMonth(null)).toBe("2026-09");
|
|
expect(bankMonth("2026-13")).toBe("2026-09");
|
|
expect(bankDateSchema.safeParse("2026-09-01").success).toBe(true);
|
|
expect(bankDateSchema.safeParse("2026-09-02").success).toBe(false);
|
|
expect(bankDateSchema.safeParse("2026-02-30").success).toBe(false);
|
|
expect(bankDateSchema.safeParse("0000-01-01").success).toBe(false);
|
|
expect(bankDateSchema.safeParse("0001-01-01").success).toBe(true);
|
|
expect(bankDateSchema.safeParse("0099-12-31").success).toBe(true);
|
|
});
|
|
});
|
|
|
|
it("converts local date input without accepting impossible or unfinished dates", () => {
|
|
expect(bankDateInputValue("07.08.2026")).toBe("2026-08-07");
|
|
expect(
|
|
bankDateSchema.safeParse(bankDateInputValue("29.02.2024")).success,
|
|
).toBe(true);
|
|
|
|
for (const value of ["31.02.2026", "07.08.", ""]) {
|
|
expect(bankDateSchema.safeParse(bankDateInputValue(value)).success).toBe(
|
|
false,
|
|
);
|
|
}
|
|
});
|