@oberoncms/core
Version:
OberonCMS is a cloud deployable CMS written in typescript based on the Puck visual editor
84 lines (73 loc) • 2.62 kB
text/typescript
import { describe, expect, it } from "@dev/vitest"
import { memoryAdapter } from "better-auth/adapters/memory"
import { authPlugin } from "../auth"
import { NotImplementedError } from "../lib/dtd"
import { initPlugins } from "./init-plugins"
import { mockPlugin } from "./mock-plugin"
describe("initPlugins key value store", { tags: ["ai", "issue-318"] }, () => {
it("exposes a fallback KV contract before a database plugin implements it", async () => {
const { adapter } = initPlugins()
expect(() => adapter.getKV("tailwind", "state")).toThrow(
new NotImplementedError(
"No oberon plugin provided for getKV action, please check your oberon adapter configuration.",
),
)
expect(() =>
adapter.putKV("tailwind", "state", { activeHash: "abc123" }),
).toThrow(
new NotImplementedError(
"No oberon plugin provided for putKV action, please check your oberon adapter configuration.",
),
)
expect(() => adapter.deleteKV("tailwind", "state")).toThrow(
new NotImplementedError(
"No oberon plugin provided for deleteKV action, please check your oberon adapter configuration.",
),
)
})
it("lets the mock plugin override KV methods with demo-only stubs", async () => {
const { adapter } = initPlugins([mockPlugin])
expect(() => adapter.getKV("mock-plugin", "state")).toThrow(
new NotImplementedError("This action is not available in the demo"),
)
expect(() =>
adapter.putKV("mock-plugin", "state", { activeHash: "abc123" }),
).toThrow(
new NotImplementedError("This action is not available in the demo"),
)
expect(() => adapter.deleteKV("mock-plugin", "state")).toThrow(
new NotImplementedError("This action is not available in the demo"),
)
})
it("uses deterministic plugin order when multiple plugins provide betterAuth", async () => {
const validAuthCapabilityPlugin = () => ({
name: "valid-better-auth-plugin",
adapter: {
betterAuth: {
database: memoryAdapter({}),
},
sendVerificationRequest: async () => {},
},
})
const missingAuthCapabilityPlugin = () => ({
name: "missing-better-auth-plugin",
adapter: {
betterAuth: undefined,
},
})
expect(() =>
initPlugins([
missingAuthCapabilityPlugin,
validAuthCapabilityPlugin,
authPlugin,
]),
).not.toThrow()
expect(() =>
initPlugins([
validAuthCapabilityPlugin,
missingAuthCapabilityPlugin,
authPlugin,
]),
).not.toThrow()
})
})