Files
frontend/src/entities/bank-card/model/form-validation.test.ts
T
ksv741 f9f0f6921e
Frontend verify / commits (pull_request) Failing after 1m19s
Frontend verify / security (pull_request) Skipped
Frontend verify / verify (pull_request) Skipped
refactor: clarify frontend module ownership
2026-09-29 07:07:36 +03:00

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,
);
}
});