mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
112 lines
3.2 KiB
TypeScript
112 lines
3.2 KiB
TypeScript
/**
|
|
* __tests__/ZammadCreateRole.spec.ts
|
|
*/
|
|
|
|
import { Zammad } from '../Zammad.node';
|
|
import * as GenericFunctions from '../GenericFunctions';
|
|
import { NodeOperationError } from 'n8n-workflow';
|
|
|
|
// Wir verwenden Jest-Mocks, um Aufrufe an das zammadApiRequest abzufangen.
|
|
jest.mock('../GenericFunctions', () => ({
|
|
...jest.requireActual('../GenericFunctions'),
|
|
zammadApiRequest: jest.fn(),
|
|
}));
|
|
|
|
describe('Zammad Node - Create Role', () => {
|
|
const zammadNode = new Zammad();
|
|
|
|
// Beispielhafte Rückgabe der API
|
|
const mockApiResponse = {
|
|
id: 123,
|
|
name: 'Test Role',
|
|
active: true,
|
|
};
|
|
|
|
beforeEach(() => {
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
test('Erstellt erfolgreich eine Rolle', async () => {
|
|
// 1) zammadApiRequest so einstellen, dass es unsere mockApiResponse zurückgibt
|
|
(GenericFunctions.zammadApiRequest as jest.Mock).mockResolvedValue(mockApiResponse);
|
|
|
|
// 2) InputData simulieren: Wir tun so, als ob n8n 1 Item mit den Node-Parametern liefert
|
|
const items = [
|
|
{
|
|
json: {},
|
|
},
|
|
];
|
|
|
|
// 3) Wir faken `this`, damit wir `getNodeParameter` & `getInputData` aufrufen können
|
|
const fakeThis: any = {
|
|
getNodeParameter: (paramName: string, _itemIndex: number) => {
|
|
// Wir geben die Resource und Operation zurück, die wir testen wollen.
|
|
// Außerdem simulieren wir einen minimalen Parameter-Satz (name etc.).
|
|
const map: Record<string, any> = {
|
|
resource: 'role',
|
|
operation: 'create',
|
|
name: 'Test Role',
|
|
additionalFields: {},
|
|
};
|
|
return map[paramName];
|
|
},
|
|
getInputData: () => items,
|
|
helpers: {
|
|
// Wichtig für die Konstruktion unserer Antwort
|
|
returnJsonArray: (data: any) => (Array.isArray(data) ? data : [data]),
|
|
constructExecutionMetaData: (data: any) => data,
|
|
},
|
|
continueOnFail: () => false,
|
|
};
|
|
|
|
// 4) Node ausführen
|
|
const result = await zammadNode.execute.call(fakeThis);
|
|
|
|
// 5) Erwartungen prüfen
|
|
|
|
// 5a) Wurde `zammadApiRequest` aufgerufen?
|
|
expect(GenericFunctions.zammadApiRequest).toHaveBeenCalledTimes(1);
|
|
|
|
// 5b) Wurde die Rolle korrekt mit POST auf /roles erstellt?
|
|
expect(GenericFunctions.zammadApiRequest).toHaveBeenCalledWith(
|
|
expect.anything(), // `this`-Kontext
|
|
'POST',
|
|
'/roles',
|
|
{ name: 'Test Role' }, // Body, den der Node erstellt
|
|
);
|
|
|
|
// 5c) Entspricht das zurückgelieferte Ergebnis der Mock-Antwort?
|
|
expect(result).toBeDefined();
|
|
expect(result[0][0].json).toEqual(mockApiResponse);
|
|
});
|
|
|
|
test('Fehler bei fehlendem Namen', async () => {
|
|
// Wenn `getNodeParameter('name', i)` fehlt, sollte ein Fehler fliegen:
|
|
const items = [
|
|
{
|
|
json: {},
|
|
},
|
|
];
|
|
|
|
const fakeThis: any = {
|
|
getNodeParameter: (paramName: string, _itemIndex: number) => {
|
|
// Resource und Operation bleiben gleich, aber wir geben keinen "name" zurück.
|
|
const map: Record<string, any> = {
|
|
resource: 'role',
|
|
operation: 'create',
|
|
additionalFields: {},
|
|
};
|
|
return map[paramName];
|
|
},
|
|
getInputData: () => items,
|
|
helpers: {
|
|
returnJsonArray: (data: any) => (Array.isArray(data) ? data : [data]),
|
|
constructExecutionMetaData: (data: any) => data,
|
|
},
|
|
continueOnFail: () => false,
|
|
};
|
|
|
|
await expect(zammadNode.execute.call(fakeThis)).rejects.toThrow(NodeOperationError);
|
|
});
|
|
});
|