- 100% coverage on 58 src/actions/*.ts, 24 src/lib/services/*.ts, 19 src/features|db|hooks|i18n/*.ts - 3 core lib modules (theme-resolver, ip-lookup, translation-pool): 100% - ~3,000 new meaningful tests - Bugfixes: - theme-resolver: generateScopedCss now emits scoped CSS blocks (was early-return bug) - admin-radio-api-keys: blank rateLimit now uses fallback - admin-badge-upload: validation before try-block to prevent swallowed redirect - Coverage raised from 26% -> 34% statements
36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { CatalogPackages } from "./catalog-packages";
|
|
|
|
const columns = CatalogPackages[Symbol.for("drizzle:Columns")] as Record<
|
|
string,
|
|
{ name: string; notNull: boolean; primary: boolean; dataType: string }
|
|
>;
|
|
|
|
describe("CatalogPackages table schema", () => {
|
|
it("maps to the website_catalog_packages table", () => {
|
|
expect(CatalogPackages[Symbol.for("drizzle:Name")]).toBe(
|
|
"website_catalog_packages",
|
|
);
|
|
});
|
|
|
|
it("defines a uuid primary key", () => {
|
|
expect(columns.id).toMatchObject({ name: "id", primary: true, notNull: true });
|
|
});
|
|
|
|
it("defines the package metadata columns as NOT NULL", () => {
|
|
for (const key of ["name", "version", "status", "mode", "payload"]) {
|
|
expect(columns[key]?.notNull).toBe(true);
|
|
expect(columns[key]?.name).toBe(key);
|
|
}
|
|
});
|
|
|
|
it("keeps the version column numeric and payload longtext", () => {
|
|
expect(columns.version.dataType).toBe("number");
|
|
expect(columns.payload.dataType).toBe("string");
|
|
});
|
|
|
|
it("tracks an updated_at timestamp and exposes $inferSelect/$inferInsert types", () => {
|
|
expect(columns.updatedAt.name).toBe("updated_at");
|
|
expect(columns.updatedAt.notNull).toBe(true);
|
|
});
|
|
}); |