n8n/packages/nodes-base/nodes/Lemlist/test/GenericFunctions.test.ts

116 lines
4.7 KiB
TypeScript

import type {
IExecuteFunctions,
IHookFunctions,
ILoadOptionsFunctions,
IDataObject,
IHttpRequestMethods,
} from 'n8n-workflow';
import { lemlistApiRequest, lemlistApiRequestAllItems, getEvents } from '../GenericFunctions';
describe('GenericFunctions', () => {
describe('lemlistApiRequest', () => {
const mockThis = {
helpers: {
requestWithAuthentication: jest.fn(),
},
} as unknown as IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions;
it('should make an authenticated API request to Lemlist', async () => {
const method: IHttpRequestMethods = 'GET';
const endpoint = '/test-endpoint';
const body: IDataObject = { key: 'value' };
const qs: IDataObject = { query: 'value' };
const option: IDataObject = { headers: {} };
await lemlistApiRequest.call(mockThis, method, endpoint, body, qs, option);
expect(mockThis.helpers.requestWithAuthentication).toHaveBeenCalledWith('lemlistApi', {
headers: {},
method: 'GET',
uri: 'https://api.lemlist.com/api/test-endpoint',
qs: { query: 'value' },
body: { key: 'value' },
json: true,
});
});
});
describe('lemlistApiRequestAllItems', () => {
const mockThis = {
helpers: {
requestWithAuthentication: jest
.fn()
.mockResolvedValue([{ id: 'cam_A1B2C3D4E5F6G7H8I9' }, { id: 'cam_A1B2C3D4E5F6G7H8I8' }]),
},
} as unknown as IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions;
it('should return all results', async () => {
const method: IHttpRequestMethods = 'GET';
const endpoint = '/test-endpoint';
const qs: IDataObject = {};
qs.version = 'v2';
const result = await lemlistApiRequestAllItems.call(mockThis, method, endpoint, qs);
expect(result).toEqual([{ id: 'cam_A1B2C3D4E5F6G7H8I9' }, { id: 'cam_A1B2C3D4E5F6G7H8I8' }]);
});
});
describe('getEvents', () => {
it('should return a list of events with capitalized names', () => {
const expectedEvents = [
{ name: '*', value: '*' },
{ name: 'Contacted', value: 'contacted' },
{ name: 'Hooked', value: 'hooked' },
{ name: 'Attracted', value: 'attracted' },
{ name: 'Warmed', value: 'warmed' },
{ name: 'Interested', value: 'interested' },
{ name: 'Skipped', value: 'skipped' },
{ name: 'Not Interested', value: 'notInterested' },
{ name: 'Emails Sent', value: 'emailsSent' },
{ name: 'Emails Opened', value: 'emailsOpened' },
{ name: 'Emails Clicked', value: 'emailsClicked' },
{ name: 'Emails Replied', value: 'emailsReplied' },
{ name: 'Emails Bounced', value: 'emailsBounced' },
{ name: 'Emails Send Failed', value: 'emailsSendFailed' },
{ name: 'Emails Failed', value: 'emailsFailed' },
{ name: 'Emails Unsubscribed', value: 'emailsUnsubscribed' },
{ name: 'Emails Interested', value: 'emailsInterested' },
{ name: 'Emails Not Interested', value: 'emailsNotInterested' },
{ name: 'Opportunities Done', value: 'opportunitiesDone' },
{ name: 'Aircall Created', value: 'aircallCreated' },
{ name: 'Aircall Ended', value: 'aircallEnded' },
{ name: 'Aircall Done', value: 'aircallDone' },
{ name: 'Aircall Interested', value: 'aircallInterested' },
{ name: 'Aircall Not Interested', value: 'aircallNotInterested' },
{ name: 'Api Done', value: 'apiDone' },
{ name: 'Api Interested', value: 'apiInterested' },
{ name: 'Api Not Interested', value: 'apiNotInterested' },
{ name: 'Api Failed', value: 'apiFailed' },
{ name: 'LinkedIn Visit Done', value: 'linkedinVisitDone' },
{ name: 'LinkedIn Visit Failed', value: 'linkedinVisitFailed' },
{ name: 'LinkedIn Invite Done', value: 'linkedinInviteDone' },
{ name: 'LinkedIn Invite Failed', value: 'linkedinInviteFailed' },
{ name: 'LinkedIn Invite Accepted', value: 'linkedinInviteAccepted' },
{ name: 'LinkedIn Replied', value: 'linkedinReplied' },
{ name: 'LinkedIn Sent', value: 'linkedinSent' },
{ name: 'LinkedIn Voice Note Done', value: 'linkedinVoiceNoteDone' },
{ name: 'LinkedIn Voice Note Failed', value: 'linkedinVoiceNoteFailed' },
{ name: 'LinkedIn Interested', value: 'linkedinInterested' },
{ name: 'LinkedIn Not Interested', value: 'linkedinNotInterested' },
{ name: 'LinkedIn Send Failed', value: 'linkedinSendFailed' },
{ name: 'Manual Interested', value: 'manualInterested' },
{ name: 'Manual Not Interested', value: 'manualNotInterested' },
{ name: 'Paused', value: 'paused' },
{ name: 'Resumed', value: 'resumed' },
{ name: 'Custom Domain Errors', value: 'customDomainErrors' },
{ name: 'Connection Issue', value: 'connectionIssue' },
{ name: 'Send Limit Reached', value: 'sendLimitReached' },
{ name: 'Lemwarm Paused', value: 'lemwarmPaused' },
];
const result = getEvents();
expect(result).toEqual(expectedEvents);
});
});
});