n8n-nodes-highlevelv2
Version:
n8n community node for HighLevel v2 API integration - comprehensive CRM, marketing automation, and business management platform
340 lines • 13.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
describe('Redirect Operations', () => {
const mockGetNodeParameter = jest.fn();
const mockGetCredentials = jest.fn();
const mockHighLevelApiRequest = jest.fn();
const mockContext = {
getNodeParameter: mockGetNodeParameter,
getCredentials: mockGetCredentials,
helpers: {
httpRequestWithAuthentication: mockHighLevelApiRequest,
},
};
beforeEach(() => {
mockGetNodeParameter.mockClear();
mockGetCredentials.mockClear();
mockHighLevelApiRequest.mockClear();
});
describe('Create Redirect Operation', () => {
it('should create a redirect successfully', async () => {
const mockRedirectData = {
redirect: {
id: 'redirect-123',
sourceUrl: '/old-page',
targetUrl: '/new-page',
redirectType: '301',
description: 'Redirect to new page',
isActive: true,
locationId: 'loc-456',
createdAt: '2024-01-15T10:00:00Z',
updatedAt: '2024-01-15T10:00:00Z',
createdBy: 'user-789',
clickCount: 0,
lastAccessed: null,
},
success: true,
message: 'Redirect created successfully',
};
mockGetNodeParameter.mockImplementation((param) => {
switch (param) {
case 'resource':
return 'redirect';
case 'operation':
return 'create';
case 'sourceUrl':
return '/old-page';
case 'targetUrl':
return '/new-page';
default:
return undefined;
}
});
mockGetCredentials.mockResolvedValue({
oauthTokenData: { locationId: 'loc-456' }
});
mockHighLevelApiRequest.mockResolvedValue(mockRedirectData);
const requestOptions = {
method: 'POST',
url: '/redirects/',
body: {
locationId: 'loc-456',
sourceUrl: '/old-page',
targetUrl: '/new-page',
redirectType: '301',
description: 'Redirect to new page',
isActive: true,
},
};
const result = await mockHighLevelApiRequest.call(mockContext, requestOptions);
expect(result).toEqual(mockRedirectData);
expect(result.redirect.id).toBe('redirect-123');
expect(result.redirect.sourceUrl).toBe('/old-page');
expect(result.redirect.targetUrl).toBe('/new-page');
expect(result.success).toBe(true);
});
it('should handle create redirect with additional fields', async () => {
const mockRedirectData = {
redirect: {
id: 'redirect-456',
sourceUrl: '/promo-old',
targetUrl: 'https://external-site.com/promo',
redirectType: '302',
description: 'Temporary promotional redirect',
isActive: false,
locationId: 'loc-456',
createdAt: '2024-01-15T11:00:00Z',
updatedAt: '2024-01-15T11:00:00Z',
createdBy: 'user-789',
clickCount: 0,
},
success: true,
message: 'Redirect created successfully',
};
mockHighLevelApiRequest.mockResolvedValue(mockRedirectData);
const requestOptions = {
method: 'POST',
url: '/redirects/',
body: {
locationId: 'loc-456',
sourceUrl: '/promo-old',
targetUrl: 'https://external-site.com/promo',
redirectType: '302',
description: 'Temporary promotional redirect',
isActive: false,
},
};
const result = await mockHighLevelApiRequest.call(mockContext, requestOptions);
expect(result).toEqual(mockRedirectData);
expect(result.redirect.redirectType).toBe('302');
expect(result.redirect.isActive).toBe(false);
});
});
describe('Get All Redirects Operation', () => {
it('should retrieve all redirects successfully', async () => {
const mockRedirectsData = {
redirects: [
{
id: 'redirect-1',
sourceUrl: '/old-1',
targetUrl: '/new-1',
redirectType: '301',
description: 'First redirect',
isActive: true,
locationId: 'loc-456',
createdAt: '2024-01-15T10:00:00Z',
clickCount: 25,
},
{
id: 'redirect-2',
sourceUrl: '/old-2',
targetUrl: '/new-2',
redirectType: '302',
description: 'Second redirect',
isActive: false,
locationId: 'loc-456',
createdAt: '2024-01-16T10:00:00Z',
clickCount: 12,
},
],
meta: {
total: 2,
count: 2,
limit: 20,
offset: 0,
},
};
mockGetNodeParameter.mockImplementation((param) => {
switch (param) {
case 'resource':
return 'redirect';
case 'operation':
return 'getAll';
default:
return undefined;
}
});
mockGetCredentials.mockResolvedValue({
oauthTokenData: { locationId: 'loc-456' }
});
mockHighLevelApiRequest.mockResolvedValue(mockRedirectsData);
const requestOptions = {
method: 'GET',
url: '/redirects/',
qs: {
locationId: 'loc-456',
limit: 20,
offset: 0,
},
};
const result = await mockHighLevelApiRequest.call(mockContext, requestOptions);
expect(result).toEqual(mockRedirectsData);
expect(result.redirects).toHaveLength(2);
expect(result.meta.total).toBe(2);
});
it('should handle filtering by status', async () => {
const mockFilteredRedirectsData = {
redirects: [
{
id: 'redirect-1',
sourceUrl: '/active-redirect',
targetUrl: '/active-target',
redirectType: '301',
isActive: true,
locationId: 'loc-456',
clickCount: 50,
},
],
meta: {
total: 1,
count: 1,
limit: 20,
offset: 0,
},
};
mockHighLevelApiRequest.mockResolvedValue(mockFilteredRedirectsData);
const requestOptions = {
method: 'GET',
url: '/redirects/',
qs: {
locationId: 'loc-456',
status: 'active',
limit: 20,
offset: 0,
},
};
const result = await mockHighLevelApiRequest.call(mockContext, requestOptions);
expect(result).toEqual(mockFilteredRedirectsData);
expect(result.redirects[0].isActive).toBe(true);
});
});
describe('Update Redirect Operation', () => {
it('should update a redirect successfully', async () => {
const mockUpdatedRedirectData = {
redirect: {
id: 'redirect-123',
sourceUrl: '/old-page-updated',
targetUrl: '/new-page-updated',
redirectType: '302',
description: 'Updated redirect description',
isActive: false,
locationId: 'loc-456',
createdAt: '2024-01-15T10:00:00Z',
updatedAt: '2024-01-17T12:00:00Z',
createdBy: 'user-789',
clickCount: 100,
},
success: true,
message: 'Redirect updated successfully',
};
mockGetNodeParameter.mockImplementation((param) => {
switch (param) {
case 'resource':
return 'redirect';
case 'operation':
return 'update';
case 'redirectId':
return 'redirect-123';
default:
return undefined;
}
});
mockHighLevelApiRequest.mockResolvedValue(mockUpdatedRedirectData);
const requestOptions = {
method: 'PUT',
url: '/redirects/redirect-123',
body: {
locationId: 'loc-456',
sourceUrl: '/old-page-updated',
targetUrl: '/new-page-updated',
redirectType: '302',
description: 'Updated redirect description',
isActive: false,
},
};
const result = await mockHighLevelApiRequest.call(mockContext, requestOptions);
expect(result).toEqual(mockUpdatedRedirectData);
expect(result.redirect.redirectType).toBe('302');
expect(result.redirect.isActive).toBe(false);
expect(result.success).toBe(true);
});
});
describe('Delete Redirect Operation', () => {
it('should delete a redirect successfully', async () => {
const mockDeleteData = {
success: true,
message: 'Redirect deleted successfully',
deletedRedirect: {
id: 'redirect-123',
sourceUrl: '/old-page',
targetUrl: '/new-page',
locationId: 'loc-456',
deletedAt: '2024-01-17T15:00:00Z',
},
};
mockGetNodeParameter.mockImplementation((param) => {
switch (param) {
case 'resource':
return 'redirect';
case 'operation':
return 'delete';
case 'redirectId':
return 'redirect-123';
default:
return undefined;
}
});
mockHighLevelApiRequest.mockResolvedValue(mockDeleteData);
const requestOptions = {
method: 'DELETE',
url: '/redirects/redirect-123',
};
const result = await mockHighLevelApiRequest.call(mockContext, requestOptions);
expect(result).toEqual(mockDeleteData);
expect(result.success).toBe(true);
expect(result.deletedRedirect.id).toBe('redirect-123');
});
});
describe('Error Handling', () => {
it('should handle API errors gracefully', async () => {
const mockError = new Error('API Error: Redirect not found');
mockHighLevelApiRequest.mockRejectedValue(mockError);
const requestOptions = {
method: 'GET',
url: '/redirects/',
qs: {
locationId: 'invalid-loc',
},
};
await expect(mockHighLevelApiRequest.call(mockContext, requestOptions)).rejects.toThrow('API Error: Redirect not found');
});
it('should handle missing required parameters for create', async () => {
mockGetNodeParameter.mockImplementation((param) => {
switch (param) {
case 'sourceUrl':
return '';
case 'targetUrl':
return '';
default:
return undefined;
}
});
const hasRequiredParams = mockGetNodeParameter('sourceUrl') &&
mockGetNodeParameter('targetUrl');
expect(hasRequiredParams).toBe(false);
});
it('should handle missing redirect ID for update/delete operations', async () => {
mockGetNodeParameter.mockImplementation((param) => {
switch (param) {
case 'redirectId':
return '';
default:
return undefined;
}
});
const hasRequiredParams = mockGetNodeParameter('redirectId');
expect(hasRequiredParams).toBe(false);
});
});
});
//# sourceMappingURL=RedirectOperations.test.js.map