Initial Commit
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import { describe, expect, it } from "@suaveplan/testing/runner";
|
||||
import { Hono } from "hono";
|
||||
import { TENANT_CODES, TenantError } from "../error-codes/error-codes.js";
|
||||
import { headerResolver } from "../resolver/resolver.js";
|
||||
import type { Tenant } from "../types/tenant.js";
|
||||
import { createTenantMiddleware } from "./middleware.js";
|
||||
import { requirePlugin } from "./require-plugin.js";
|
||||
|
||||
function makeTenant(over: Partial<Tenant> = {}): Tenant {
|
||||
return {
|
||||
id: "t_1",
|
||||
name: "Acme",
|
||||
slug: "acme",
|
||||
status: "active",
|
||||
settings: {},
|
||||
enabledPlugins: [],
|
||||
domains: [],
|
||||
createdAt: new Date(0),
|
||||
updatedAt: new Date(0),
|
||||
...over,
|
||||
};
|
||||
}
|
||||
|
||||
function trap() {
|
||||
const app = new Hono();
|
||||
app.onError((err, c) =>
|
||||
c.json(
|
||||
{ code: err instanceof TenantError ? err.code : "x" },
|
||||
err instanceof TenantError ? 404 : 500
|
||||
)
|
||||
);
|
||||
return app;
|
||||
}
|
||||
|
||||
describe("requirePlugin", () => {
|
||||
it("raises when no tenant resolved", { timeout: 5000 }, async () => {
|
||||
const app = trap();
|
||||
app.get("/", requirePlugin("payment"), (c) => c.text("never"));
|
||||
const res = await app.request("/");
|
||||
const body = (await res.json()) as { code: string };
|
||||
expect(body.code).toBe(TENANT_CODES.NOT_FOUND);
|
||||
});
|
||||
|
||||
it("raises when plugin not enabled", { timeout: 5000 }, async () => {
|
||||
const app = trap();
|
||||
app.use(
|
||||
"*",
|
||||
createTenantMiddleware({
|
||||
resolver: headerResolver("x-tenant-id", async () =>
|
||||
makeTenant({ enabledPlugins: [] })
|
||||
),
|
||||
})
|
||||
);
|
||||
app.get("/", requirePlugin("payment"), (c) => c.text("never"));
|
||||
const res = await app.request("/", {
|
||||
headers: { "x-tenant-id": "acme" },
|
||||
});
|
||||
const body = (await res.json()) as { code: string };
|
||||
expect(body.code).toBe(TENANT_CODES.INVALID_INPUT);
|
||||
});
|
||||
|
||||
it("passes through when plugin enabled", { timeout: 5000 }, async () => {
|
||||
const app = trap();
|
||||
app.use(
|
||||
"*",
|
||||
createTenantMiddleware({
|
||||
resolver: headerResolver("x-tenant-id", async () =>
|
||||
makeTenant({ enabledPlugins: ["payment"] })
|
||||
),
|
||||
})
|
||||
);
|
||||
app.get("/", requirePlugin("payment"), (c) => c.text("yes"));
|
||||
const res = await app.request("/", {
|
||||
headers: { "x-tenant-id": "acme" },
|
||||
});
|
||||
expect(await res.text()).toBe("yes");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user