- Implemented `getAppConfig` and `upsertAppConfig` functions in `config.ts` for managing application settings in the database. - Updated `mod.ts` to export the new configuration functions. - Refactored `ComicConfig.ts` to load and update comic watch paths using the new configuration functions. - Modified `comic_watcher.ts` to accept paths as parameters for creating watchers. - Created a new settings router in `settings.ts` for managing application settings via HTTP requests. - Integrated the settings router into the main server in `server.ts`. - Updated the settings management to use the new database-backed configuration. - Removed legacy configuration management code from `configRW.ts`. - Added integration tests for the settings router and error handling. - Updated `vitest` configuration for testing. - Cleaned up unused type definitions in `pnpm-lock.yaml`.
59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { ClientRequestError, error_handler } from "../src/route/error_handler.ts";
|
|
import { DocumentBodySchema } from "dbtype";
|
|
|
|
const createSet = () => ({ status: undefined as number | string | undefined });
|
|
|
|
describe("error_handler", () => {
|
|
it("formats ClientRequestError with provided status", () => {
|
|
const set = createSet();
|
|
const result = error_handler({
|
|
code: "UNKNOWN",
|
|
error: new ClientRequestError(400, "invalid payload"),
|
|
set,
|
|
});
|
|
|
|
expect(set.status).toBe(400);
|
|
expect(result).toEqual({
|
|
code: 400,
|
|
message: "BadRequest",
|
|
detail: "invalid payload",
|
|
});
|
|
});
|
|
|
|
it("coerces ZodError into a 400 response", () => {
|
|
const parseResult = DocumentBodySchema.safeParse({});
|
|
const set = createSet();
|
|
|
|
if (parseResult.success) {
|
|
throw new Error("Expected validation error");
|
|
}
|
|
|
|
const result = error_handler({
|
|
code: "VALIDATION",
|
|
error: parseResult.error,
|
|
set,
|
|
});
|
|
|
|
expect(set.status).toBe(400);
|
|
expect(result.code).toBe(400);
|
|
expect(result.message).toBe("BadRequest");
|
|
expect(result.detail).toContain("Required");
|
|
});
|
|
|
|
it("defaults to 500 for unexpected errors", () => {
|
|
const set = createSet();
|
|
const result = error_handler({
|
|
code: "INTERNAL_SERVER_ERROR",
|
|
error: new Error("boom"),
|
|
set,
|
|
});
|
|
|
|
expect(set.status).toBe(500);
|
|
expect(result).toEqual({
|
|
code: 500,
|
|
message: "Internal Server Error",
|
|
detail: "boom",
|
|
});
|
|
});
|
|
});
|