@blucca/n8n-check 0.0.0-stage → 0.1.6
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/Dockerfile +10 -0
- package/LICENSE +21 -0
- package/README.md +319 -2
- package/bin/n8n-check.mjs +62 -0
- package/examples/agregado-enrichment/README.md +68 -0
- package/examples/agregado-enrichment/n8n-synthetic +11 -0
- package/examples/agregado-enrichment/observed-results.json +806 -0
- package/examples/agregado-enrichment/prepare.mjs +39 -0
- package/examples/identity-projection/README.md +39 -0
- package/examples/identity-projection/case.json +33 -0
- package/examples/identity-projection/observed-results.json +117 -0
- package/examples/identity-projection/workflow.json +71 -0
- package/examples/identity-projection/wrong-id.json +71 -0
- package/examples/morsof-invoice-history/README.md +77 -0
- package/examples/morsof-invoice-history/UPSTREAM-LICENSE +21 -0
- package/examples/morsof-invoice-history/n8n-datatable.cjs +28 -0
- package/examples/morsof-invoice-history/observed-results.json +113 -0
- package/examples/morsof-invoice-history/prepare.mjs +57 -0
- package/examples/morsof-invoice-history/replay.mjs +35 -0
- package/examples/morsof-invoice-history/run.sh +19 -0
- package/examples/object-body/broken.json +74 -0
- package/examples/object-body/case.json +81 -0
- package/examples/object-body/fixed.json +74 -0
- package/examples/object-body/observed-results.json +449 -0
- package/examples/object-body/retry-case.json +112 -0
- package/examples/object-body/retry.json +77 -0
- package/examples/propfind-body/README.md +75 -0
- package/examples/propfind-body/case.json +51 -0
- package/examples/propfind-body/no-body-control.json +96 -0
- package/examples/propfind-body/observed-results.json +307 -0
- package/examples/propfind-body/workflow.json +96 -0
- package/examples/raw-response/README.md +71 -0
- package/examples/raw-response/file-case.json +54 -0
- package/examples/raw-response/json-body.json +58 -0
- package/examples/raw-response/json-case.json +52 -0
- package/examples/raw-response/observed-results.json +383 -0
- package/examples/raw-response/raw-file.json +88 -0
- package/examples/raw-response/raw-json.json +58 -0
- package/examples/raw-response/raw-text.json +58 -0
- package/examples/raw-response/text-case.json +50 -0
- package/examples/retry-isolation/README.md +71 -0
- package/examples/retry-isolation/direct-case.json +112 -0
- package/examples/retry-isolation/direct.json +101 -0
- package/examples/retry-isolation/editor-template.json +168 -0
- package/examples/retry-isolation/http-batching-case.json +112 -0
- package/examples/retry-isolation/http-batching.json +107 -0
- package/examples/retry-isolation/loop-case.json +117 -0
- package/examples/retry-isolation/loop.json +133 -0
- package/examples/retry-isolation/observed-results.json +155 -0
- package/examples/silent-filter/README.md +57 -0
- package/examples/silent-filter/broken.json +96 -0
- package/examples/silent-filter/case.json +120 -0
- package/examples/silent-filter/fixed.json +96 -0
- package/examples/silent-filter/observed-results.json +273 -0
- package/examples/stop-after/README.md +66 -0
- package/examples/stop-after/broken.json +134 -0
- package/examples/stop-after/case.json +34 -0
- package/examples/stop-after/fixed.json +134 -0
- package/examples/stop-after/observed-results.json +162 -0
- package/examples/version-matrix/README.md +65 -0
- package/examples/version-matrix/observed-results.json +307 -0
- package/examples/version-matrix/upgrade-check.yml +32 -0
- package/package.json +41 -4
- package/src/action.mjs +108 -0
- package/src/case-draft.mjs +163 -0
- package/src/mock.mjs +72 -0
- package/src/report.mjs +73 -0
- package/src/runner.mjs +111 -0
- package/src/version.mjs +3 -0
- package/src/workflow.mjs +140 -0
|
@@ -0,0 +1,806 @@
|
|
|
1
|
+
{
|
|
2
|
+
"recordedAtTimezone": "Asia/Shanghai",
|
|
3
|
+
"recordedDate": "2026-10-07",
|
|
4
|
+
"originalCommit": "0cbbac9c7c6e19f2b9f82bab57cf75a171279eac",
|
|
5
|
+
"patchedCommit": "b4e4332b57341f1afdb7a3be7a9069540b8a15f4",
|
|
6
|
+
"scope": "Real n8n downstream of the injected Parse entries boundary; synthetic environment and loopback HTTP responses.",
|
|
7
|
+
"runs": [
|
|
8
|
+
{
|
|
9
|
+
"name": "baseline",
|
|
10
|
+
"startedAt": "2026-10-06T17:21:52.576Z",
|
|
11
|
+
"n8nVersion": "2.41.7",
|
|
12
|
+
"nodeVersion": "v26.10.0",
|
|
13
|
+
"runnerVersion": "0.1.3",
|
|
14
|
+
"status": "failed",
|
|
15
|
+
"exitCode": 1,
|
|
16
|
+
"network": {
|
|
17
|
+
"mode": "loopback-only",
|
|
18
|
+
"enforced": true,
|
|
19
|
+
"interfaces": [
|
|
20
|
+
"lo"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"checks": [
|
|
24
|
+
{
|
|
25
|
+
"name": "n8n execution succeeds",
|
|
26
|
+
"passed": true,
|
|
27
|
+
"actual": {
|
|
28
|
+
"cliExitCode": 0,
|
|
29
|
+
"lastNode": "Call enrich API",
|
|
30
|
+
"executionFound": true
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "Build enrich request: output 0",
|
|
35
|
+
"passed": false,
|
|
36
|
+
"expected": [
|
|
37
|
+
{
|
|
38
|
+
"entry": {
|
|
39
|
+
"id": 101,
|
|
40
|
+
"url": "https://example.test/article-101",
|
|
41
|
+
"title": "Article 101"
|
|
42
|
+
},
|
|
43
|
+
"body": {
|
|
44
|
+
"entry_id": 101,
|
|
45
|
+
"canonical_url": "https://example.test/article-101",
|
|
46
|
+
"title": "Article 101"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"entry": {
|
|
51
|
+
"id": 102,
|
|
52
|
+
"url": "https://example.test/article-102",
|
|
53
|
+
"title": "Article 102"
|
|
54
|
+
},
|
|
55
|
+
"body": {
|
|
56
|
+
"entry_id": 102,
|
|
57
|
+
"canonical_url": "https://example.test/article-102",
|
|
58
|
+
"title": "Article 102"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"actual": [
|
|
63
|
+
{
|
|
64
|
+
"entry": {
|
|
65
|
+
"id": 101,
|
|
66
|
+
"url": "https://example.test/article-101",
|
|
67
|
+
"title": "Article 101"
|
|
68
|
+
},
|
|
69
|
+
"body": {
|
|
70
|
+
"entry_id": 101,
|
|
71
|
+
"canonical_url": "https://example.test/article-101",
|
|
72
|
+
"title": "Article 101"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"name": "mock: all requests match routes",
|
|
79
|
+
"passed": true,
|
|
80
|
+
"actual": []
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"name": "mock: request limits and server",
|
|
84
|
+
"passed": true,
|
|
85
|
+
"actual": []
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "Call enrich API: POST /api/private/articles/enrich request count",
|
|
89
|
+
"passed": false,
|
|
90
|
+
"expected": 2,
|
|
91
|
+
"actual": 1
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "Call enrich API: POST /api/private/articles/enrich request bodies",
|
|
95
|
+
"passed": false,
|
|
96
|
+
"expected": [
|
|
97
|
+
{
|
|
98
|
+
"entry_id": 101,
|
|
99
|
+
"canonical_url": "https://example.test/article-101",
|
|
100
|
+
"title": "Article 101"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"entry_id": 102,
|
|
104
|
+
"canonical_url": "https://example.test/article-102",
|
|
105
|
+
"title": "Article 102"
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"actual": [
|
|
109
|
+
{
|
|
110
|
+
"entry_id": 101,
|
|
111
|
+
"canonical_url": "https://example.test/article-101",
|
|
112
|
+
"title": "Article 101"
|
|
113
|
+
}
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"name": "Lookup bridge content: POST /d1/content request count",
|
|
118
|
+
"passed": true,
|
|
119
|
+
"expected": 0,
|
|
120
|
+
"actual": 0
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"name": "Claim alert: POST /d1/claim request count",
|
|
124
|
+
"passed": true,
|
|
125
|
+
"expected": 0,
|
|
126
|
+
"actual": 0
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"name": "Notify: POST /alert request count",
|
|
130
|
+
"passed": true,
|
|
131
|
+
"expected": 0,
|
|
132
|
+
"actual": 0
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
"requests": [
|
|
136
|
+
{
|
|
137
|
+
"node": "Call enrich API",
|
|
138
|
+
"method": "POST",
|
|
139
|
+
"path": "/api/private/articles/enrich",
|
|
140
|
+
"body": {
|
|
141
|
+
"entry_id": 101,
|
|
142
|
+
"canonical_url": "https://example.test/article-101",
|
|
143
|
+
"title": "Article 101"
|
|
144
|
+
},
|
|
145
|
+
"status": 200
|
|
146
|
+
}
|
|
147
|
+
],
|
|
148
|
+
"loopDoneItems": 0
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"name": "fixed-ordinary",
|
|
152
|
+
"startedAt": "2026-10-06T17:23:38.516Z",
|
|
153
|
+
"n8nVersion": "2.41.7",
|
|
154
|
+
"nodeVersion": "v26.10.0",
|
|
155
|
+
"runnerVersion": "0.1.3",
|
|
156
|
+
"status": "passed",
|
|
157
|
+
"exitCode": 0,
|
|
158
|
+
"network": {
|
|
159
|
+
"mode": "loopback-only",
|
|
160
|
+
"enforced": true,
|
|
161
|
+
"interfaces": [
|
|
162
|
+
"lo"
|
|
163
|
+
]
|
|
164
|
+
},
|
|
165
|
+
"checks": [
|
|
166
|
+
{
|
|
167
|
+
"name": "n8n execution succeeds",
|
|
168
|
+
"passed": true,
|
|
169
|
+
"actual": {
|
|
170
|
+
"cliExitCode": 0,
|
|
171
|
+
"lastNode": "Loop Articles",
|
|
172
|
+
"executionFound": true
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"name": "Build enrich request: output 0",
|
|
177
|
+
"passed": true,
|
|
178
|
+
"expected": [
|
|
179
|
+
{
|
|
180
|
+
"entry": {
|
|
181
|
+
"id": 101,
|
|
182
|
+
"url": "https://example.test/article-101",
|
|
183
|
+
"title": "Article 101"
|
|
184
|
+
},
|
|
185
|
+
"body": {
|
|
186
|
+
"entry_id": 101,
|
|
187
|
+
"canonical_url": "https://example.test/article-101",
|
|
188
|
+
"title": "Article 101"
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"entry": {
|
|
193
|
+
"id": 102,
|
|
194
|
+
"url": "https://example.test/article-102",
|
|
195
|
+
"title": "Article 102"
|
|
196
|
+
},
|
|
197
|
+
"body": {
|
|
198
|
+
"entry_id": 102,
|
|
199
|
+
"canonical_url": "https://example.test/article-102",
|
|
200
|
+
"title": "Article 102"
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
],
|
|
204
|
+
"actual": [
|
|
205
|
+
{
|
|
206
|
+
"entry": {
|
|
207
|
+
"id": 101,
|
|
208
|
+
"url": "https://example.test/article-101",
|
|
209
|
+
"title": "Article 101"
|
|
210
|
+
},
|
|
211
|
+
"body": {
|
|
212
|
+
"entry_id": 101,
|
|
213
|
+
"canonical_url": "https://example.test/article-101",
|
|
214
|
+
"title": "Article 101"
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"entry": {
|
|
219
|
+
"id": 102,
|
|
220
|
+
"url": "https://example.test/article-102",
|
|
221
|
+
"title": "Article 102"
|
|
222
|
+
},
|
|
223
|
+
"body": {
|
|
224
|
+
"entry_id": 102,
|
|
225
|
+
"canonical_url": "https://example.test/article-102",
|
|
226
|
+
"title": "Article 102"
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
]
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"name": "mock: all requests match routes",
|
|
233
|
+
"passed": true,
|
|
234
|
+
"actual": []
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"name": "mock: request limits and server",
|
|
238
|
+
"passed": true,
|
|
239
|
+
"actual": []
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"name": "Call enrich API: POST /api/private/articles/enrich request count",
|
|
243
|
+
"passed": true,
|
|
244
|
+
"expected": 2,
|
|
245
|
+
"actual": 2
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"name": "Call enrich API: POST /api/private/articles/enrich request bodies",
|
|
249
|
+
"passed": true,
|
|
250
|
+
"expected": [
|
|
251
|
+
{
|
|
252
|
+
"entry_id": 101,
|
|
253
|
+
"canonical_url": "https://example.test/article-101",
|
|
254
|
+
"title": "Article 101"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"entry_id": 102,
|
|
258
|
+
"canonical_url": "https://example.test/article-102",
|
|
259
|
+
"title": "Article 102"
|
|
260
|
+
}
|
|
261
|
+
],
|
|
262
|
+
"actual": [
|
|
263
|
+
{
|
|
264
|
+
"entry_id": 101,
|
|
265
|
+
"canonical_url": "https://example.test/article-101",
|
|
266
|
+
"title": "Article 101"
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"entry_id": 102,
|
|
270
|
+
"canonical_url": "https://example.test/article-102",
|
|
271
|
+
"title": "Article 102"
|
|
272
|
+
}
|
|
273
|
+
]
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"name": "Lookup bridge content: POST /d1/content request count",
|
|
277
|
+
"passed": true,
|
|
278
|
+
"expected": 0,
|
|
279
|
+
"actual": 0
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"name": "Claim alert: POST /d1/claim request count",
|
|
283
|
+
"passed": true,
|
|
284
|
+
"expected": 0,
|
|
285
|
+
"actual": 0
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"name": "Notify: POST /alert request count",
|
|
289
|
+
"passed": true,
|
|
290
|
+
"expected": 0,
|
|
291
|
+
"actual": 0
|
|
292
|
+
}
|
|
293
|
+
],
|
|
294
|
+
"requests": [
|
|
295
|
+
{
|
|
296
|
+
"node": "Call enrich API",
|
|
297
|
+
"method": "POST",
|
|
298
|
+
"path": "/api/private/articles/enrich",
|
|
299
|
+
"body": {
|
|
300
|
+
"entry_id": 101,
|
|
301
|
+
"canonical_url": "https://example.test/article-101",
|
|
302
|
+
"title": "Article 101"
|
|
303
|
+
},
|
|
304
|
+
"status": 200
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"node": "Call enrich API",
|
|
308
|
+
"method": "POST",
|
|
309
|
+
"path": "/api/private/articles/enrich",
|
|
310
|
+
"body": {
|
|
311
|
+
"entry_id": 102,
|
|
312
|
+
"canonical_url": "https://example.test/article-102",
|
|
313
|
+
"title": "Article 102"
|
|
314
|
+
},
|
|
315
|
+
"status": 200
|
|
316
|
+
}
|
|
317
|
+
],
|
|
318
|
+
"loopDoneItems": 2
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"name": "fixed-mixed",
|
|
322
|
+
"startedAt": "2026-10-06T17:23:48.107Z",
|
|
323
|
+
"n8nVersion": "2.41.7",
|
|
324
|
+
"nodeVersion": "v26.10.0",
|
|
325
|
+
"runnerVersion": "0.1.3",
|
|
326
|
+
"status": "passed",
|
|
327
|
+
"exitCode": 0,
|
|
328
|
+
"network": {
|
|
329
|
+
"mode": "loopback-only",
|
|
330
|
+
"enforced": true,
|
|
331
|
+
"interfaces": [
|
|
332
|
+
"lo"
|
|
333
|
+
]
|
|
334
|
+
},
|
|
335
|
+
"checks": [
|
|
336
|
+
{
|
|
337
|
+
"name": "n8n execution succeeds",
|
|
338
|
+
"passed": true,
|
|
339
|
+
"actual": {
|
|
340
|
+
"cliExitCode": 0,
|
|
341
|
+
"lastNode": "Loop Articles",
|
|
342
|
+
"executionFound": true
|
|
343
|
+
}
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"name": "Build enrich request: output 0",
|
|
347
|
+
"passed": true,
|
|
348
|
+
"expected": [
|
|
349
|
+
{
|
|
350
|
+
"entry": {
|
|
351
|
+
"id": 101,
|
|
352
|
+
"url": "https://example.test/article-101",
|
|
353
|
+
"title": "Article 101"
|
|
354
|
+
},
|
|
355
|
+
"body": {
|
|
356
|
+
"entry_id": 101,
|
|
357
|
+
"canonical_url": "https://example.test/article-101",
|
|
358
|
+
"title": "Article 101"
|
|
359
|
+
}
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"entry": {
|
|
363
|
+
"id": 102,
|
|
364
|
+
"url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000102",
|
|
365
|
+
"title": "Article 102"
|
|
366
|
+
},
|
|
367
|
+
"body": {
|
|
368
|
+
"entry_id": 102,
|
|
369
|
+
"canonical_url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000102",
|
|
370
|
+
"title": "Article 102",
|
|
371
|
+
"bridge_content": "<p>Content for 102</p>"
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"entry": {
|
|
376
|
+
"id": 103,
|
|
377
|
+
"url": "https://example.test/article-103",
|
|
378
|
+
"title": "Article 103"
|
|
379
|
+
},
|
|
380
|
+
"body": {
|
|
381
|
+
"entry_id": 103,
|
|
382
|
+
"canonical_url": "https://example.test/article-103",
|
|
383
|
+
"title": "Article 103"
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
"entry": {
|
|
388
|
+
"id": 104,
|
|
389
|
+
"url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000104",
|
|
390
|
+
"title": "Article 104"
|
|
391
|
+
},
|
|
392
|
+
"body": {
|
|
393
|
+
"entry_id": 104,
|
|
394
|
+
"canonical_url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000104",
|
|
395
|
+
"title": "Article 104",
|
|
396
|
+
"bridge_content": "<p>Content for 104</p>"
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
],
|
|
400
|
+
"actual": [
|
|
401
|
+
{
|
|
402
|
+
"entry": {
|
|
403
|
+
"id": 101,
|
|
404
|
+
"url": "https://example.test/article-101",
|
|
405
|
+
"title": "Article 101"
|
|
406
|
+
},
|
|
407
|
+
"body": {
|
|
408
|
+
"entry_id": 101,
|
|
409
|
+
"canonical_url": "https://example.test/article-101",
|
|
410
|
+
"title": "Article 101"
|
|
411
|
+
}
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"entry": {
|
|
415
|
+
"id": 102,
|
|
416
|
+
"url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000102",
|
|
417
|
+
"title": "Article 102"
|
|
418
|
+
},
|
|
419
|
+
"body": {
|
|
420
|
+
"entry_id": 102,
|
|
421
|
+
"canonical_url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000102",
|
|
422
|
+
"title": "Article 102",
|
|
423
|
+
"bridge_content": "<p>Content for 102</p>"
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"entry": {
|
|
428
|
+
"id": 103,
|
|
429
|
+
"url": "https://example.test/article-103",
|
|
430
|
+
"title": "Article 103"
|
|
431
|
+
},
|
|
432
|
+
"body": {
|
|
433
|
+
"entry_id": 103,
|
|
434
|
+
"canonical_url": "https://example.test/article-103",
|
|
435
|
+
"title": "Article 103"
|
|
436
|
+
}
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"entry": {
|
|
440
|
+
"id": 104,
|
|
441
|
+
"url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000104",
|
|
442
|
+
"title": "Article 104"
|
|
443
|
+
},
|
|
444
|
+
"body": {
|
|
445
|
+
"entry_id": 104,
|
|
446
|
+
"canonical_url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000104",
|
|
447
|
+
"title": "Article 104",
|
|
448
|
+
"bridge_content": "<p>Content for 104</p>"
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
]
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"name": "mock: all requests match routes",
|
|
455
|
+
"passed": true,
|
|
456
|
+
"actual": []
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
"name": "mock: request limits and server",
|
|
460
|
+
"passed": true,
|
|
461
|
+
"actual": []
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"name": "Call enrich API: POST /api/private/articles/enrich request count",
|
|
465
|
+
"passed": true,
|
|
466
|
+
"expected": 4,
|
|
467
|
+
"actual": 4
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
"name": "Call enrich API: POST /api/private/articles/enrich request bodies",
|
|
471
|
+
"passed": true,
|
|
472
|
+
"expected": [
|
|
473
|
+
{
|
|
474
|
+
"entry_id": 101,
|
|
475
|
+
"canonical_url": "https://example.test/article-101",
|
|
476
|
+
"title": "Article 101"
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
"entry_id": 102,
|
|
480
|
+
"canonical_url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000102",
|
|
481
|
+
"title": "Article 102",
|
|
482
|
+
"bridge_content": "<p>Content for 102</p>"
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
"entry_id": 103,
|
|
486
|
+
"canonical_url": "https://example.test/article-103",
|
|
487
|
+
"title": "Article 103"
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
"entry_id": 104,
|
|
491
|
+
"canonical_url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000104",
|
|
492
|
+
"title": "Article 104",
|
|
493
|
+
"bridge_content": "<p>Content for 104</p>"
|
|
494
|
+
}
|
|
495
|
+
],
|
|
496
|
+
"actual": [
|
|
497
|
+
{
|
|
498
|
+
"entry_id": 101,
|
|
499
|
+
"canonical_url": "https://example.test/article-101",
|
|
500
|
+
"title": "Article 101"
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
"entry_id": 102,
|
|
504
|
+
"canonical_url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000102",
|
|
505
|
+
"title": "Article 102",
|
|
506
|
+
"bridge_content": "<p>Content for 102</p>"
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
"entry_id": 103,
|
|
510
|
+
"canonical_url": "https://example.test/article-103",
|
|
511
|
+
"title": "Article 103"
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
"entry_id": 104,
|
|
515
|
+
"canonical_url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000104",
|
|
516
|
+
"title": "Article 104",
|
|
517
|
+
"bridge_content": "<p>Content for 104</p>"
|
|
518
|
+
}
|
|
519
|
+
]
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
"name": "Lookup bridge content: POST /d1/content request count",
|
|
523
|
+
"passed": true,
|
|
524
|
+
"expected": 2,
|
|
525
|
+
"actual": 2
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
"name": "Claim alert: POST /d1/claim request count",
|
|
529
|
+
"passed": true,
|
|
530
|
+
"expected": 0,
|
|
531
|
+
"actual": 0
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
"name": "Notify: POST /alert request count",
|
|
535
|
+
"passed": true,
|
|
536
|
+
"expected": 0,
|
|
537
|
+
"actual": 0
|
|
538
|
+
}
|
|
539
|
+
],
|
|
540
|
+
"requests": [
|
|
541
|
+
{
|
|
542
|
+
"node": "Call enrich API",
|
|
543
|
+
"method": "POST",
|
|
544
|
+
"path": "/api/private/articles/enrich",
|
|
545
|
+
"body": {
|
|
546
|
+
"entry_id": 101,
|
|
547
|
+
"canonical_url": "https://example.test/article-101",
|
|
548
|
+
"title": "Article 101"
|
|
549
|
+
},
|
|
550
|
+
"status": 200
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
"node": "Lookup bridge content",
|
|
554
|
+
"method": "POST",
|
|
555
|
+
"path": "/d1/content",
|
|
556
|
+
"body": {
|
|
557
|
+
"sql": "SELECT readable_content FROM entries WHERE permalink_uuid = ?",
|
|
558
|
+
"params": [
|
|
559
|
+
"00000000-0000-4000-8000-000000000102"
|
|
560
|
+
]
|
|
561
|
+
},
|
|
562
|
+
"status": 200
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
"node": "Call enrich API",
|
|
566
|
+
"method": "POST",
|
|
567
|
+
"path": "/api/private/articles/enrich",
|
|
568
|
+
"body": {
|
|
569
|
+
"entry_id": 102,
|
|
570
|
+
"canonical_url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000102",
|
|
571
|
+
"title": "Article 102",
|
|
572
|
+
"bridge_content": "<p>Content for 102</p>"
|
|
573
|
+
},
|
|
574
|
+
"status": 200
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
"node": "Call enrich API",
|
|
578
|
+
"method": "POST",
|
|
579
|
+
"path": "/api/private/articles/enrich",
|
|
580
|
+
"body": {
|
|
581
|
+
"entry_id": 103,
|
|
582
|
+
"canonical_url": "https://example.test/article-103",
|
|
583
|
+
"title": "Article 103"
|
|
584
|
+
},
|
|
585
|
+
"status": 200
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
"node": "Lookup bridge content",
|
|
589
|
+
"method": "POST",
|
|
590
|
+
"path": "/d1/content",
|
|
591
|
+
"body": {
|
|
592
|
+
"sql": "SELECT readable_content FROM entries WHERE permalink_uuid = ?",
|
|
593
|
+
"params": [
|
|
594
|
+
"00000000-0000-4000-8000-000000000104"
|
|
595
|
+
]
|
|
596
|
+
},
|
|
597
|
+
"status": 200
|
|
598
|
+
},
|
|
599
|
+
{
|
|
600
|
+
"node": "Call enrich API",
|
|
601
|
+
"method": "POST",
|
|
602
|
+
"path": "/api/private/articles/enrich",
|
|
603
|
+
"body": {
|
|
604
|
+
"entry_id": 104,
|
|
605
|
+
"canonical_url": "https://bridge.example.test/p/00000000-0000-4000-8000-000000000104",
|
|
606
|
+
"title": "Article 104",
|
|
607
|
+
"bridge_content": "<p>Content for 104</p>"
|
|
608
|
+
},
|
|
609
|
+
"status": 200
|
|
610
|
+
}
|
|
611
|
+
],
|
|
612
|
+
"loopDoneItems": 4
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
"name": "fixed-retry",
|
|
616
|
+
"startedAt": "2026-10-06T17:23:57.565Z",
|
|
617
|
+
"n8nVersion": "2.41.7",
|
|
618
|
+
"nodeVersion": "v26.10.0",
|
|
619
|
+
"runnerVersion": "0.1.3",
|
|
620
|
+
"status": "passed",
|
|
621
|
+
"exitCode": 0,
|
|
622
|
+
"network": {
|
|
623
|
+
"mode": "loopback-only",
|
|
624
|
+
"enforced": true,
|
|
625
|
+
"interfaces": [
|
|
626
|
+
"lo"
|
|
627
|
+
]
|
|
628
|
+
},
|
|
629
|
+
"checks": [
|
|
630
|
+
{
|
|
631
|
+
"name": "n8n execution succeeds",
|
|
632
|
+
"passed": true,
|
|
633
|
+
"actual": {
|
|
634
|
+
"cliExitCode": 0,
|
|
635
|
+
"lastNode": "Loop Articles",
|
|
636
|
+
"executionFound": true
|
|
637
|
+
}
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
"name": "Build enrich request: output 0",
|
|
641
|
+
"passed": true,
|
|
642
|
+
"expected": [
|
|
643
|
+
{
|
|
644
|
+
"entry": {
|
|
645
|
+
"id": 101,
|
|
646
|
+
"url": "https://example.test/article-101",
|
|
647
|
+
"title": "Article 101"
|
|
648
|
+
},
|
|
649
|
+
"body": {
|
|
650
|
+
"entry_id": 101,
|
|
651
|
+
"canonical_url": "https://example.test/article-101",
|
|
652
|
+
"title": "Article 101"
|
|
653
|
+
}
|
|
654
|
+
},
|
|
655
|
+
{
|
|
656
|
+
"entry": {
|
|
657
|
+
"id": 102,
|
|
658
|
+
"url": "https://example.test/article-102",
|
|
659
|
+
"title": "Article 102"
|
|
660
|
+
},
|
|
661
|
+
"body": {
|
|
662
|
+
"entry_id": 102,
|
|
663
|
+
"canonical_url": "https://example.test/article-102",
|
|
664
|
+
"title": "Article 102"
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
],
|
|
668
|
+
"actual": [
|
|
669
|
+
{
|
|
670
|
+
"entry": {
|
|
671
|
+
"id": 101,
|
|
672
|
+
"url": "https://example.test/article-101",
|
|
673
|
+
"title": "Article 101"
|
|
674
|
+
},
|
|
675
|
+
"body": {
|
|
676
|
+
"entry_id": 101,
|
|
677
|
+
"canonical_url": "https://example.test/article-101",
|
|
678
|
+
"title": "Article 101"
|
|
679
|
+
}
|
|
680
|
+
},
|
|
681
|
+
{
|
|
682
|
+
"entry": {
|
|
683
|
+
"id": 102,
|
|
684
|
+
"url": "https://example.test/article-102",
|
|
685
|
+
"title": "Article 102"
|
|
686
|
+
},
|
|
687
|
+
"body": {
|
|
688
|
+
"entry_id": 102,
|
|
689
|
+
"canonical_url": "https://example.test/article-102",
|
|
690
|
+
"title": "Article 102"
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
]
|
|
694
|
+
},
|
|
695
|
+
{
|
|
696
|
+
"name": "mock: all requests match routes",
|
|
697
|
+
"passed": true,
|
|
698
|
+
"actual": []
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
"name": "mock: request limits and server",
|
|
702
|
+
"passed": true,
|
|
703
|
+
"actual": []
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
"name": "Call enrich API: POST /api/private/articles/enrich request count",
|
|
707
|
+
"passed": true,
|
|
708
|
+
"expected": 3,
|
|
709
|
+
"actual": 3
|
|
710
|
+
},
|
|
711
|
+
{
|
|
712
|
+
"name": "Call enrich API: POST /api/private/articles/enrich request bodies",
|
|
713
|
+
"passed": true,
|
|
714
|
+
"expected": [
|
|
715
|
+
{
|
|
716
|
+
"entry_id": 101,
|
|
717
|
+
"canonical_url": "https://example.test/article-101",
|
|
718
|
+
"title": "Article 101"
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
"entry_id": 102,
|
|
722
|
+
"canonical_url": "https://example.test/article-102",
|
|
723
|
+
"title": "Article 102"
|
|
724
|
+
},
|
|
725
|
+
{
|
|
726
|
+
"entry_id": 102,
|
|
727
|
+
"canonical_url": "https://example.test/article-102",
|
|
728
|
+
"title": "Article 102"
|
|
729
|
+
}
|
|
730
|
+
],
|
|
731
|
+
"actual": [
|
|
732
|
+
{
|
|
733
|
+
"entry_id": 101,
|
|
734
|
+
"canonical_url": "https://example.test/article-101",
|
|
735
|
+
"title": "Article 101"
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
"entry_id": 102,
|
|
739
|
+
"canonical_url": "https://example.test/article-102",
|
|
740
|
+
"title": "Article 102"
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
"entry_id": 102,
|
|
744
|
+
"canonical_url": "https://example.test/article-102",
|
|
745
|
+
"title": "Article 102"
|
|
746
|
+
}
|
|
747
|
+
]
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
"name": "Lookup bridge content: POST /d1/content request count",
|
|
751
|
+
"passed": true,
|
|
752
|
+
"expected": 0,
|
|
753
|
+
"actual": 0
|
|
754
|
+
},
|
|
755
|
+
{
|
|
756
|
+
"name": "Claim alert: POST /d1/claim request count",
|
|
757
|
+
"passed": true,
|
|
758
|
+
"expected": 0,
|
|
759
|
+
"actual": 0
|
|
760
|
+
},
|
|
761
|
+
{
|
|
762
|
+
"name": "Notify: POST /alert request count",
|
|
763
|
+
"passed": true,
|
|
764
|
+
"expected": 0,
|
|
765
|
+
"actual": 0
|
|
766
|
+
}
|
|
767
|
+
],
|
|
768
|
+
"requests": [
|
|
769
|
+
{
|
|
770
|
+
"node": "Call enrich API",
|
|
771
|
+
"method": "POST",
|
|
772
|
+
"path": "/api/private/articles/enrich",
|
|
773
|
+
"body": {
|
|
774
|
+
"entry_id": 101,
|
|
775
|
+
"canonical_url": "https://example.test/article-101",
|
|
776
|
+
"title": "Article 101"
|
|
777
|
+
},
|
|
778
|
+
"status": 200
|
|
779
|
+
},
|
|
780
|
+
{
|
|
781
|
+
"node": "Call enrich API",
|
|
782
|
+
"method": "POST",
|
|
783
|
+
"path": "/api/private/articles/enrich",
|
|
784
|
+
"body": {
|
|
785
|
+
"entry_id": 102,
|
|
786
|
+
"canonical_url": "https://example.test/article-102",
|
|
787
|
+
"title": "Article 102"
|
|
788
|
+
},
|
|
789
|
+
"status": 503
|
|
790
|
+
},
|
|
791
|
+
{
|
|
792
|
+
"node": "Call enrich API",
|
|
793
|
+
"method": "POST",
|
|
794
|
+
"path": "/api/private/articles/enrich",
|
|
795
|
+
"body": {
|
|
796
|
+
"entry_id": 102,
|
|
797
|
+
"canonical_url": "https://example.test/article-102",
|
|
798
|
+
"title": "Article 102"
|
|
799
|
+
},
|
|
800
|
+
"status": 200
|
|
801
|
+
}
|
|
802
|
+
],
|
|
803
|
+
"loopDoneItems": 2
|
|
804
|
+
}
|
|
805
|
+
]
|
|
806
|
+
}
|