Files
visit.waterschurch.org/tests/campuses.test.ts
T

39 lines
1.7 KiB
TypeScript
Raw Normal View History

import { describe, expect, it } from "vitest";
import { campuses, centralCampus, formatAddress, formatTimes, openCampuses, serviceOptions } from "@/config/campuses";
describe("campus configuration", () => {
it("loads and validates every campus", () => {
expect(campuses.length).toBeGreaterThanOrEqual(5);
for (const c of campuses) {
expect(c.id).toMatch(/^[a-z0-9-]+$/);
expect(c.coordinates.lat).not.toBe(0);
expect(c.phone).toMatch(/^\+1\d{10}$/);
expect(c.directionsUrl).toMatch(/^https:\/\//);
}
});
it("only open campuses are selectable and every open campus can be texted", () => {
for (const c of openCampuses) {
expect(c.status).toBe("open");
expect(c.smsNumber).toMatch(/^\+1\d{10}$/);
expect(c.sinchAccountId).toMatch(/^WatersChurch_OLA_\d{4}$/);
}
});
it("has exactly one central campus", () => {
expect(campuses.filter((c) => c.isCentral)).toHaveLength(1);
expect(centralCampus.id).toBe("north-attleboro");
});
it("formats addresses and times", () => {
const na = openCampuses.find((c) => c.id === "north-attleboro")!;
expect(formatAddress(na)).toBe("57 John L Dietsch Square, North Attleboro, MA 02763");
expect(formatTimes(["7:30 AM", "9:30 AM", "11:30 AM"])).toBe("7:30, 9:30 & 11:30 AM");
expect(formatTimes(["10:30 AM"])).toBe("10:30 AM");
expect(formatTimes(["9:30 AM", "7:00 PM"])).toBe("9:30 AM & 7:00 PM");
});
it("builds service options per campus", () => {
const nw = openCampuses.find((c) => c.id === "norwood")!;
const opts = serviceOptions(nw);
expect(opts.map((o) => o.value)).toContain("Sunday 9:30 AM");
expect(opts.some((o) => o.value.startsWith("First Wednesday"))).toBe(true);
});
});