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', }); }); });