n8n-nodes-innotes 1.0.19 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/descriptions/AutomationDescription.js +7 -1
- package/dist/descriptions/AutomationDescription.js.map +1 -1
- package/dist/descriptions/JobDescription.js +21 -0
- package/dist/descriptions/JobDescription.js.map +1 -1
- package/dist/nodes/InNotes/InNotes.node.js +72 -17
- package/dist/nodes/InNotes/InNotes.node.js.map +1 -1
- package/dist/package.json +7 -8
- package/dist/test/InNotes.node.test.js +1425 -100
- package/dist/test/InNotes.node.test.js.map +1 -1
- package/dist/test/setup.js +4 -2
- package/dist/test/setup.js.map +1 -1
- package/package.json +7 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../test/InNotes.node.test.ts"],"names":[],"mappings":"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","file":"InNotes.node.test.js","sourcesContent":["/**\n * Author: marco\n * Last updated: 2025-05-30\n */\n\nimport { InNotes } from '../nodes/InNotes/InNotes.node';\nimport { IExecuteFunctions, INodeExecutionData } from 'n8n-workflow';\n\ndescribe('InNotes Node', () => {\n\tlet node: InNotes;\n\tlet mockExecuteFunctions: Partial<IExecuteFunctions>;\n\n\tbeforeEach(() => {\n\t\tnode = new InNotes();\n\t\tmockExecuteFunctions = {\n\t\t\tgetInputData: jest.fn().mockReturnValue([{ json: {} }] as INodeExecutionData[]),\n\t\t\tgetNodeParameter: jest.fn(),\n\t\t\tgetCredentials: jest.fn().mockResolvedValue({\n\t\t\t\tusername: 'test@example.com',\n\t\t\t\tpassword: 'testpassword',\n\t\t\t\tbaseUrl: 'https://test.innotes.com',\n\t\t\t}),\n\t\t\thelpers: {\n\t\t\t\thttpRequestWithAuthentication: jest.fn(),\n\t\t\t\thttpRequest: jest.fn(),\n\t\t\t\trequestWithAuthenticationPaginated: jest.fn(),\n\t\t\t\trequest: jest.fn(),\n\t\t\t\trequestWithAuthentication: jest.fn(),\n\t\t\t\trequestOAuth2: jest.fn(),\n\t\t\t\trequestOAuth1: jest.fn(),\n\t\t\t},\n\t\t} as any;\n\t});\n\n\tdescribe('Node Properties', () => {\n\t\tit('should have correct description', () => {\n\t\t\texpect(node.description.displayName).toBe('InNotes');\n\t\t\texpect(node.description.name).toBe('inNotes');\n\t\t\texpect(node.description.group).toEqual(['transform']);\n\t\t\texpect(node.description.version).toBe(1);\n\t\t});\n\n\t\tit('should have correct credentials', () => {\n\t\t\texpect(node.description.credentials).toEqual([\n\t\t\t\t{\n\t\t\t\t\tname: 'inNotesApi',\n\t\t\t\t\trequired: true,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit('should have correct inputs and outputs', () => {\n\t\t\texpect(node.description.inputs).toEqual(['main']);\n\t\t\texpect(node.description.outputs).toEqual(['main']);\n\t\t});\n\t});\n\n\tdescribe('Resource Operations', () => {\n\t\tit('should have contact resource with correct operations', () => {\n\t\t\tconst contactResource = node.description.properties?.find(\n\t\t\t\tprop => prop.name === 'resource' && prop.type === 'options',\n\t\t\t);\n\n\t\t\texpect(contactResource).toBeDefined();\n\t\t\tconst contactOption = (contactResource as any)?.options?.find(\n\t\t\t\t(option: any) => option.value === 'contact',\n\t\t\t);\n\t\t\texpect(contactOption).toBeDefined();\n\t\t\texpect(contactOption.name).toBe('Contact');\n\t\t});\n\n\t\tit('should have note resource with correct operations', () => {\n\t\t\tconst noteResource = node.description.properties?.find(\n\t\t\t\tprop => prop.name === 'resource' && prop.type === 'options',\n\t\t\t);\n\n\t\t\texpect(noteResource).toBeDefined();\n\t\t\tconst noteOption = (noteResource as any)?.options?.find(\n\t\t\t\t(option: any) => option.value === 'note',\n\t\t\t);\n\t\t\texpect(noteOption).toBeDefined();\n\t\t\texpect(noteOption.name).toBe('Note');\n\t\t});\n\t});\n\n\tdescribe('Execute Method', () => {\n\t\tit('should handle contact get operation', async () => {\n\t\t\tconst mockHttpRequest = jest.fn().mockResolvedValue({\n\t\t\t\tdata: {\n\t\t\t\t\tid: 1,\n\t\t\t\t\tname: 'Test Contact',\n\t\t\t\t\temail: 'test@example.com',\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tmockExecuteFunctions.helpers!.httpRequestWithAuthentication = mockHttpRequest;\n\t\t\tmockExecuteFunctions.getNodeParameter = jest.fn()\n\t\t\t\t.mockReturnValueOnce('contact') // resource\n\t\t\t\t.mockReturnValueOnce('get') // operation\n\t\t\t\t.mockReturnValueOnce(1); // contactId\n\n\t\t\tconst result = await node.execute.call(mockExecuteFunctions as IExecuteFunctions);\n\n\t\t\texpect(mockHttpRequest).toHaveBeenCalledWith(\n\t\t\t\t'inNotesApi',\n\t\t\t\texpect.objectContaining({\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\turl: '/api/contacts/1',\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\texpect(result).toEqual([\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tjson: {\n\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\tname: 'Test Contact',\n\t\t\t\t\t\t\temail: 'test@example.com',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]);\n\t\t});\n\n\t\tit('should handle note create operation', async () => {\n\t\t\tconst mockHttpRequest = jest.fn().mockResolvedValue({\n\t\t\t\tdata: {\n\t\t\t\t\tid: 1,\n\t\t\t\t\tcontent: 'Test note content',\n\t\t\t\t\tcontactId: 1,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tmockExecuteFunctions.helpers!.httpRequestWithAuthentication = mockHttpRequest;\n\t\t\tmockExecuteFunctions.getNodeParameter = jest.fn()\n\t\t\t\t.mockReturnValueOnce('note') // resource\n\t\t\t\t.mockReturnValueOnce('create') // operation\n\t\t\t\t.mockReturnValueOnce('Test note content') // content\n\t\t\t\t.mockReturnValueOnce(1); // contactId\n\n\t\t\tconst result = await node.execute.call(mockExecuteFunctions as IExecuteFunctions);\n\n\t\t\texpect(mockHttpRequest).toHaveBeenCalledWith(\n\t\t\t\t'inNotesApi',\n\t\t\t\texpect.objectContaining({\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\turl: '/api/note',\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tcontent: 'Test note content',\n\t\t\t\t\t\tcontactId: 1,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\texpect(result).toEqual([\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tjson: {\n\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\tcontent: 'Test note content',\n\t\t\t\t\t\t\tcontactId: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]);\n\t\t});\n\n\t\tit('should throw error for unsupported resource', async () => {\n\t\t\tmockExecuteFunctions.getNodeParameter = jest.fn()\n\t\t\t\t.mockReturnValueOnce('unsupported'); // resource\n\n\t\t\tawait expect(\n\t\t\t\tnode.execute.call(mockExecuteFunctions as IExecuteFunctions),\n\t\t\t).rejects.toThrow('The resource \"unsupported\" is not known!');\n\t\t});\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../test/InNotes.node.test.ts"],"names":[],"mappings":"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","file":"InNotes.node.test.js","sourcesContent":["/**\n * Author: marco\n * Last updated: 2025-02-14\n * Comprehensive test coverage for InNotes n8n node\n */\n\nimport { InNotes } from '../nodes/InNotes/InNotes.node';\nimport { IExecuteFunctions, INodeExecutionData, IDataObject, ILoadOptionsFunctions } from 'n8n-workflow';\n\n// ============================================================================\n// Test Helpers\n// ============================================================================\n\n/**\n * Creates a mock IExecuteFunctions object with customizable parameters\n */\nfunction createMockExecuteFunctions(\n\tparams: Record<string, unknown> = {},\n\tcredentials: Record<string, unknown> = {},\n): IExecuteFunctions {\n\tconst defaultCredentials = {\n\t\tbaseUrl: 'https://test.innotes.com',\n\t\tauthMethod: 'token',\n\t\ttoken: 'test-token',\n\t\tcallbackSecret: 'test-callback-secret',\n\t\t...credentials,\n\t};\n\n\treturn {\n\t\tgetInputData: jest.fn().mockReturnValue([{ json: {} }] as INodeExecutionData[]),\n\t\tgetNodeParameter: jest.fn().mockImplementation(\n\t\t\t(param: string, _index: number, defaultValue?: unknown) => {\n\t\t\t\treturn params[param] ?? defaultValue;\n\t\t\t},\n\t\t),\n\t\tgetCredentials: jest.fn().mockResolvedValue(defaultCredentials),\n\t\tcontinueOnFail: jest.fn().mockReturnValue(false),\n\t\tgetNode: jest.fn().mockReturnValue({ name: 'InNotes' }),\n\t\thelpers: {\n\t\t\thttpRequestWithAuthentication: jest.fn(),\n\t\t\thttpRequest: jest.fn(),\n\t\t\trequestWithAuthenticationPaginated: jest.fn(),\n\t\t\trequest: jest.fn(),\n\t\t\trequestWithAuthentication: jest.fn(),\n\t\t\trequestOAuth2: jest.fn(),\n\t\t\trequestOAuth1: jest.fn(),\n\t\t\treturnJsonArray: jest.fn((data: IDataObject[]) =>\n\t\t\t\tdata.map((item) => ({ json: item })),\n\t\t\t),\n\t\t},\n\t} as unknown as IExecuteFunctions;\n}\n\n/**\n * Creates a mock ILoadOptionsFunctions object\n */\nfunction createMockLoadOptionsFunctions(\n\tcredentials: Record<string, unknown> = {},\n): ILoadOptionsFunctions {\n\tconst defaultCredentials = {\n\t\tbaseUrl: 'https://test.innotes.com',\n\t\tauthMethod: 'token',\n\t\ttoken: 'test-token',\n\t};\n\n\treturn {\n\t\tgetCredentials: jest.fn().mockResolvedValue({ ...defaultCredentials, ...credentials }),\n\t\tgetNode: jest.fn().mockReturnValue({ name: 'InNotes' }),\n\t\thelpers: {\n\t\t\thttpRequestWithAuthentication: jest.fn(),\n\t\t},\n\t} as unknown as ILoadOptionsFunctions;\n}\n\n// ============================================================================\n// Tests\n// ============================================================================\n\ndescribe('InNotes Node', () => {\n\tlet node: InNotes;\n\n\tbeforeEach(() => {\n\t\tnode = new InNotes();\n\t\tjest.clearAllMocks();\n\t});\n\n\t// ========================================================================\n\t// Node Properties Tests\n\t// ========================================================================\n\tdescribe('Node Properties', () => {\n\t\tit('should have correct description', () => {\n\t\t\texpect(node.description.displayName).toBe('InNotes');\n\t\t\texpect(node.description.name).toBe('inNotes');\n\t\t\texpect(node.description.group).toEqual(['output']);\n\t\t\texpect(node.description.version).toBe(1);\n\t\t});\n\n\t\tit('should have correct credentials', () => {\n\t\t\texpect(node.description.credentials).toEqual([\n\t\t\t\t{\n\t\t\t\t\tname: 'inNotesApi',\n\t\t\t\t\trequired: true,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit('should have correct inputs and outputs', () => {\n\t\t\texpect(node.description.inputs).toBeDefined();\n\t\t\texpect(node.description.outputs).toBeDefined();\n\t\t});\n\n\t\tit('should have all expected resources', () => {\n\t\t\tconst resourceProperty = node.description.properties?.find(\n\t\t\t\t(prop) => prop.name === 'resource' && prop.type === 'options',\n\t\t\t);\n\n\t\t\texpect(resourceProperty).toBeDefined();\n\t\t\tconst options = (resourceProperty as any)?.options;\n\t\t\tconst resourceNames = options?.map((o: any) => o.value);\n\n\t\t\texpect(resourceNames).toContain('automation');\n\t\t\texpect(resourceNames).toContain('contact');\n\t\t\texpect(resourceNames).toContain('note');\n\t\t\texpect(resourceNames).toContain('job');\n\t\t\texpect(resourceNames).toContain('status');\n\t\t\texpect(resourceNames).toContain('tag');\n\t\t\texpect(resourceNames).toContain('user');\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// Load Options Tests\n\t// ========================================================================\n\tdescribe('Load Options', () => {\n\t\tdescribe('jobStatuses', () => {\n\t\t\tit('should load job statuses from API', async () => {\n\t\t\t\tconst mockLoadOptions = createMockLoadOptionsFunctions();\n\t\t\t\tconst mockStatuses = [\n\t\t\t\t\t{ id: 1, name: 'Applied' },\n\t\t\t\t\t{ id: 2, name: 'Interviewing' },\n\t\t\t\t\t{ id: 3, name: 'Offer' },\n\t\t\t\t];\n\n\t\t\t\t(mockLoadOptions.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockStatuses);\n\n\t\t\t\tconst result = await node.methods.loadOptions.jobStatuses.call(mockLoadOptions);\n\n\t\t\t\texpect(result).toEqual([\n\t\t\t\t\t{ name: 'Applied', value: 'Applied' },\n\t\t\t\t\t{ name: 'Interviewing', value: 'Interviewing' },\n\t\t\t\t\t{ name: 'Offer', value: 'Offer' },\n\t\t\t\t]);\n\t\t\t});\n\n\t\t\tit('should handle single status response', async () => {\n\t\t\t\tconst mockLoadOptions = createMockLoadOptionsFunctions();\n\t\t\t\tconst mockStatus = { id: 1, name: 'Applied' };\n\n\t\t\t\t(mockLoadOptions.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockStatus);\n\n\t\t\t\tconst result = await node.methods.loadOptions.jobStatuses.call(mockLoadOptions);\n\n\t\t\t\texpect(result).toEqual([{ name: 'Applied', value: 'Applied' }]);\n\t\t\t});\n\n\t\t\tit('should throw error on API failure', async () => {\n\t\t\t\tconst mockLoadOptions = createMockLoadOptionsFunctions();\n\n\t\t\t\t(mockLoadOptions.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(\n\t\t\t\t\tnew Error('API Error'),\n\t\t\t\t);\n\n\t\t\t\tawait expect(node.methods.loadOptions.jobStatuses.call(mockLoadOptions)).rejects.toThrow();\n\t\t\t});\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// Contact Operations Tests\n\t// ========================================================================\n\tdescribe('Contact Operations', () => {\n\t\tdescribe('create', () => {\n\t\t\tit('should create contact with required fields', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'contact',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'John Doe',\n\t\t\t\t\tlinkedin_key: 'johndoe123',\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: '1', name: 'John Doe' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/contacts',\n\t\t\t\t\t\tbody: expect.objectContaining({\n\t\t\t\t\t\t\tname: 'John Doe',\n\t\t\t\t\t\t\tlinkedin_key: 'johndoe123',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\texpect(result[0]).toBeDefined();\n\t\t\t});\n\n\t\t\tit('should include optional fields when provided', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'contact',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'John Doe',\n\t\t\t\t\tlinkedin_key: 'johndoe123',\n\t\t\t\t\tlinkedin_user: 'john.doe',\n\t\t\t\t\tlocation: 'New York',\n\t\t\t\t\tcurrent_company: 'Acme Inc',\n\t\t\t\t\tpicture_url: 'https://example.com/photo.jpg',\n\t\t\t\t\ttags: 'vip,prospect',\n\t\t\t\t\tstatus_id: '1',\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: '1', name: 'John Doe' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tbody: expect.objectContaining({\n\t\t\t\t\t\t\tname: 'John Doe',\n\t\t\t\t\t\t\tlinkedin_key: 'johndoe123',\n\t\t\t\t\t\t\tlinkedin_user: 'john.doe',\n\t\t\t\t\t\t\tlocation: 'New York',\n\t\t\t\t\t\t\tcurrent_company: 'Acme Inc',\n\t\t\t\t\t\t\tpicture_url: 'https://example.com/photo.jpg',\n\t\t\t\t\t\t\ttags: ['vip', 'prospect'],\n\t\t\t\t\t\t\tstatus_id: '1',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('get', () => {\n\t\t\tit('should get contact by ID', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'contact',\n\t\t\t\t\toperation: 'get',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tcontactId: '123',\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: '123', name: 'Test Contact' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/contacts/123',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\texpect(result[0]).toBeDefined();\n\t\t\t});\n\t\t});\n\n\t\tdescribe('getAll', () => {\n\t\t\tit('should get all contacts with pagination', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'contact',\n\t\t\t\t\toperation: 'getAll',\n\t\t\t\t\toptions: {},\n\t\t\t\t\treturnAll: false,\n\t\t\t\t\tlimit: 10,\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = [{ id: '1' }, { id: '2' }];\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/contacts',\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tpageSize: 10,\n\t\t\t\t\t\t\tpage: 1,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\texpect(result[0]).toBeDefined();\n\t\t\t});\n\n\t\t\tit('should apply search and tag filters', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'contact',\n\t\t\t\t\toperation: 'getAll',\n\t\t\t\t\toptions: {},\n\t\t\t\t\treturnAll: false,\n\t\t\t\t\tlimit: 24,\n\t\t\t\t\tsearch: 'john',\n\t\t\t\t\ttags: 'vip',\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = [{ id: '1' }];\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tsearch: 'john',\n\t\t\t\t\t\t\ttags: 'vip',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('update', () => {\n\t\t\tit('should update contact fields', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'contact',\n\t\t\t\t\toperation: 'update',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tcontactId: '123',\n\t\t\t\t\tupdateFields: {\n\t\t\t\t\t\tname: 'Updated Name',\n\t\t\t\t\t\tlocation: 'Boston',\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: '123', name: 'Updated Name' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/contacts/123',\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tname: 'Updated Name',\n\t\t\t\t\t\t\tlocation: 'Boston',\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('delete', () => {\n\t\t\tit('should delete contact and return success', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'contact',\n\t\t\t\t\toperation: 'delete',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tcontactId: '123',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({});\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/contacts/123',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\texpect(result[0][0].json).toEqual({ success: true });\n\t\t\t});\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// Note Operations Tests\n\t// ========================================================================\n\tdescribe('Note Operations', () => {\n\t\tdescribe('create', () => {\n\t\t\tit('should create note with required fields', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'note',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tcontent: 'Test note content',\n\t\t\t\t\tcontactId: '123',\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: '1', text: 'Test note content' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/note',\n\t\t\t\t\t\tbody: expect.objectContaining({\n\t\t\t\t\t\t\tcontent: 'Test note content',\n\t\t\t\t\t\t\tcontact_id: '123',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\texpect(result[0]).toBeDefined();\n\t\t\t});\n\n\t\t\tit('should include visibility and ext_table_name when provided', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'note',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tcontent: 'Test note',\n\t\t\t\t\tcontactId: '123',\n\t\t\t\t\tvisibility: 'public',\n\t\t\t\t\text_table_name: 'jobs',\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: '1' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tbody: expect.objectContaining({\n\t\t\t\t\t\t\tvisibility: 'public',\n\t\t\t\t\t\t\text_table_name: 'jobs',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('get', () => {\n\t\t\tit('should get note by ID', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'note',\n\t\t\t\t\toperation: 'get',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tnoteId: '456',\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: '456', text: 'Test note' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/note/456',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('getAll', () => {\n\t\t\tit('should get all notes for a contact', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'note',\n\t\t\t\t\toperation: 'getAll',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tcontactId: '123',\n\t\t\t\t\treturnAll: false,\n\t\t\t\t\tlimit: 10,\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = [{ id: '1' }, { id: '2' }];\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/note',\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tcontact_id: '123',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('update', () => {\n\t\t\tit('should update note', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'note',\n\t\t\t\t\toperation: 'update',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tnoteId: '456',\n\t\t\t\t\tupdateFields: { text: 'Updated content' },\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: '456' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/note/456',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('delete', () => {\n\t\t\tit('should delete note', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'note',\n\t\t\t\t\toperation: 'delete',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tnoteId: '456',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({});\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/note/456',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\texpect(result[0][0].json).toEqual({ success: true });\n\t\t\t});\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// Job Operations Tests (HIGH PRIORITY - Bug Fix Verification)\n\t// ========================================================================\n\tdescribe('Job Operations', () => {\n\t\tdescribe('create', () => {\n\t\t\tit('should create job with status lookup and send status_id as integer', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'Software Engineer',\n\t\t\t\t\tcompany_name: 'Tech Corp',\n\t\t\t\t\tstatus: 'Interested',\n\t\t\t\t});\n\n\t\t\t\t// First call returns statuses, second creates job\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock)\n\t\t\t\t\t.mockResolvedValueOnce([\n\t\t\t\t\t\t{ id: 100, name: 'Applied' },\n\t\t\t\t\t\t{ id: 200, name: 'Interested' },\n\t\t\t\t\t\t{ id: 300, name: 'Rejected' },\n\t\t\t\t\t])\n\t\t\t\t\t.mockResolvedValueOnce({ id: '1' });\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\t// Verify the job creation call\n\t\t\t\tconst calls = (mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mock.calls;\n\t\t\t\tconst createJobCall = calls.find((call) => call[1].method === 'POST' && call[1].url.includes('/api/job'));\n\n\t\t\t\texpect(createJobCall).toBeDefined();\n\t\t\t\texpect(createJobCall[1].body.status_id).toBe(200); // Should be integer, not string\n\t\t\t\texpect(typeof createJobCall[1].body.status_id).toBe('number');\n\t\t\t});\n\n\t\t\tit('should NOT include status field in request body', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'Software Engineer',\n\t\t\t\t\tcompany_name: 'Tech Corp',\n\t\t\t\t\tstatus: 'Interested',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock)\n\t\t\t\t\t.mockResolvedValueOnce([{ id: 200, name: 'Interested' }])\n\t\t\t\t\t.mockResolvedValueOnce({ id: '1' });\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\tconst calls = (mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mock.calls;\n\t\t\t\tconst createJobCall = calls.find((call) => call[1].method === 'POST' && call[1].url.includes('/api/job'));\n\n\t\t\t\texpect(createJobCall[1].body).not.toHaveProperty('status');\n\t\t\t});\n\n\t\t\tit('should exclude picture_url when value is \"Not Available\"', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'Software Engineer',\n\t\t\t\t\tcompany_name: 'Tech Corp',\n\t\t\t\t\tpicture_url: 'Not Available',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({ id: '1' });\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\tconst calls = (mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mock.calls;\n\t\t\t\tconst createJobCall = calls.find((call) => call[1].method === 'POST');\n\n\t\t\t\texpect(createJobCall[1].body).not.toHaveProperty('picture_url');\n\t\t\t});\n\n\t\t\tit('should include picture_url when value is valid URL', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'Software Engineer',\n\t\t\t\t\tcompany_name: 'Tech Corp',\n\t\t\t\t\tpicture_url: 'https://example.com/logo.png',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({ id: '1' });\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\tconst calls = (mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mock.calls;\n\t\t\t\tconst createJobCall = calls.find((call) => call[1].method === 'POST');\n\n\t\t\t\texpect(createJobCall[1].body.picture_url).toBe('https://example.com/logo.png');\n\t\t\t});\n\n\t\t\tit('should handle tags as comma-separated string converted to array', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'Software Engineer',\n\t\t\t\t\tcompany_name: 'Tech Corp',\n\t\t\t\t\ttags: 'remote, senior, python',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({ id: '1' });\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\tconst calls = (mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mock.calls;\n\t\t\t\tconst createJobCall = calls.find((call) => call[1].method === 'POST');\n\n\t\t\t\texpect(createJobCall[1].body.tags).toEqual(['remote', 'senior', 'python']);\n\t\t\t});\n\n\t\t\tit('should throw error when status name not found', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'Software Engineer',\n\t\t\t\t\tcompany_name: 'Tech Corp',\n\t\t\t\t\tstatus: 'NonExistentStatus',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue([\n\t\t\t\t\t{ id: 1, name: 'Applied' },\n\t\t\t\t\t{ id: 2, name: 'Rejected' },\n\t\t\t\t]);\n\n\t\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/NonExistentStatus.*not found/);\n\t\t\t});\n\n\t\t\tit('should include all optional fields when provided', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'Software Engineer',\n\t\t\t\t\tcompany_name: 'Tech Corp',\n\t\t\t\t\tdescription: 'Great opportunity',\n\t\t\t\t\tlocation: 'Remote',\n\t\t\t\t\tremote_setting: 'Remote',\n\t\t\t\t\tcompany_url: 'https://techcorp.com',\n\t\t\t\t\tprovider: 'linkedin',\n\t\t\t\t\turl: 'https://linkedin.com/jobs/123',\n\t\t\t\t\text_id: 'LI-123',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({ id: '1' });\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\tconst calls = (mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mock.calls;\n\t\t\t\tconst createJobCall = calls.find((call) => call[1].method === 'POST');\n\n\t\t\t\texpect(createJobCall[1].body).toEqual(expect.objectContaining({\n\t\t\t\t\tname: 'Software Engineer',\n\t\t\t\t\tcompany_name: 'Tech Corp',\n\t\t\t\t\tdescription: 'Great opportunity',\n\t\t\t\t\tlocation: 'Remote',\n\t\t\t\t\tremote_setting: 'Remote',\n\t\t\t\t\tcompany_url: 'https://techcorp.com',\n\t\t\t\t\tprovider: 'linkedin',\n\t\t\t\t\turl: 'https://linkedin.com/jobs/123',\n\t\t\t\t\text_id: 'LI-123',\n\t\t\t\t}));\n\t\t\t});\n\t\t});\n\n\t\tdescribe('get', () => {\n\t\t\tit('should get job by ID', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'get',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tjobId: '123',\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: '123', name: 'Test Job' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/job/123',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit('should handle job not found error', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'get',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tjobId: '999',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(\n\t\t\t\t\tnew Error('Job not found'),\n\t\t\t\t);\n\n\t\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow();\n\t\t\t});\n\t\t});\n\n\t\tdescribe('getAll', () => {\n\t\t\tit('should get all jobs with pagination', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'getAll',\n\t\t\t\t\toptions: {},\n\t\t\t\t\treturnAll: false,\n\t\t\t\t\tlimit: 10,\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = [{ id: '1' }, { id: '2' }];\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/job',\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tpageSize: 10,\n\t\t\t\t\t\t\tpage: 1,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit('should apply search filters', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'getAll',\n\t\t\t\t\toptions: {},\n\t\t\t\t\treturnAll: false,\n\t\t\t\t\tlimit: 24,\n\t\t\t\t\tsearch: 'engineer',\n\t\t\t\t\ttags: 'remote',\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = [{ id: '1' }];\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tsearch: 'engineer',\n\t\t\t\t\t\t\ttags: 'remote',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('update', () => {\n\t\t\tit('should update job with status lookup as integer', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'update',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tjobId: '123',\n\t\t\t\t\tupdateFields: {\n\t\t\t\t\t\tstatus: 'Interviewing',\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock)\n\t\t\t\t\t.mockResolvedValueOnce([\n\t\t\t\t\t\t{ id: 100, name: 'Applied' },\n\t\t\t\t\t\t{ id: 200, name: 'Interviewing' },\n\t\t\t\t\t])\n\t\t\t\t\t.mockResolvedValueOnce({ id: '123' });\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\tconst calls = (mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mock.calls;\n\t\t\t\tconst updateCall = calls.find((call) => call[1].method === 'PUT');\n\n\t\t\t\texpect(updateCall[1].body.status_id).toBe(200);\n\t\t\t\texpect(typeof updateCall[1].body.status_id).toBe('number');\n\t\t\t\texpect(updateCall[1].body).not.toHaveProperty('status');\n\t\t\t});\n\n\t\t\tit('should convert tags string to array', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'update',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tjobId: '123',\n\t\t\t\t\tupdateFields: {\n\t\t\t\t\t\ttags: 'urgent, high-priority',\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({ id: '123' });\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\tconst calls = (mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mock.calls;\n\t\t\t\tconst updateCall = calls.find((call) => call[1].method === 'PUT');\n\n\t\t\t\texpect(updateCall[1].body.tags).toEqual(['urgent', 'high-priority']);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('delete', () => {\n\t\t\tit('should delete job and return success', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'delete',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tjobId: '123',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({});\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/job/123',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\texpect(result[0][0].json).toEqual({ success: true });\n\t\t\t});\n\t\t});\n\n\t\tdescribe('search', () => {\n\t\t\tit('should search by general term', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'search',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tsearchMethod: 'general',\n\t\t\t\t\tsearchQuery: 'software engineer',\n\t\t\t\t\tsearchOptions: {},\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = [{ id: '1', name: 'Software Engineer' }];\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tsearchTerm: 'software engineer',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit('should search by ext_id', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'search',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tsearchMethod: 'ext_id',\n\t\t\t\t\tsearchQuery: 'LI-123456',\n\t\t\t\t\tsearchOptions: {},\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = [{ id: '1', ext_id: 'LI-123456' }];\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\text_id: 'LI-123456',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit('should search by specific field (title)', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'search',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tsearchMethod: 'title',\n\t\t\t\t\tsearchQuery: 'manager',\n\t\t\t\t\tsearchOptions: {},\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = [{ id: '1' }];\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tsearchTerm: 'manager',\n\t\t\t\t\t\t\tsearchField: 'title',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit('should apply additional filters', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'search',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tsearchMethod: 'general',\n\t\t\t\t\tsearchQuery: 'developer',\n\t\t\t\t\tsearchOptions: {\n\t\t\t\t\t\tremote_setting: 'remote',\n\t\t\t\t\t\tstatus: 'Applied',\n\t\t\t\t\t\tlimit: 50,\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse: any[] = [];\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tremote_setting: 'remote',\n\t\t\t\t\t\t\tstatus: 'Applied',\n\t\t\t\t\t\t\tpageSize: 50,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('exists', () => {\n\t\t\tit('should return exists:true when found by job_id', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'exists',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tid: '123',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({ id: '123' });\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(result[0][0].json).toEqual({\n\t\t\t\t\texists: true,\n\t\t\t\t\tfound_by: 'job_id',\n\t\t\t\t\tid: '123',\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit('should return exists:true when found by ext_id', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'exists',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tid: 'LI-123',\n\t\t\t\t});\n\n\t\t\t\t// First call (get by ID) fails, second call (search by ext_id) succeeds\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock)\n\t\t\t\t\t.mockRejectedValueOnce(new Error('Not found'))\n\t\t\t\t\t.mockResolvedValueOnce([{ id: '456', ext_id: 'LI-123' }]);\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(result[0][0].json).toEqual({\n\t\t\t\t\texists: true,\n\t\t\t\t\tfound_by: 'ext_id',\n\t\t\t\t\tid: 'LI-123',\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit('should return exists:false when not found', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'exists',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tid: 'nonexistent',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock)\n\t\t\t\t\t.mockRejectedValueOnce(new Error('Not found'))\n\t\t\t\t\t.mockResolvedValueOnce([]);\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(result[0][0].json).toEqual({\n\t\t\t\t\texists: false,\n\t\t\t\t\tid: 'nonexistent',\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// Status Operations Tests\n\t// ========================================================================\n\tdescribe('Status Operations', () => {\n\t\tdescribe('getAll', () => {\n\t\t\tit('should get all statuses by type', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'status',\n\t\t\t\t\toperation: 'getAll',\n\t\t\t\t\toptions: {},\n\t\t\t\t\ttype: 'job',\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = [\n\t\t\t\t\t{ id: 1, name: 'Applied' },\n\t\t\t\t\t{ id: 2, name: 'Interviewing' },\n\t\t\t\t];\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/statuses',\n\t\t\t\t\t\tqs: { type: 'job' },\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('create', () => {\n\t\t\tit('should create new status', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'status',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'New Status',\n\t\t\t\t\ttype: 'job',\n\t\t\t\t\tcolor: '#ff0000',\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: 10, name: 'New Status' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/statuses',\n\t\t\t\t\t\tbody: expect.objectContaining({\n\t\t\t\t\t\t\tname: 'New Status',\n\t\t\t\t\t\t\ttype: 'job',\n\t\t\t\t\t\t\tcolor: '#ff0000',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('update', () => {\n\t\t\tit('should update status', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'status',\n\t\t\t\t\toperation: 'update',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tstatusId: '5',\n\t\t\t\t\tupdateFields: { name: 'Updated Status' },\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: 5, name: 'Updated Status' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/statuses/5',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('delete', () => {\n\t\t\tit('should delete status', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'status',\n\t\t\t\t\toperation: 'delete',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tstatusId: '5',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({});\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/statuses/5',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\texpect(result[0][0].json).toEqual({ success: true });\n\t\t\t});\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// Tag Operations Tests\n\t// ========================================================================\n\tdescribe('Tag Operations', () => {\n\t\tdescribe('getAll', () => {\n\t\t\tit('should get all tags', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'tag',\n\t\t\t\t\toperation: 'getAll',\n\t\t\t\t\toptions: {},\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = [\n\t\t\t\t\t{ value: 'urgent' },\n\t\t\t\t\t{ value: 'follow-up' },\n\t\t\t\t];\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/tags',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// User Operations Tests\n\t// ========================================================================\n\tdescribe('User Operations', () => {\n\t\tdescribe('get', () => {\n\t\t\tit('should get current user', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'user',\n\t\t\t\t\toperation: 'get',\n\t\t\t\t\toptions: {},\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: '1', email: 'user@example.com', name: 'Test User' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/user',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('getCv', () => {\n\t\t\tit('should get CV and parse job_preferences JSON', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'user',\n\t\t\t\t\toperation: 'getCv',\n\t\t\t\t\toptions: {},\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = {\n\t\t\t\t\tcv: 'My resume content',\n\t\t\t\t\tcv_updated_at: '2024-01-01T00:00:00Z',\n\t\t\t\t\tjob_preferences: JSON.stringify({\n\t\t\t\t\t\tsearchJobTitles: ['Software Engineer', 'Developer'],\n\t\t\t\t\t\tlocations: ['Remote', 'New York'],\n\t\t\t\t\t\tblacklist: {\n\t\t\t\t\t\t\ttitleBlacklist: ['Sales'],\n\t\t\t\t\t\t\tcompanyBlacklist: ['BadCorp'],\n\t\t\t\t\t\t\tpenalize: ['Consultant'],\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(result[0][0].json).toEqual(expect.objectContaining({\n\t\t\t\t\tcv: 'My resume content',\n\t\t\t\t\tsearchJobTitles: 'Software Engineer, Developer',\n\t\t\t\t\tlocations: 'Remote, New York',\n\t\t\t\t\ttitleBlacklist: 'Sales',\n\t\t\t\t\tcompanyBlacklist: 'BadCorp',\n\t\t\t\t\tpenalize: 'Consultant',\n\t\t\t\t}));\n\t\t\t});\n\n\t\t\tit('should handle legacy blacklist structure', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'user',\n\t\t\t\t\toperation: 'getCv',\n\t\t\t\t\toptions: {},\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = {\n\t\t\t\t\tcv: 'My resume',\n\t\t\t\t\tjob_preferences: JSON.stringify({\n\t\t\t\t\t\tsearchJobTitles: ['Engineer'],\n\t\t\t\t\t\tlocations: ['SF'],\n\t\t\t\t\t\ttitleBlacklist: ['Manager'],\n\t\t\t\t\t\tcompanyBlacklist: ['OldCorp'],\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(result[0][0].json).toEqual(expect.objectContaining({\n\t\t\t\t\ttitleBlacklist: 'Manager',\n\t\t\t\t\tcompanyBlacklist: 'OldCorp',\n\t\t\t\t}));\n\t\t\t});\n\n\t\t\tit('should handle missing job_preferences', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'user',\n\t\t\t\t\toperation: 'getCv',\n\t\t\t\t\toptions: {},\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = {\n\t\t\t\t\tcv: 'My resume',\n\t\t\t\t\tcv_updated_at: null,\n\t\t\t\t\tjob_preferences: null,\n\t\t\t\t};\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(result[0][0].json).toEqual(expect.objectContaining({\n\t\t\t\t\tcv: 'My resume',\n\t\t\t\t\tsearchJobTitles: '',\n\t\t\t\t\tlocations: '',\n\t\t\t\t}));\n\t\t\t});\n\t\t});\n\n\t\tdescribe('update', () => {\n\t\t\tit('should update user fields', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'user',\n\t\t\t\t\toperation: 'update',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tupdateFields: { home_location: 'Boston, MA' },\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = { id: '1', home_location: 'Boston, MA' };\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/user',\n\t\t\t\t\t\tbody: { home_location: 'Boston, MA' },\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// Automation Operations Tests\n\t// ========================================================================\n\tdescribe('Automation Operations', () => {\n\t\tdescribe('getConfig', () => {\n\t\t\tit('should get automation config successfully', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'automation',\n\t\t\t\t\toperation: 'getConfig',\n\t\t\t\t\toptions: {},\n\t\t\t\t});\n\n\t\t\t\tconst mockResponse = {\n\t\t\t\t\tmodels: {\n\t\t\t\t\t\tlow: 'gpt-4o-mini',\n\t\t\t\t\t\tmedium: 'gpt-5-mini',\n\t\t\t\t\t\thigh: 'gpt-5-mini',\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(mockResponse);\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\turl: 'https://test.innotes.com/api/automation/config',\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\texpect(result[0][0].json).toEqual(mockResponse);\n\t\t\t});\n\n\t\t\tit('should handle API errors in getConfig', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'automation',\n\t\t\t\t\toperation: 'getConfig',\n\t\t\t\t\toptions: {},\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(\n\t\t\t\t\tnew Error('Unauthorized'),\n\t\t\t\t);\n\n\t\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/Failed to get automation config/i);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('reportJobCreated', () => {\n\t\t\tit('should report with success status', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'automation',\n\t\t\t\t\toperation: 'reportJobCreated',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tjobsAdded: 5,\n\t\t\t\t\tstatus: 'success',\n\t\t\t\t});\n\n\t\t\t\t// First call gets user, second reports callback\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock)\n\t\t\t\t\t.mockResolvedValueOnce({ id: 'user-123' })\n\t\t\t\t\t.mockResolvedValueOnce({ success: true });\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\tconst calls = (mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mock.calls;\n\t\t\t\tconst callbackCall = calls.find((call) => call[1].url.includes('/api/automation/callback'));\n\n\t\t\t\texpect(callbackCall[1].body).toEqual(expect.objectContaining({\n\t\t\t\t\tuserId: 'user-123',\n\t\t\t\t\tstatus: 'success',\n\t\t\t\t\tjobsAdded: 5,\n\t\t\t\t\tsecret: 'test-callback-secret',\n\t\t\t\t}));\n\t\t\t\texpect(result[0][0].json).toEqual(expect.objectContaining({\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tjobsAdded: 5,\n\t\t\t\t\tstatus: 'success',\n\t\t\t\t}));\n\t\t\t});\n\n\t\t\tit('should report with error status and message', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'automation',\n\t\t\t\t\toperation: 'reportJobCreated',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tjobsAdded: 0,\n\t\t\t\t\tstatus: 'error',\n\t\t\t\t\terrorMessage: 'Failed to scrape jobs',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock)\n\t\t\t\t\t.mockResolvedValueOnce({ id: 'user-123' })\n\t\t\t\t\t.mockResolvedValueOnce({ success: true });\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\tconst calls = (mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mock.calls;\n\t\t\t\tconst callbackCall = calls.find((call) => call[1].url.includes('/api/automation/callback'));\n\n\t\t\t\texpect(callbackCall[1].body).toEqual(expect.objectContaining({\n\t\t\t\t\tstatus: 'error',\n\t\t\t\t\terror: 'Failed to scrape jobs',\n\t\t\t\t}));\n\t\t\t});\n\n\t\t\tit('should throw when callbackSecret not configured', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions(\n\t\t\t\t\t{\n\t\t\t\t\t\tresource: 'automation',\n\t\t\t\t\t\toperation: 'reportJobCreated',\n\t\t\t\t\t\toptions: {},\n\t\t\t\t\t\tjobsAdded: 1,\n\t\t\t\t\t\tstatus: 'success',\n\t\t\t\t\t},\n\t\t\t\t\t{ callbackSecret: '' }, // Empty callback secret\n\t\t\t\t);\n\n\t\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/callback secret/i);\n\t\t\t});\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// Batch Processing Tests\n\t// ========================================================================\n\tdescribe('Batch Processing', () => {\n\t\tit('should process items in batches', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'contact',\n\t\t\t\toperation: 'get',\n\t\t\t\toptions: { batchSize: 2, timeoutBetweenBatches: 10 },\n\t\t\t\tcontactId: '1',\n\t\t\t});\n\n\t\t\t// Simulate 3 input items\n\t\t\t(mockExecute.getInputData as jest.Mock).mockReturnValue([\n\t\t\t\t{ json: {} },\n\t\t\t\t{ json: {} },\n\t\t\t\t{ json: {} },\n\t\t\t]);\n\n\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({ id: '1' });\n\n\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t// Should have made 3 API calls (one per item)\n\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledTimes(3);\n\t\t});\n\n\t\tit('should respect batchSize option', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'contact',\n\t\t\t\toperation: 'get',\n\t\t\t\toptions: { batchSize: 5 },\n\t\t\t\tcontactId: '1',\n\t\t\t});\n\n\t\t\t(mockExecute.getInputData as jest.Mock).mockReturnValue([{ json: {} }]);\n\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue({ id: '1' });\n\n\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t// Verify options were read\n\t\t\texpect(mockExecute.getNodeParameter).toHaveBeenCalledWith('options', 0, {});\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// Error Handling Tests\n\t// ========================================================================\n\tdescribe('Error Handling', () => {\n\t\tit('should handle API errors gracefully', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'contact',\n\t\t\t\toperation: 'get',\n\t\t\t\toptions: {},\n\t\t\t\tcontactId: '999',\n\t\t\t});\n\n\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(\n\t\t\t\tnew Error('Not found'),\n\t\t\t);\n\n\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow();\n\t\t});\n\n\t\tit('should continue on fail when enabled', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'contact',\n\t\t\t\toperation: 'get',\n\t\t\t\toptions: {},\n\t\t\t\tcontactId: '999',\n\t\t\t});\n\n\t\t\t(mockExecute.continueOnFail as jest.Mock).mockReturnValue(true);\n\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(\n\t\t\t\tnew Error('API Error'),\n\t\t\t);\n\n\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t// Should return error in result instead of throwing\n\t\t\texpect(result[0][0].json).toEqual({ error: 'API Error' });\n\t\t});\n\n\t\tit('should include request parameters in job creation error messages', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'job',\n\t\t\t\toperation: 'create',\n\t\t\t\toptions: {},\n\t\t\t\tname: 'Test Job',\n\t\t\t\tcompany_name: 'Test Corp',\n\t\t\t});\n\n\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(\n\t\t\t\tnew Error('Server error'),\n\t\t\t);\n\n\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/Test Job|Test Corp/);\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// Unsupported Operations Tests\n\t// ========================================================================\n\tdescribe('Unsupported Operations', () => {\n\t\tit('should handle unsupported resource gracefully', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'unsupported',\n\t\t\t\toperation: 'get',\n\t\t\t\toptions: {},\n\t\t\t});\n\n\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\texpect(result).toBeDefined();\n\t\t\texpect(Array.isArray(result)).toBe(true);\n\t\t});\n\n\t\tit('should throw error for unsupported contact operation', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'contact',\n\t\t\t\toperation: 'unsupported_op',\n\t\t\t\toptions: {},\n\t\t\t});\n\n\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/not supported.*contact/i);\n\t\t});\n\n\t\tit('should throw error for unsupported note operation', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'note',\n\t\t\t\toperation: 'unsupported_op',\n\t\t\t\toptions: {},\n\t\t\t});\n\n\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/not supported.*note/i);\n\t\t});\n\n\t\tit('should throw error for unsupported job operation', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'job',\n\t\t\t\toperation: 'unsupported_op',\n\t\t\t\toptions: {},\n\t\t\t});\n\n\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/not supported.*job/i);\n\t\t});\n\n\t\tit('should throw error for unsupported status operation', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'status',\n\t\t\t\toperation: 'unsupported_op',\n\t\t\t\toptions: {},\n\t\t\t});\n\n\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/not supported.*status/i);\n\t\t});\n\n\t\tit('should throw error for unsupported tag operation', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'tag',\n\t\t\t\toperation: 'unsupported_op',\n\t\t\t\toptions: {},\n\t\t\t});\n\n\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/not supported.*tag/i);\n\t\t});\n\n\t\tit('should throw error for unsupported user operation', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'user',\n\t\t\t\toperation: 'unsupported_op',\n\t\t\t\toptions: {},\n\t\t\t});\n\n\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/not supported.*user/i);\n\t\t});\n\n\t\tit('should throw error for unsupported automation operation', async () => {\n\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\tresource: 'automation',\n\t\t\t\toperation: 'unsupported_op',\n\t\t\t\toptions: {},\n\t\t\t});\n\n\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/not supported.*automation/i);\n\t\t});\n\t});\n\n\t// ========================================================================\n\t// Additional Error Handling Tests for Branch Coverage\n\t// ========================================================================\n\tdescribe('Additional Error Handling', () => {\n\t\tdescribe('Contact Operations', () => {\n\t\t\tit('should include request params in contact create error', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'contact',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'Test Contact',\n\t\t\t\t\tlinkedin_key: 'test-key',\n\t\t\t\t\tlinkedin_user: 'test-user',\n\t\t\t\t\tlocation: 'New York',\n\t\t\t\t\tcurrent_company: 'Test Corp',\n\t\t\t\t\tpicture_url: 'http://example.com/pic.jpg',\n\t\t\t\t\ttags: 'tag1,tag2',\n\t\t\t\t\tstatus_id: '5',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(\n\t\t\t\t\tnew Error('Validation error'),\n\t\t\t\t);\n\n\t\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/Test Contact|Validation error/);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('Automation Operations', () => {\n\t\t\tit('should throw when getting user ID fails', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'automation',\n\t\t\t\t\toperation: 'reportJobCreated',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tjobsAdded: 5,\n\t\t\t\t\tstatus: 'success',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(\n\t\t\t\t\tnew Error('User not found'),\n\t\t\t\t);\n\n\t\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/Failed to get user ID/i);\n\t\t\t});\n\n\t\t\tit('should throw when callback request fails', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'automation',\n\t\t\t\t\toperation: 'reportJobCreated',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tjobsAdded: 5,\n\t\t\t\t\tstatus: 'success',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock)\n\t\t\t\t\t.mockResolvedValueOnce({ id: 'user-123' }) // User request succeeds\n\t\t\t\t\t.mockRejectedValueOnce(new Error('Callback failed')); // Callback fails\n\n\t\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/Failed to report job created/i);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('Job Operations', () => {\n\t\t\tit('should throw when status lookup fails in job create', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'create',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tname: 'Test Job',\n\t\t\t\t\tcompany_name: 'Test Corp',\n\t\t\t\t\tstatus: 'Applied',\n\t\t\t\t});\n\n\t\t\t\t// Status lookup fails with network error\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(\n\t\t\t\t\tnew Error('Network error'),\n\t\t\t\t);\n\n\t\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/Failed to lookup status/i);\n\t\t\t});\n\n\t\t\tit('should throw when status not found in job update', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'update',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tjobId: '123',\n\t\t\t\t\tupdateFields: { status: 'NonExistentStatus' },\n\t\t\t\t});\n\n\t\t\t\t// Return empty statuses array\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValueOnce([\n\t\t\t\t\t{ id: '1', name: 'Applied' },\n\t\t\t\t\t{ id: '2', name: 'Interviewing' },\n\t\t\t\t]);\n\n\t\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/NonExistentStatus.*not found/i);\n\t\t\t});\n\n\t\t\tit('should throw when status lookup fails in job update', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'update',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tjobId: '123',\n\t\t\t\t\tupdateFields: { status: 'Applied' },\n\t\t\t\t});\n\n\t\t\t\t// Status lookup fails with network error\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(\n\t\t\t\t\tnew Error('Network error'),\n\t\t\t\t);\n\n\t\t\t\tawait expect(node.execute.call(mockExecute)).rejects.toThrow(/Failed to lookup status/i);\n\t\t\t});\n\n\t\t\tit('should return exists:false with error when search throws', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'exists',\n\t\t\t\t\toptions: {},\n\t\t\t\t\texistsType: 'byJobId',\n\t\t\t\t\tid: '123',\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(\n\t\t\t\t\tnew Error('Search failed'),\n\t\t\t\t);\n\n\t\t\t\tconst result = await node.execute.call(mockExecute);\n\n\t\t\t\texpect(result[0][0].json).toEqual(expect.objectContaining({\n\t\t\t\t\texists: false,\n\t\t\t\t\tid: '123',\n\t\t\t\t\terror: 'Search failed',\n\t\t\t\t}));\n\t\t\t});\n\t\t});\n\n\t\tdescribe('Job Search Types', () => {\n\t\t\tit('should search by company field', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'search',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tsearchMethod: 'company',\n\t\t\t\t\tsearchQuery: 'Google',\n\t\t\t\t\tsearchOptions: { limit: 50 },\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue([]);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tsearchTerm: 'Google',\n\t\t\t\t\t\t\tsearchField: 'company',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit('should search by location field', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'search',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tsearchMethod: 'location',\n\t\t\t\t\tsearchQuery: 'San Francisco',\n\t\t\t\t\tsearchOptions: { limit: 50 },\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue([]);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tsearchTerm: 'San Francisco',\n\t\t\t\t\t\t\tsearchField: 'location',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit('should search by description field', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'search',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tsearchMethod: 'description',\n\t\t\t\t\tsearchQuery: 'React',\n\t\t\t\t\tsearchOptions: { limit: 50 },\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue([]);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tsearchTerm: 'React',\n\t\t\t\t\t\t\tsearchField: 'description',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit('should use default search when method is unknown', async () => {\n\t\t\t\tconst mockExecute = createMockExecuteFunctions({\n\t\t\t\t\tresource: 'job',\n\t\t\t\t\toperation: 'search',\n\t\t\t\t\toptions: {},\n\t\t\t\t\tsearchMethod: 'unknown_method',\n\t\t\t\t\tsearchQuery: 'test query',\n\t\t\t\t\tsearchOptions: { limit: 50 },\n\t\t\t\t});\n\n\t\t\t\t(mockExecute.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue([]);\n\n\t\t\t\tawait node.execute.call(mockExecute);\n\n\t\t\t\texpect(mockExecute.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith(\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\texpect.objectContaining({\n\t\t\t\t\t\tqs: expect.objectContaining({\n\t\t\t\t\t\t\tsearchTerm: 'test query',\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t});\n});\n"]}
|
package/dist/test/setup.js
CHANGED
|
@@ -20,13 +20,15 @@ afterAll(() => {
|
|
|
20
20
|
jest.mock('n8n-workflow', () => ({
|
|
21
21
|
NodeApiError: class NodeApiError extends Error {
|
|
22
22
|
constructor(_node, error, _options) {
|
|
23
|
-
|
|
23
|
+
var _a;
|
|
24
|
+
super((_a = error.message) !== null && _a !== void 0 ? _a : 'API Error');
|
|
24
25
|
this.name = 'NodeApiError';
|
|
25
26
|
}
|
|
26
27
|
},
|
|
27
28
|
NodeOperationError: class NodeOperationError extends Error {
|
|
28
29
|
constructor(_node, error, _options) {
|
|
29
|
-
|
|
30
|
+
var _a;
|
|
31
|
+
super((_a = error.message) !== null && _a !== void 0 ? _a : 'Operation Error');
|
|
30
32
|
this.name = 'NodeOperationError';
|
|
31
33
|
}
|
|
32
34
|
},
|
package/dist/test/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../test/setup.ts"],"names":[],"mappings":";AAAA;;;GAGG;AAEH,oBAAoB;AACpB,SAAS,CAAC,GAAG,EAAE;IACd,0CAA0C;IAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE;YAC9C,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,IAAI;SACd,CAAC,CAAC;IACJ,CAAC;AACF,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,GAAG,EAAE;IACb,0BAA0B;AAC3B,CAAC,CAAC,CAAC;AAEH,wBAAwB;AACxB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,YAAa,SAAQ,KAAK;QAC7C,YAAY,KAAU,EAAE,KAAU,EAAE,QAAc
|
|
1
|
+
{"version":3,"sources":["../test/setup.ts"],"names":[],"mappings":";AAAA;;;GAGG;AAEH,oBAAoB;AACpB,SAAS,CAAC,GAAG,EAAE;IACd,0CAA0C;IAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE;YAC9C,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,IAAI;SACd,CAAC,CAAC;IACJ,CAAC;AACF,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,GAAG,EAAE;IACb,0BAA0B;AAC3B,CAAC,CAAC,CAAC;AAEH,wBAAwB;AACxB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,YAAa,SAAQ,KAAK;QAC7C,YAAY,KAAU,EAAE,KAAU,EAAE,QAAc;;YACjD,KAAK,CAAC,MAAA,KAAK,CAAC,OAAO,mCAAI,WAAW,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC5B,CAAC;KACD;IACD,kBAAkB,EAAE,MAAM,kBAAmB,SAAQ,KAAK;QACzD,YAAY,KAAU,EAAE,KAAU,EAAE,QAAc;;YACjD,KAAK,CAAC,MAAA,KAAK,CAAC,OAAO,mCAAI,iBAAiB,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QAClC,CAAC;KACD;CACD,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;AAC5B,qCAAqC;CACrC,CAAC,CAAC,CAAC","file":"setup.js","sourcesContent":["/**\n * Author: marco\n * Last updated: 2025-05-30\n */\n\n// Global test setup\nbeforeAll(() => {\n\t// Setup environment variables for testing\n\tif (!process.env.NODE_ENV) {\n\t\tObject.defineProperty(process.env, 'NODE_ENV', {\n\t\t\tvalue: 'test',\n\t\t\twritable: true,\n\t\t});\n\t}\n});\n\nafterAll(() => {\n\t// Cleanup after all tests\n});\n\n// Mock N8N core modules\njest.mock('n8n-workflow', () => ({\n\tNodeApiError: class NodeApiError extends Error {\n\t\tconstructor(_node: any, error: any, _options?: any) {\n\t\t\tsuper(error.message ?? 'API Error');\n\t\t\tthis.name = 'NodeApiError';\n\t\t}\n\t},\n\tNodeOperationError: class NodeOperationError extends Error {\n\t\tconstructor(_node: any, error: any, _options?: any) {\n\t\t\tsuper(error.message ?? 'Operation Error');\n\t\t\tthis.name = 'NodeOperationError';\n\t\t}\n\t},\n}));\n\njest.mock('n8n-core', () => ({\n\t// Add mock implementations as needed\n}));\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-innotes",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.21",
|
|
4
4
|
"description": "N8N node for InNotes CRM API integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"build": "gulp build",
|
|
30
30
|
"dev": "gulp dev",
|
|
31
31
|
"format": "prettier . --write",
|
|
32
|
-
"lint": "eslint .
|
|
33
|
-
"lintfix": "eslint . --
|
|
32
|
+
"lint": "eslint .",
|
|
33
|
+
"lintfix": "eslint . --fix",
|
|
34
34
|
"test": "jest",
|
|
35
35
|
"test:watch": "jest --watch",
|
|
36
36
|
"test:coverage": "jest --coverage",
|
|
@@ -49,12 +49,10 @@
|
|
|
49
49
|
]
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
+
"@eslint/js": "^9.15.0",
|
|
52
53
|
"@types/jest": "^29.5.5",
|
|
53
54
|
"@types/node": "^18.16.16",
|
|
54
|
-
"
|
|
55
|
-
"@typescript-eslint/parser": "^6.6.0",
|
|
56
|
-
"eslint": "^8.48.0",
|
|
57
|
-
"eslint-plugin-n8n-nodes-base": "^1.16.1",
|
|
55
|
+
"eslint": "^9.15.0",
|
|
58
56
|
"gulp": "^4.0.2",
|
|
59
57
|
"gulp-clean": "^0.4.0",
|
|
60
58
|
"gulp-sourcemaps": "^3.0.0",
|
|
@@ -64,7 +62,8 @@
|
|
|
64
62
|
"n8n-workflow": "*",
|
|
65
63
|
"prettier": "^3.0.3",
|
|
66
64
|
"ts-jest": "^29.1.1",
|
|
67
|
-
"typescript": "^5.2.2"
|
|
65
|
+
"typescript": "^5.2.2",
|
|
66
|
+
"typescript-eslint": "^8.15.0"
|
|
68
67
|
},
|
|
69
68
|
"peerDependencies": {
|
|
70
69
|
"n8n-core": "*",
|