n8n-nodes-innotes 1.0.23 → 2.0.1
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/README.md +6 -3
- package/dist/credentials/InNotesApi.credentials.js +1 -54
- package/dist/credentials/InNotesApi.credentials.js.map +1 -1
- package/dist/credentials/InNotesApi.credentials.ts +1 -54
- package/dist/descriptions/ContactDescription.js +5 -1
- package/dist/descriptions/ContactDescription.js.map +1 -1
- package/dist/package.json +12 -1
- package/dist/test/InNotes.node.test.js +0 -2
- package/dist/test/InNotes.node.test.js.map +1 -1
- package/package.json +12 -1
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ An N8N custom node that enables seamless integration with the InNotes LinkedIn C
|
|
|
19
19
|
- **Advanced Filtering**: Search and filter capabilities for efficient data retrieval
|
|
20
20
|
- **Pagination Support**: Handle large datasets with built-in pagination
|
|
21
21
|
- **Error Handling**: Robust error handling with meaningful error messages
|
|
22
|
-
- **Authentication**: Secure API authentication using
|
|
22
|
+
- **Authentication**: Secure API authentication using a Bearer token
|
|
23
23
|
|
|
24
24
|
## Installation
|
|
25
25
|
|
|
@@ -83,10 +83,13 @@ Before using the InNotes node, you need to configure your API credentials:
|
|
|
83
83
|
1. In N8N, go to **Credentials** → **Create New**
|
|
84
84
|
2. Search for **InNotes API** and select it
|
|
85
85
|
3. Fill in the required fields:
|
|
86
|
-
- **
|
|
87
|
-
- **Password**: Your InNotes account password
|
|
86
|
+
- **Bearer Token**: Generate one in your InNotes dashboard, under settings
|
|
88
87
|
- **Base URL**: Your InNotes instance URL (e.g., `https://app.innotes.com`)
|
|
89
88
|
|
|
89
|
+
> Versions before 2.0.0 also offered "Username/Password (Legacy)". That
|
|
90
|
+
> scheme has been removed from InNotes; regenerate the credential with a
|
|
91
|
+
> Bearer token.
|
|
92
|
+
|
|
90
93
|
### Node Setup
|
|
91
94
|
|
|
92
95
|
1. Add the **InNotes** node to your workflow
|
|
@@ -21,23 +21,6 @@ class InNotesApi {
|
|
|
21
21
|
description: 'The base URL of your InNotes instance',
|
|
22
22
|
required: true,
|
|
23
23
|
},
|
|
24
|
-
{
|
|
25
|
-
displayName: 'Authentication Method',
|
|
26
|
-
name: 'authMethod',
|
|
27
|
-
type: 'options',
|
|
28
|
-
options: [
|
|
29
|
-
{
|
|
30
|
-
name: 'Bearer Token',
|
|
31
|
-
value: 'token',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
name: 'Username/Password (Legacy)',
|
|
35
|
-
value: 'credentials',
|
|
36
|
-
},
|
|
37
|
-
],
|
|
38
|
-
default: 'token',
|
|
39
|
-
description: 'Choose your authentication method. Bearer token is recommended.',
|
|
40
|
-
},
|
|
41
24
|
{
|
|
42
25
|
displayName: 'Bearer Token',
|
|
43
26
|
name: 'token',
|
|
@@ -48,40 +31,6 @@ class InNotesApi {
|
|
|
48
31
|
default: '',
|
|
49
32
|
description: 'Your InNotes API Bearer token. Generate one in your dashboard settings.',
|
|
50
33
|
required: true,
|
|
51
|
-
displayOptions: {
|
|
52
|
-
show: {
|
|
53
|
-
authMethod: ['token'],
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
displayName: 'Username',
|
|
59
|
-
name: 'username',
|
|
60
|
-
type: 'string',
|
|
61
|
-
default: '',
|
|
62
|
-
description: 'Your InNotes username',
|
|
63
|
-
required: true,
|
|
64
|
-
displayOptions: {
|
|
65
|
-
show: {
|
|
66
|
-
authMethod: ['credentials'],
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
displayName: 'Password',
|
|
72
|
-
name: 'password',
|
|
73
|
-
type: 'string',
|
|
74
|
-
typeOptions: {
|
|
75
|
-
password: true,
|
|
76
|
-
},
|
|
77
|
-
default: '',
|
|
78
|
-
description: 'Your InNotes password',
|
|
79
|
-
required: true,
|
|
80
|
-
displayOptions: {
|
|
81
|
-
show: {
|
|
82
|
-
authMethod: ['credentials'],
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
34
|
},
|
|
86
35
|
{
|
|
87
36
|
displayName: 'Callback Secret',
|
|
@@ -105,9 +54,7 @@ class InNotesApi {
|
|
|
105
54
|
type: 'generic',
|
|
106
55
|
properties: {
|
|
107
56
|
headers: {
|
|
108
|
-
'Authorization': '={{$credentials.
|
|
109
|
-
'username': '={{$credentials.authMethod === "credentials" ? $credentials.username : undefined}}',
|
|
110
|
-
'password': '={{$credentials.authMethod === "credentials" ? $credentials.password : undefined}}',
|
|
57
|
+
'Authorization': '=Bearer {{$credentials.token}}',
|
|
111
58
|
},
|
|
112
59
|
},
|
|
113
60
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../credentials/InNotesApi.credentials.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAUH,MAAa,UAAU;IAAvB;QACC,SAAI,GAAG,YAAY,CAAC;QACpB,gBAAW,GAAG,aAAa,CAAC;QAC5B,qBAAgB,GAAG,oBAAoB,CAAC;QACxC,SAAI,GAAS,mBAAmB,CAAC;QACjC,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,oBAAoB;gBAC7B,WAAW,EAAE,uCAAuC;gBACpD,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"sources":["../credentials/InNotesApi.credentials.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAUH,MAAa,UAAU;IAAvB;QACC,SAAI,GAAG,YAAY,CAAC;QACpB,gBAAW,GAAG,aAAa,CAAC;QAC5B,qBAAgB,GAAG,oBAAoB,CAAC;QACxC,SAAI,GAAS,mBAAmB,CAAC;QACjC,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,oBAAoB;gBAC7B,WAAW,EAAE,uCAAuC;gBACpD,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,yEAAyE;gBACtF,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,iBAAiB;gBAC9B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,yIAAyI;aACtJ;YACD;gBACC,WAAW,EAAE,iBAAiB;gBAC9B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,GAAG;gBACZ,WAAW,EAAE,wDAAwD;aACrE;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,eAAe,EAAE,gCAAgC;iBACjD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,WAAW;gBAChB,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AA5DD,gCA4DC","file":"InNotesApi.credentials.js","sourcesContent":["/**\n * Author: Marco Visin\n * Date: 2025-06-02\n * Updated to support Bearer token authentication\n */\n\nimport {\n\tIAuthenticateGeneric,\n\tICredentialTestRequest,\n\tICredentialType,\n\tINodeProperties,\n\tIcon,\n} from 'n8n-workflow';\n\nexport class InNotesApi implements ICredentialType {\n\tname = 'inNotesApi';\n\tdisplayName = 'InNotes API';\n\tdocumentationUrl = 'https://innotes.me';\n\ticon: Icon = 'file:Logo_128.png';\n\tproperties: INodeProperties[] = [\n\t\t{\n\t\t\tdisplayName: 'Base URL',\n\t\t\tname: 'baseUrl',\n\t\t\ttype: 'string',\n\t\t\tdefault: 'https://innotes.me',\n\t\t\tdescription: 'The base URL of your InNotes instance',\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Bearer Token',\n\t\t\tname: 'token',\n\t\t\ttype: 'string',\n\t\t\ttypeOptions: {\n\t\t\t\tpassword: true,\n\t\t\t},\n\t\t\tdefault: '',\n\t\t\tdescription: 'Your InNotes API Bearer token. Generate one in your dashboard settings.',\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Callback Secret',\n\t\t\tname: 'callbackSecret',\n\t\t\ttype: 'string',\n\t\t\ttypeOptions: {\n\t\t\t\tpassword: true,\n\t\t\t},\n\t\t\tdefault: '',\n\t\t\tdescription: 'Secret key for automation callbacks. Required for the \"Report Job Created\" action. Found in your InNotes dashboard automation settings.',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Allowed Domains',\n\t\t\tname: 'allowedDomains',\n\t\t\ttype: 'string',\n\t\t\tdefault: '*',\n\t\t\tdescription: 'Domains allowed to use this credential (use * for all)',\n\t\t},\n\t];\n\n\tauthenticate: IAuthenticateGeneric = {\n\t\ttype: 'generic',\n\t\tproperties: {\n\t\t\theaders: {\n\t\t\t\t'Authorization': '=Bearer {{$credentials.token}}',\n\t\t\t},\n\t\t},\n\t};\n\n\ttest: ICredentialTestRequest = {\n\t\trequest: {\n\t\t\tbaseURL: '={{$credentials.baseUrl}}',\n\t\t\turl: '/api/user',\n\t\t\tmethod: 'GET',\n\t\t},\n\t};\n}\n"]}
|
|
@@ -26,23 +26,6 @@ export class InNotesApi implements ICredentialType {
|
|
|
26
26
|
description: 'The base URL of your InNotes instance',
|
|
27
27
|
required: true,
|
|
28
28
|
},
|
|
29
|
-
{
|
|
30
|
-
displayName: 'Authentication Method',
|
|
31
|
-
name: 'authMethod',
|
|
32
|
-
type: 'options',
|
|
33
|
-
options: [
|
|
34
|
-
{
|
|
35
|
-
name: 'Bearer Token',
|
|
36
|
-
value: 'token',
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
name: 'Username/Password (Legacy)',
|
|
40
|
-
value: 'credentials',
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
default: 'token',
|
|
44
|
-
description: 'Choose your authentication method. Bearer token is recommended.',
|
|
45
|
-
},
|
|
46
29
|
{
|
|
47
30
|
displayName: 'Bearer Token',
|
|
48
31
|
name: 'token',
|
|
@@ -53,40 +36,6 @@ export class InNotesApi implements ICredentialType {
|
|
|
53
36
|
default: '',
|
|
54
37
|
description: 'Your InNotes API Bearer token. Generate one in your dashboard settings.',
|
|
55
38
|
required: true,
|
|
56
|
-
displayOptions: {
|
|
57
|
-
show: {
|
|
58
|
-
authMethod: ['token'],
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
displayName: 'Username',
|
|
64
|
-
name: 'username',
|
|
65
|
-
type: 'string',
|
|
66
|
-
default: '',
|
|
67
|
-
description: 'Your InNotes username',
|
|
68
|
-
required: true,
|
|
69
|
-
displayOptions: {
|
|
70
|
-
show: {
|
|
71
|
-
authMethod: ['credentials'],
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
displayName: 'Password',
|
|
77
|
-
name: 'password',
|
|
78
|
-
type: 'string',
|
|
79
|
-
typeOptions: {
|
|
80
|
-
password: true,
|
|
81
|
-
},
|
|
82
|
-
default: '',
|
|
83
|
-
description: 'Your InNotes password',
|
|
84
|
-
required: true,
|
|
85
|
-
displayOptions: {
|
|
86
|
-
show: {
|
|
87
|
-
authMethod: ['credentials'],
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
39
|
},
|
|
91
40
|
{
|
|
92
41
|
displayName: 'Callback Secret',
|
|
@@ -111,9 +60,7 @@ export class InNotesApi implements ICredentialType {
|
|
|
111
60
|
type: 'generic',
|
|
112
61
|
properties: {
|
|
113
62
|
headers: {
|
|
114
|
-
'Authorization': '={{$credentials.
|
|
115
|
-
'username': '={{$credentials.authMethod === "credentials" ? $credentials.username : undefined}}',
|
|
116
|
-
'password': '={{$credentials.authMethod === "credentials" ? $credentials.password : undefined}}',
|
|
63
|
+
'Authorization': '=Bearer {{$credentials.token}}',
|
|
117
64
|
},
|
|
118
65
|
},
|
|
119
66
|
};
|
|
@@ -210,9 +210,13 @@ exports.contactFields = [
|
|
|
210
210
|
},
|
|
211
211
|
typeOptions: {
|
|
212
212
|
minValue: 1,
|
|
213
|
+
// GET /api/contacts clamps pageSize at 200. Without the same ceiling
|
|
214
|
+
// here a workflow asking for 500 gets 200 back with a 200 status and
|
|
215
|
+
// nothing to say it was cut.
|
|
216
|
+
maxValue: 200,
|
|
213
217
|
},
|
|
214
218
|
default: 24,
|
|
215
|
-
description: 'Max number of results to return',
|
|
219
|
+
description: 'Max number of results to return (200 at most)',
|
|
216
220
|
},
|
|
217
221
|
{
|
|
218
222
|
displayName: 'Search Term',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../descriptions/ContactDescription.ts"],"names":[],"mappings":"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","file":"ContactDescription.js","sourcesContent":["/**\n * @author Marco Visin\n * @date 2025-05-30\n */\n\nimport { INodeProperties } from 'n8n-workflow';\n\nexport const contactOperations: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Operation',\n\t\tname: 'operation',\n\t\ttype: 'options',\n\t\tnoDataExpression: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'Create',\n\t\t\t\tvalue: 'create',\n\t\t\t\tdescription: 'Create a new contact',\n\t\t\t\taction: 'Create a contact',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Get',\n\t\t\t\tvalue: 'get',\n\t\t\t\tdescription: 'Get a contact by ID',\n\t\t\t\taction: 'Get a contact',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Get Many',\n\t\t\t\tvalue: 'getAll',\n\t\t\t\tdescription: 'Get multiple contacts',\n\t\t\t\taction: 'Get many contacts',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Update',\n\t\t\t\tvalue: 'update',\n\t\t\t\tdescription: 'Update a contact',\n\t\t\t\taction: 'Update a contact',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Delete',\n\t\t\t\tvalue: 'delete',\n\t\t\t\tdescription: 'Delete a contact',\n\t\t\t\taction: 'Delete a contact',\n\t\t\t},\n\t\t],\n\t\tdefault: 'getAll',\n\t},\n];\n\nexport const contactFields: INodeProperties[] = [\n\t// Create fields\n\t{\n\t\tdisplayName: 'Name',\n\t\tname: 'name',\n\t\ttype: 'string',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The name of the contact',\n\t},\n\t{\n\t\tdisplayName: 'LinkedIn Key',\n\t\tname: 'linkedin_key',\n\t\ttype: 'string',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The LinkedIn profile key/username',\n\t},\n\t{\n\t\tdisplayName: 'LinkedIn User',\n\t\tname: 'linkedin_user',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The LinkedIn username',\n\t},\n\t{\n\t\tdisplayName: 'Location',\n\t\tname: 'location',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create', 'update'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The location of the contact',\n\t},\n\t{\n\t\tdisplayName: 'Current Company',\n\t\tname: 'current_company',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create', 'update'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The current company of the contact',\n\t},\n\t{\n\t\tdisplayName: 'Picture URL',\n\t\tname: 'picture_url',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create', 'update'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'URL of the contact profile picture',\n\t},\n\t{\n\t\tdisplayName: 'Tags',\n\t\tname: 'tags',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add Tag',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create', 'update'],\n\t\t\t},\n\t\t},\n\t\tdefault: [],\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Tag',\n\t\t\t\tname: 'tag',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t],\n\t\tdescription: 'Tags to assign to the contact',\n\t},\n\t{\n\t\tdisplayName: 'Status ID',\n\t\tname: 'status_id',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create', 'update'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The status ID for the contact',\n\t},\n\n\t// Get fields\n\t{\n\t\tdisplayName: 'Contact ID',\n\t\tname: 'contactId',\n\t\ttype: 'string',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['get', 'update', 'delete'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The ID of the contact',\n\t},\n\n\t// Get All fields\n\t{\n\t\tdisplayName: 'Return All',\n\t\tname: 'returnAll',\n\t\ttype: 'boolean',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['getAll'],\n\t\t\t},\n\t\t},\n\t\tdefault: false,\n\t\tdescription: 'Whether to return all results or only up to a given limit',\n\t},\n\t{\n\t\tdisplayName: 'Limit',\n\t\tname: 'limit',\n\t\ttype: 'number',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['getAll'],\n\t\t\t\treturnAll: [false],\n\t\t\t},\n\t\t},\n\t\ttypeOptions: {\n\t\t\tminValue: 1,\n\t\t},\n\t\tdefault: 24,\n\t\tdescription: 'Max number of results to return',\n\t},\n\t{\n\t\tdisplayName: 'Search Term',\n\t\tname: 'search',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['getAll'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'Search term to filter contacts',\n\t},\n\t{\n\t\tdisplayName: 'Filter by Tags',\n\t\tname: 'tags',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['getAll'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'Comma-separated list of tags to filter by',\n\t},\n\n\t// Update fields\n\t{\n\t\tdisplayName: 'Update Fields',\n\t\tname: 'updateFields',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add Field',\n\t\tdefault: {},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['update'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Name',\n\t\t\t\tname: 'name',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Location',\n\t\t\t\tname: 'location',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Current Company',\n\t\t\t\tname: 'current_company',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Picture URL',\n\t\t\t\tname: 'picture_url',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Status ID',\n\t\t\t\tname: 'status_id',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t],\n\t},\n];\n"]}
|
|
1
|
+
{"version":3,"sources":["../descriptions/ContactDescription.ts"],"names":[],"mappings":"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","file":"ContactDescription.js","sourcesContent":["/**\n * @author Marco Visin\n * @date 2025-05-30\n */\n\nimport { INodeProperties } from 'n8n-workflow';\n\nexport const contactOperations: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Operation',\n\t\tname: 'operation',\n\t\ttype: 'options',\n\t\tnoDataExpression: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'Create',\n\t\t\t\tvalue: 'create',\n\t\t\t\tdescription: 'Create a new contact',\n\t\t\t\taction: 'Create a contact',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Get',\n\t\t\t\tvalue: 'get',\n\t\t\t\tdescription: 'Get a contact by ID',\n\t\t\t\taction: 'Get a contact',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Get Many',\n\t\t\t\tvalue: 'getAll',\n\t\t\t\tdescription: 'Get multiple contacts',\n\t\t\t\taction: 'Get many contacts',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Update',\n\t\t\t\tvalue: 'update',\n\t\t\t\tdescription: 'Update a contact',\n\t\t\t\taction: 'Update a contact',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Delete',\n\t\t\t\tvalue: 'delete',\n\t\t\t\tdescription: 'Delete a contact',\n\t\t\t\taction: 'Delete a contact',\n\t\t\t},\n\t\t],\n\t\tdefault: 'getAll',\n\t},\n];\n\nexport const contactFields: INodeProperties[] = [\n\t// Create fields\n\t{\n\t\tdisplayName: 'Name',\n\t\tname: 'name',\n\t\ttype: 'string',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The name of the contact',\n\t},\n\t{\n\t\tdisplayName: 'LinkedIn Key',\n\t\tname: 'linkedin_key',\n\t\ttype: 'string',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The LinkedIn profile key/username',\n\t},\n\t{\n\t\tdisplayName: 'LinkedIn User',\n\t\tname: 'linkedin_user',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The LinkedIn username',\n\t},\n\t{\n\t\tdisplayName: 'Location',\n\t\tname: 'location',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create', 'update'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The location of the contact',\n\t},\n\t{\n\t\tdisplayName: 'Current Company',\n\t\tname: 'current_company',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create', 'update'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The current company of the contact',\n\t},\n\t{\n\t\tdisplayName: 'Picture URL',\n\t\tname: 'picture_url',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create', 'update'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'URL of the contact profile picture',\n\t},\n\t{\n\t\tdisplayName: 'Tags',\n\t\tname: 'tags',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add Tag',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create', 'update'],\n\t\t\t},\n\t\t},\n\t\tdefault: [],\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Tag',\n\t\t\t\tname: 'tag',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t],\n\t\tdescription: 'Tags to assign to the contact',\n\t},\n\t{\n\t\tdisplayName: 'Status ID',\n\t\tname: 'status_id',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['create', 'update'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The status ID for the contact',\n\t},\n\n\t// Get fields\n\t{\n\t\tdisplayName: 'Contact ID',\n\t\tname: 'contactId',\n\t\ttype: 'string',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['get', 'update', 'delete'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'The ID of the contact',\n\t},\n\n\t// Get All fields\n\t{\n\t\tdisplayName: 'Return All',\n\t\tname: 'returnAll',\n\t\ttype: 'boolean',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['getAll'],\n\t\t\t},\n\t\t},\n\t\tdefault: false,\n\t\tdescription: 'Whether to return all results or only up to a given limit',\n\t},\n\t{\n\t\tdisplayName: 'Limit',\n\t\tname: 'limit',\n\t\ttype: 'number',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['getAll'],\n\t\t\t\treturnAll: [false],\n\t\t\t},\n\t\t},\n\t\ttypeOptions: {\n\t\t\tminValue: 1,\n\t\t\t// GET /api/contacts clamps pageSize at 200. Without the same ceiling\n\t\t\t// here a workflow asking for 500 gets 200 back with a 200 status and\n\t\t\t// nothing to say it was cut.\n\t\t\tmaxValue: 200,\n\t\t},\n\t\tdefault: 24,\n\t\tdescription: 'Max number of results to return (200 at most)',\n\t},\n\t{\n\t\tdisplayName: 'Search Term',\n\t\tname: 'search',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['getAll'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'Search term to filter contacts',\n\t},\n\t{\n\t\tdisplayName: 'Filter by Tags',\n\t\tname: 'tags',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['getAll'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'Comma-separated list of tags to filter by',\n\t},\n\n\t// Update fields\n\t{\n\t\tdisplayName: 'Update Fields',\n\t\tname: 'updateFields',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add Field',\n\t\tdefault: {},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['contact'],\n\t\t\t\toperation: ['update'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Name',\n\t\t\t\tname: 'name',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Location',\n\t\t\t\tname: 'location',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Current Company',\n\t\t\t\tname: 'current_company',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Picture URL',\n\t\t\t\tname: 'picture_url',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Status ID',\n\t\t\t\tname: 'status_id',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t],\n\t},\n];\n"]}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-innotes",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "N8N node for InNotes CRM API integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -68,5 +68,16 @@
|
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"n8n-core": "*",
|
|
70
70
|
"n8n-workflow": "*"
|
|
71
|
+
},
|
|
72
|
+
"resolutions": {
|
|
73
|
+
"axios": "^1.18.1",
|
|
74
|
+
"fast-xml-parser": "^4.5.5",
|
|
75
|
+
"form-data": "^4.0.6",
|
|
76
|
+
"lodash": "^4.18.1",
|
|
77
|
+
"uuid": "^11.1.1",
|
|
78
|
+
"braces": "^3.0.3",
|
|
79
|
+
"micromatch": "^4.0.8",
|
|
80
|
+
"qs": "^6.15.2",
|
|
81
|
+
"postcss": "^8.5.17"
|
|
71
82
|
}
|
|
72
83
|
}
|
|
@@ -15,7 +15,6 @@ const InNotes_node_1 = require("../nodes/InNotes/InNotes.node");
|
|
|
15
15
|
function createMockExecuteFunctions(params = {}, credentials = {}) {
|
|
16
16
|
const defaultCredentials = {
|
|
17
17
|
baseUrl: 'https://test.innotes.com',
|
|
18
|
-
authMethod: 'token',
|
|
19
18
|
token: 'test-token',
|
|
20
19
|
callbackSecret: 'test-callback-secret',
|
|
21
20
|
...credentials,
|
|
@@ -47,7 +46,6 @@ function createMockExecuteFunctions(params = {}, credentials = {}) {
|
|
|
47
46
|
function createMockLoadOptionsFunctions(credentials = {}) {
|
|
48
47
|
const defaultCredentials = {
|
|
49
48
|
baseUrl: 'https://test.innotes.com',
|
|
50
|
-
authMethod: 'token',
|
|
51
49
|
token: 'test-token',
|
|
52
50
|
};
|
|
53
51
|
return {
|
|
@@ -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-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"]}
|
|
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\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\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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-innotes",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "N8N node for InNotes CRM API integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -68,5 +68,16 @@
|
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"n8n-core": "*",
|
|
70
70
|
"n8n-workflow": "*"
|
|
71
|
+
},
|
|
72
|
+
"resolutions": {
|
|
73
|
+
"axios": "^1.18.1",
|
|
74
|
+
"fast-xml-parser": "^4.5.5",
|
|
75
|
+
"form-data": "^4.0.6",
|
|
76
|
+
"lodash": "^4.18.1",
|
|
77
|
+
"uuid": "^11.1.1",
|
|
78
|
+
"braces": "^3.0.3",
|
|
79
|
+
"micromatch": "^4.0.8",
|
|
80
|
+
"qs": "^6.15.2",
|
|
81
|
+
"postcss": "^8.5.17"
|
|
71
82
|
}
|
|
72
83
|
}
|