You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
1.2 KiB

import { describe, expect, it } from "vitest";
import {
US_STATES,
filterUsStateOptions,
isValidUsStateCode,
normalizeUsStateCode,
} from "@/lib/frontend/us-states";
describe("us-states", () => {
it("包含全部 50 个州码", () => {
expect(US_STATES).toHaveLength(50);
expect(new Set(US_STATES).size).toBe(50);
});
it("normalizeUsStateCode 支持州码与州名", () => {
expect(normalizeUsStateCode("ca")).toBe("CA");
expect(normalizeUsStateCode("California")).toBe("CA");
expect(normalizeUsStateCode("new york")).toBe("NY");
expect(normalizeUsStateCode("XX")).toBeNull();
expect(normalizeUsStateCode("")).toBeNull();
});
it("filterUsStateOptions 可按州码或州名过滤", () => {
const byCode = filterUsStateOptions("tx");
expect(byCode.some((s) => s.code === "TX")).toBe(true);
const byName = filterUsStateOptions("carolina");
expect(byName.map((s) => s.code).sort()).toEqual(["NC", "SC"]);
expect(filterUsStateOptions("")).toHaveLength(50);
});
it("isValidUsStateCode 校验 2 位州码", () => {
expect(isValidUsStateCode("WY")).toBe(true);
expect(isValidUsStateCode("wy")).toBe(true);
expect(isValidUsStateCode("ZZ")).toBe(false);
});
});