41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
import { createMSTeamsPollStoreFs } from "./polls.js";
|
|
import { createMSTeamsPollStoreMemory } from "./polls-store-memory.js";
|
|
|
|
const createFsStore = async () => {
|
|
const stateDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), "clawdbot-msteams-polls-"));
|
|
return createMSTeamsPollStoreFs({ stateDir });
|
|
};
|
|
|
|
const createMemoryStore = () => createMSTeamsPollStoreMemory();
|
|
|
|
describe.each([
|
|
{ name: "memory", createStore: createMemoryStore },
|
|
{ name: "fs", createStore: createFsStore },
|
|
])("$name poll store", ({ createStore }) => {
|
|
it("stores polls and records normalized votes", async () => {
|
|
const store = await createStore();
|
|
await store.createPoll({
|
|
id: "poll-1",
|
|
question: "Lunch?",
|
|
options: ["Pizza", "Sushi"],
|
|
maxSelections: 1,
|
|
createdAt: new Date().toISOString(),
|
|
votes: {},
|
|
});
|
|
|
|
const poll = await store.recordVote({
|
|
pollId: "poll-1",
|
|
voterId: "user-1",
|
|
selections: ["0", "1"],
|
|
});
|
|
|
|
expect(poll?.votes["user-1"]).toEqual(["0"]);
|
|
});
|
|
});
|