mirror of https://github.com/openclaw/openclaw.git
test: merge approval renderer cases
This commit is contained in:
parent
cf3d7c8d57
commit
a217e97fe5
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue