Files
n8n-enterprise-unlocked/packages/testing/playwright/tests/ui/evaluations.spec.ts
2025-09-05 09:51:28 +02:00

113 lines
4.3 KiB
TypeScript

import { expect, test } from '../../fixtures/base';
test.describe('Evaluations @capability:proxy', () => {
test.beforeEach(async ({ n8n, proxyServer }) => {
await proxyServer.clearAllExpectations();
await n8n.goHome();
await n8n.workflows.clickAddWorkflowButton();
});
test('should load evaluations workflow and execute twice', async ({ n8n, api, proxyServer }) => {
await proxyServer.loadExpectations('evaluations');
await api.credentialApi.createCredentialFromDefinition({
name: 'Test Google Sheets',
type: 'googleApi',
data: {
email: 'email@quickstart-1234.iam.gserviceaccount.com',
// mock private key
privateKey: `-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDx1//AaoSkyHYl
npqS3+uaePYhJXKD/T1h6zGThAUooN7ZzWK46nNcU1vghQMTlPMHfUTbl4xzZxEL
OYjyTPOKpwJvhmy44MU+zTQYJuUaU4dQuOCnnC61CL91Xy+8GJd7PvdUeVRWENWu
zzO825Fxeiy2qnbrOJfhYh+f9znwWM2R8/V6LIp1HSWNBU0h/NCesmVhGwTP2H/P
wGgFPzl9+effW8TgmAukVuZoG+z8pOiqJnZLgTOO++PLyM6UJe560UnAbv0yP4y5
lZ370XwOQ6gVIiB0+8Z2A3tJp6ackfoMfDYbuU+CAhFPqkdvXgbrYciUCr6fzINo
ImK6CcSDAgMBAAECggEAF0+XokdiI7QC11tzUMbuocQZDVbbs+c7/G08KRjnmmPv
NxU599L5baPHTlvj0QZhao5jjbsM2a7MkMVp8tkB/JJehLtzTVq1CHmlFNLi8Geu
ulQnq2A9jEuckMatBjdkmoeWNXlAbM9QmXn1ZbXQThzVpIHH1qJs2Veo7rVYy1bD
+hnzadyeXsHOC518wNAaF3b1UShybI3dlrHbXqqRmkOZP272IKfmvZ2KOcnFC+MT
cWLUGWBTq2YK+UJv09OXHEBnonrm18m2Sku+/PhFwjOiifIK/1MWILss60IB7dFm
7Fe7NAtYQMPZyDEqY5Xo+K4FwWYzfxfHPiJf7k0DqQKBgQD5Rz+HCZC8V5c1oK8/
1hGthyh5JdXxW7C8D1WVuo7W2OHrOJSDXjGhsxMjnKYdq/1YybJl9XpQSvZeumto
YazNiJqAexIlpmEHLW5gDtX3xpM0dujuJudTHYfveugtR8i/EZpWpFKv45/6Rm33
Yt2PaMjLuO7yW0buEjSQInHtHwKBgQD4XW44YujgF+xvMmx8+QyyNI2UNI1ZmnsU
VZLmDAn5+WDz5YtBXN9JGIXIk5279S7xzu9xyq7Ih6uedxE/hmzaHSZ1gl9Xasci
n86FGaGPm6RtEeZ8c68oqha7kddLoBwTPBoZq5NaCCaTh2TQkMPg+Ws3erM0pkyC
fqw1hzkYHQKBgQC2Iv3i3/VV+DXupCqIXRRrkx7abe/FO3aF4jppfXdSugNQR/YT
imZ/PIXWdmXVtk4VasIjx1oIgs1C57kE+qE1SAODrujSg5/Pi71jCFQEh54VLnEB
WYGZ9DDXpRkxxIqEOQtpFQWpqIrCZmWA5Ub3uttEJyrIADNyTfEEA3b0hwKBgHrn
STbQA2t5iz/PlQ4W9GhvRyxzAQu5PXTnj+UVSg6QkKDBE7NJsRjr8LA8FE9B2nRA
sg7+fJWxRYUKaNelvtIEoNZ/qIyKw3Zn3HvTHjcBj1GGDSfC24fk+5Dgb8j1t07x
a/0OAcIIzIYu9v2a1cPLyXnP10STksL0ymVGwEMlAoGBAK2dtYZllhooN/C4ssFW
nmfqICLWEc/UZSxmxau1rOz71GJiiHgXFmQgiZtpf3Qp3wKKtoFkf+sJ6zP2VX35
2tJcTO9lKm6kNa3eaveE/NJrkH5a0IpxrvDT1TvmnapaNEKuGZJAX5BNaggDrfEJ
m82JpEptTfAxFHtd8+Sb0U2G
-----END PRIVATE KEY-----`,
},
});
// Import the evaluations workflow
await n8n.canvas.importWorkflow('evaluations_loop.json', 'Evaluations');
// Open each node to ensure credentials are set
await n8n.canvas.openNode('When fetching a dataset row');
await n8n.page.keyboard.press('Escape');
// Open each node to ensure credentials are set
await n8n.canvas.openNode('Set outputs');
await n8n.page.keyboard.press('Escape');
// Execute workflow from canvas - first execution
await n8n.canvas.clickExecuteWorkflowButton();
// wait for first run to finish
await n8n.notifications.waitForNotificationAndClose('Successful', { timeout: 10000 });
// wait for second run to finish
await n8n.notifications.waitForNotificationAndClose('Successful', { timeout: 10000 });
// 💡 To update recordings, remove stored expectations, set real credentials above and rerecord here.
// await proxyServer.recordExpectations('evaluations', { host: 'google', dedupe: true });
const batchUpdateRequests = (await proxyServer.getAllRequestsMade()).filter((request) => {
const path = request.httpRequest?.path;
const method = request.httpRequest?.method;
return method === 'POST' && typeof path === 'string' && path.endsWith('/values:batchUpdate');
});
/**
* Original Table in Google Sheets
* The loop should execute twice over both rows here
* Incrementing each value by 1 (expression in Set Output node)
*
* name email actual
test test 10
hello wolrd 104
*/
// Set output node was called twice in a loop, updating Google sheets output value
expect(batchUpdateRequests.length).toEqual(2);
expect((batchUpdateRequests[0]?.httpRequest?.body as { json: object })?.json).toEqual({
data: [
{
range: 'Sheet2!C2',
values: [[11]],
},
],
valueInputOption: 'RAW',
});
expect((batchUpdateRequests[1]?.httpRequest?.body as { json: object })?.json).toEqual({
data: [
{
range: 'Sheet2!C3',
values: [[105]],
},
],
valueInputOption: 'RAW',
});
});
});