| import { describe, expect, it } from "vitest"; |
| import { parseSlackBlocksInput } from "./blocks-input.js"; |
|
|
| describe("parseSlackBlocksInput", () => { |
| it("returns undefined when blocks are missing", () => { |
| expect(parseSlackBlocksInput(undefined)).toBeUndefined(); |
| expect(parseSlackBlocksInput(null)).toBeUndefined(); |
| }); |
|
|
| it("accepts blocks arrays", () => { |
| const parsed = parseSlackBlocksInput([{ type: "divider" }]); |
| expect(parsed).toEqual([{ type: "divider" }]); |
| }); |
|
|
| it("accepts JSON blocks strings", () => { |
| const parsed = parseSlackBlocksInput( |
| '[{"type":"section","text":{"type":"mrkdwn","text":"hi"}}]', |
| ); |
| expect(parsed).toEqual([{ type: "section", text: { type: "mrkdwn", text: "hi" } }]); |
| }); |
|
|
| it("rejects invalid block payloads", () => { |
| const cases = [ |
| { |
| name: "invalid JSON", |
| input: "{bad-json", |
| expectedMessage: /valid JSON/i, |
| }, |
| { |
| name: "non-array payload", |
| input: { type: "divider" }, |
| expectedMessage: /must be an array/i, |
| }, |
| { |
| name: "empty array", |
| input: [], |
| expectedMessage: /at least one block/i, |
| }, |
| { |
| name: "non-object block", |
| input: ["not-a-block"], |
| expectedMessage: /must be an object/i, |
| }, |
| { |
| name: "missing block type", |
| input: [{}], |
| expectedMessage: /non-empty string type/i, |
| }, |
| ] as const; |
|
|
| for (const testCase of cases) { |
| expect(() => parseSlackBlocksInput(testCase.input), testCase.name).toThrow( |
| testCase.expectedMessage, |
| ); |
| } |
| }); |
| }); |
|
|