diff options
Diffstat (limited to 'packages/trpc/routers/prompts.test.ts')
| -rw-r--r-- | packages/trpc/routers/prompts.test.ts | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/packages/trpc/routers/prompts.test.ts b/packages/trpc/routers/prompts.test.ts new file mode 100644 index 00000000..5afd627e --- /dev/null +++ b/packages/trpc/routers/prompts.test.ts @@ -0,0 +1,141 @@ +import { beforeEach, describe, expect, test } from "vitest"; +import { z } from "zod"; + +import { zNewPromptSchema } from "@karakeep/shared/types/prompts"; + +import type { CustomTestContext } from "../testUtils"; +import { defaultBeforeEach } from "../testUtils"; + +beforeEach<CustomTestContext>(defaultBeforeEach(true)); + +describe("Prompts Routes", () => { + test<CustomTestContext>("create prompt", async ({ apiCallers }) => { + const api = apiCallers[0].prompts; + const newPromptInput: z.infer<typeof zNewPromptSchema> = { + text: "Test prompt text", + appliesTo: "summary", + }; + + const createdPrompt = await api.create({ ...newPromptInput }); + + expect(createdPrompt).toMatchObject({ + text: newPromptInput.text, + appliesTo: newPromptInput.appliesTo, + enabled: true, + }); + + const prompts = await api.list(); + const promptFromList = prompts.find((p) => p.id === createdPrompt.id); + expect(promptFromList).toBeDefined(); + expect(promptFromList?.text).toEqual(newPromptInput.text); + }); + + test<CustomTestContext>("update prompt", async ({ apiCallers }) => { + const api = apiCallers[0].prompts; + + // First, create a prompt + const createdPrompt = await api.create({ + text: "Original text", + appliesTo: "summary", + }); + + // Update it + const updatedPrompt = await api.update({ + promptId: createdPrompt.id, + text: "Updated text", + appliesTo: "summary", + enabled: false, + }); + + expect(updatedPrompt.text).toEqual("Updated text"); + expect(updatedPrompt.appliesTo).toEqual("summary"); + expect(updatedPrompt.enabled).toEqual(false); + + // Instead of api.getPrompt, use api.list() to verify + const prompts = await api.list(); + const promptFromList = prompts.find((p) => p.id === createdPrompt.id); + expect(promptFromList).toBeDefined(); + expect(promptFromList?.text).toEqual("Updated text"); + expect(promptFromList?.enabled).toEqual(false); + + // Test updating a non-existent prompt + await expect(() => + api.update({ + promptId: "non-existent-id", + text: "Should fail", + appliesTo: "summary", + enabled: true, // Assuming this matches the schema + }), + ).rejects.toThrow(/Prompt not found/); + }); + + test<CustomTestContext>("list prompts", async ({ apiCallers }) => { + const api = apiCallers[0].prompts; + + const emptyPrompts = await api.list(); + expect(emptyPrompts).toEqual([]); + + const prompt1Input: z.infer<typeof zNewPromptSchema> = { + text: "Prompt 1", + appliesTo: "summary", + }; + await api.create(prompt1Input); + + const prompt2Input: z.infer<typeof zNewPromptSchema> = { + text: "Prompt 2", + appliesTo: "summary", + }; + await api.create(prompt2Input); + + const prompts = await api.list(); + expect(prompts.length).toEqual(2); + expect(prompts.some((p) => p.text === "Prompt 1")).toBeTruthy(); + expect(prompts.some((p) => p.text === "Prompt 2")).toBeTruthy(); + }); + + test<CustomTestContext>("delete prompt", async ({ apiCallers }) => { + const api = apiCallers[0].prompts; + + // Create a prompt + const createdPromptInput: z.infer<typeof zNewPromptSchema> = { + text: "To be deleted", + appliesTo: "summary", + }; + const createdPrompt = await api.create(createdPromptInput); + + // Delete it + await api.delete({ promptId: createdPrompt.id }); + + // Instead of api.getPrompt, use api.list() to verify + const prompts = await api.list(); + expect(prompts.some((p) => p.id === createdPrompt.id)).toBeFalsy(); + }); + + test<CustomTestContext>("privacy for prompts", async ({ apiCallers }) => { + const user1PromptInput: z.infer<typeof zNewPromptSchema> = { + text: "User 1 prompt", + appliesTo: "summary", + }; + const user1Prompt = await apiCallers[0].prompts.create(user1PromptInput); + + const user2PromptInput: z.infer<typeof zNewPromptSchema> = { + text: "User 2 prompt", + appliesTo: "summary", + }; + const user2Prompt = await apiCallers[1].prompts.create(user2PromptInput); + + // User 1 should not access User 2's prompt + await expect(() => + apiCallers[0].prompts.delete({ promptId: user2Prompt.id }), + ).rejects.toThrow(/User is not allowed to access resource/); + + // List should only show the correct user's prompts + const user1Prompts = await apiCallers[0].prompts.list(); + expect(user1Prompts.length).toEqual(1); + expect(user1Prompts[0].id).toEqual(user1Prompt.id); + + const user2Prompts = await apiCallers[1].prompts.list(); + expect(user2Prompts.length).toEqual(1); + expect(user2Prompts[0].id).toEqual(user2Prompt.id); + }); +}); |
