test: merge approval renderer cases

This commit is contained in:
Peter Steinberger 2026-04-01 03:23:41 +01:00
parent cf3d7c8d57
commit a217e97fe5
No known key found for this signature in database
1 changed files with 133 additions and 123 deletions

View File

@ -7,140 +7,150 @@ import {
} from "./approval-renderers.js";
describe("plugin-sdk/approval-renderers", () => {
it("builds shared approval payloads with generic interactive commands", () => {
const payload = buildApprovalPendingReplyPayload({
approvalId: "plugin:approval-123",
approvalSlug: "plugin:a",
text: "Approval required @everyone",
});
expect(payload.text).toContain("@everyone");
expect(payload.interactive).toEqual({
blocks: [
{
type: "buttons",
buttons: [
{
label: "Allow Once",
value: "/approve plugin:approval-123 allow-once",
style: "success",
},
{
label: "Allow Always",
value: "/approve plugin:approval-123 always",
style: "primary",
},
{
label: "Deny",
value: "/approve plugin:approval-123 deny",
style: "danger",
},
],
},
],
});
});
it("builds plugin pending payloads with approval metadata and extra channel data", () => {
const payload = buildPluginApprovalPendingReplyPayload({
request: {
id: "plugin-approval-123",
request: {
title: "Sensitive action",
description: "Needs approval",
},
createdAtMs: 1_000,
expiresAtMs: 61_000,
it.each([
{
name: "builds shared approval payloads with generic interactive commands",
payload: buildApprovalPendingReplyPayload({
approvalId: "plugin:approval-123",
approvalSlug: "plugin:a",
text: "Approval required @everyone",
}),
textExpected: (text: string) => expect(text).toContain("@everyone"),
interactiveExpected: {
blocks: [
{
type: "buttons",
buttons: [
{
label: "Allow Once",
value: "/approve plugin:approval-123 allow-once",
style: "success",
},
{
label: "Allow Always",
value: "/approve plugin:approval-123 always",
style: "primary",
},
{
label: "Deny",
value: "/approve plugin:approval-123 deny",
style: "danger",
},
],
},
],
},
nowMs: 1_000,
approvalSlug: "custom-slug",
channelData: {
channelDataExpected: undefined,
},
{
name: "builds plugin pending payloads with approval metadata and extra channel data",
payload: buildPluginApprovalPendingReplyPayload({
request: {
id: "plugin-approval-123",
request: {
title: "Sensitive action",
description: "Needs approval",
},
createdAtMs: 1_000,
expiresAtMs: 61_000,
},
nowMs: 1_000,
approvalSlug: "custom-slug",
channelData: {
telegram: {
quoteText: "quoted",
},
},
}),
textExpected: (text: string) => expect(text).toContain("Plugin approval required"),
interactiveExpected: {
blocks: [
{
type: "buttons",
buttons: [
{
label: "Allow Once",
value: "/approve plugin-approval-123 allow-once",
style: "success",
},
{
label: "Allow Always",
value: "/approve plugin-approval-123 always",
style: "primary",
},
{
label: "Deny",
value: "/approve plugin-approval-123 deny",
style: "danger",
},
],
},
],
},
channelDataExpected: {
execApproval: {
approvalId: "plugin-approval-123",
approvalSlug: "custom-slug",
allowedDecisions: ["allow-once", "allow-always", "deny"],
state: "pending",
},
telegram: {
quoteText: "quoted",
},
},
});
expect(payload.text).toContain("Plugin approval required");
expect(payload.interactive).toEqual({
blocks: [
{
type: "buttons",
buttons: [
{
label: "Allow Once",
value: "/approve plugin-approval-123 allow-once",
style: "success",
},
{
label: "Allow Always",
value: "/approve plugin-approval-123 always",
style: "primary",
},
{
label: "Deny",
value: "/approve plugin-approval-123 deny",
style: "danger",
},
],
},
],
});
expect(payload.channelData).toMatchObject({
execApproval: {
approvalId: "plugin-approval-123",
approvalSlug: "custom-slug",
allowedDecisions: ["allow-once", "allow-always", "deny"],
state: "pending",
},
telegram: {
quoteText: "quoted",
},
});
});
it("builds generic resolved payloads with approval metadata", () => {
const payload = buildApprovalResolvedReplyPayload({
approvalId: "req-123",
approvalSlug: "req-123",
text: "resolved @everyone",
});
expect(payload.text).toBe("resolved @everyone");
expect(payload.channelData).toEqual({
execApproval: {
},
{
name: "builds generic resolved payloads with approval metadata",
payload: buildApprovalResolvedReplyPayload({
approvalId: "req-123",
approvalSlug: "req-123",
state: "resolved",
text: "resolved @everyone",
}),
textExpected: (text: string) => expect(text).toBe("resolved @everyone"),
interactiveExpected: undefined,
channelDataExpected: {
execApproval: {
approvalId: "req-123",
approvalSlug: "req-123",
state: "resolved",
},
},
});
});
it("builds plugin resolved payloads with optional channel data", () => {
const payload = buildPluginApprovalResolvedReplyPayload({
resolved: {
id: "plugin-approval-123",
decision: "allow-once",
resolvedBy: "discord:user:1",
ts: 2_000,
},
channelData: {
},
{
name: "builds plugin resolved payloads with optional channel data",
payload: buildPluginApprovalResolvedReplyPayload({
resolved: {
id: "plugin-approval-123",
decision: "allow-once",
resolvedBy: "discord:user:1",
ts: 2_000,
},
channelData: {
discord: {
components: [{ type: "container" }],
},
},
}),
textExpected: (text: string) => expect(text).toContain("Plugin approval allowed once"),
interactiveExpected: undefined,
channelDataExpected: {
execApproval: {
approvalId: "plugin-approval-123",
approvalSlug: "plugin-a",
state: "resolved",
},
discord: {
components: [{ type: "container" }],
},
},
});
expect(payload.text).toContain("Plugin approval allowed once");
expect(payload.channelData).toEqual({
execApproval: {
approvalId: "plugin-approval-123",
approvalSlug: "plugin-a",
state: "resolved",
},
discord: {
components: [{ type: "container" }],
},
});
},
])("$name", ({ payload, textExpected, interactiveExpected, channelDataExpected }) => {
textExpected(payload.text);
if (interactiveExpected) {
expect(payload.interactive).toEqual(interactiveExpected);
}
if (channelDataExpected) {
expect(payload.channelData).toEqual(channelDataExpected);
}
});
});