mirror of
https://github.com/n8n-io/n8n.git
synced 2025-02-02 07:01:30 -08:00
Integrate Node Tests for role
This commit is contained in:
parent
844f8f3ca7
commit
7057b4b8d1
111
packages/nodes-base/nodes/Zammad/test/Roles.test.ts
Normal file
111
packages/nodes-base/nodes/Zammad/test/Roles.test.ts
Normal file
|
@ -0,0 +1,111 @@
|
|||
/**
|
||||
* __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);
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue