Files
n8n-nodes-signal-cli/nodes/Signal/Signal.test.ts
François-Guillaume Ribreau 130d6b8216 🤖🌏
2025-05-04 23:38:17 +02:00

203 lines
5.9 KiB
TypeScript

import { Signal } from "./Signal.node";
import type { IExecuteFunctions } from "n8n-workflow";
import omit from "omit-deep";
jest.mock("uuid", () => ({ v4: () => "n8n" }));
describe("Signal Node", () => {
afterEach(() => {
jest.restoreAllMocks();
});
it("should send a message", async () => {
const signal = new Signal();
const executeFunctions = {
getCredentials: async () => ({
url: process.env.ENDPOINT,
account: process.env.ACCOUNT_NUMBER,
}),
getNodeParameter: (paramName: string): string => {
if (paramName === "account")
return process.env.ACCOUNT_NUMBER as string;
if (paramName === "recipient")
return process.env.ACCOUNT_NUMBER as string;
if (paramName === "message") return "Hello, world!";
if (paramName === "resource") return "message";
if (paramName === "operation") return "send";
throw new Error(`Unexpected parameter name: ${paramName}`);
},
helpers: {},
logger: {
debug: jest.fn(),
info: jest.fn(),
warn: jest.fn(),
error: jest.fn(),
} as any,
getExecutionId: jest.fn(),
getNode: jest.fn(),
continueOnFail: jest.fn(),
getInputData: jest.fn(),
getWorkflowStaticData: jest.fn(),
getRestApiUrl: jest.fn(),
getTimezone: jest.fn(),
getWorkflow: jest.fn(),
} as unknown as IExecuteFunctions;
const result = await signal.execute.call(executeFunctions);
expect(
omit(result[0][0].json, [
"timestamp",
"result.results.0.recipientAddress.uuid",
"result.results.0.recipientAddress.number",
])
).toMatchInlineSnapshot(`
{
"id": "n8n",
"jsonrpc": "2.0",
"result": {
"results": [
{
"recipientAddress": {},
"type": "SUCCESS",
},
],
},
}
`);
});
it("should create a group", async () => {
const signal = new Signal();
const executeFunctions = {
getCredentials: async () => ({
url: process.env.ENDPOINT,
account: process.env.ACCOUNT_NUMBER,
}),
getNodeParameter: (paramName: string): string => {
if (paramName === "account")
return process.env.ACCOUNT_NUMBER as string;
if (paramName === "name") return "Test Group";
if (paramName === "members") return `${process.env.ACCOUNT_NUMBER}`;
if (paramName === "resource") return "group";
if (paramName === "operation") return "create";
throw new Error(`Unexpected parameter name: ${paramName}`);
},
helpers: {},
logger: {
debug: jest.fn(),
info: jest.fn(),
warn: jest.fn(),
error: jest.fn(),
} as any,
getExecutionId: jest.fn(),
getNode: jest.fn(),
continueOnFail: jest.fn(),
getInputData: jest.fn(),
getWorkflowStaticData: jest.fn(),
getRestApiUrl: jest.fn(),
getTimezone: jest.fn(),
getWorkflow: jest.fn(),
} as unknown as IExecuteFunctions;
const result = await signal.execute.call(executeFunctions);
expect(omit(result[0][0].json, ["timestamp", "result.groupId"]))
.toMatchInlineSnapshot(`
{
"id": "n8n",
"jsonrpc": "2.0",
"result": {
"results": [],
},
}
`);
});
it("should list groups", async () => {
const signal = new Signal();
const executeFunctions = {
getCredentials: async () => ({
url: process.env.ENDPOINT,
account: process.env.ACCOUNT_NUMBER,
}),
getNodeParameter: (paramName: string): string => {
if (paramName === "account")
return process.env.ACCOUNT_NUMBER as string;
if (paramName === "resource") return "group";
if (paramName === "operation") return "list";
throw new Error(`Unexpected parameter name: ${paramName}`);
},
helpers: {},
logger: {
debug: jest.fn(),
info: jest.fn(),
warn: jest.fn(),
error: jest.fn(),
} as any,
getExecutionId: jest.fn(),
getNode: jest.fn(),
continueOnFail: jest.fn(),
getInputData: jest.fn(),
getWorkflowStaticData: jest.fn(),
getRestApiUrl: jest.fn(),
getTimezone: jest.fn(),
getWorkflow: jest.fn(),
} as unknown as IExecuteFunctions;
const result = await signal.execute.call(executeFunctions);
expect((result?.[0]?.[0]?.json?.result as any[]).length).toBeGreaterThan(0);
expect(omit(result[0][0].json, ["timestamp", "result"]))
.toMatchInlineSnapshot(`
{
"id": "n8n",
"jsonrpc": "2.0",
}
`);
});
it("should list contacts", async () => {
const signal = new Signal();
const executeFunctions = {
getCredentials: async () => ({
url: process.env.ENDPOINT,
account: process.env.ACCOUNT_NUMBER,
}),
getNodeParameter: (paramName: string): string => {
if (paramName === "account")
return process.env.ACCOUNT_NUMBER as string;
if (paramName === "resource") return "contact";
if (paramName === "operation") return "list";
throw new Error(`Unexpected parameter name: ${paramName}`);
},
helpers: {},
logger: {
debug: jest.fn(),
info: jest.fn(),
warn: jest.fn(),
error: jest.fn(),
} as any,
getExecutionId: jest.fn(),
getNode: jest.fn(),
continueOnFail: jest.fn(),
getInputData: jest.fn(),
getWorkflowStaticData: jest.fn(),
getRestApiUrl: jest.fn(),
getTimezone: jest.fn(),
getWorkflow: jest.fn(),
} as unknown as IExecuteFunctions;
const result = await signal.execute.call(executeFunctions);
expect((result?.[0]?.[0]?.json?.result as any[]).length).toBeGreaterThan(0);
expect(omit(result?.[0]?.[0]?.json, ["timestamp", "result"]))
.toMatchInlineSnapshot(`
{
"id": "n8n",
"jsonrpc": "2.0",
}
`);
});
});