first commit
Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
import type { BrowserContext, Route } from '@playwright/test';
|
||||
import cloneDeep from 'lodash/cloneDeep';
|
||||
import merge from 'lodash/merge';
|
||||
|
||||
const contextSettings = new Map<BrowserContext, Partial<Record<string, unknown>>>();
|
||||
|
||||
export function setContextSettings(
|
||||
context: BrowserContext,
|
||||
settings: Partial<Record<string, unknown>>,
|
||||
) {
|
||||
contextSettings.set(context, settings);
|
||||
}
|
||||
|
||||
export function getContextSettings(context: BrowserContext) {
|
||||
return contextSettings.get(context);
|
||||
}
|
||||
|
||||
export async function setupDefaultInterceptors(target: BrowserContext) {
|
||||
// Global /rest/settings intercept - always active like Cypress
|
||||
// TODO: Remove this as a global and move it per test
|
||||
await target.route('**/rest/settings', async (route: Route) => {
|
||||
try {
|
||||
const originalResponse = await route.fetch();
|
||||
const originalJson = await originalResponse.json();
|
||||
|
||||
// Get settings stored for this specific context
|
||||
const testSettings = getContextSettings(target);
|
||||
|
||||
// Deep merge test settings with backend settings (like Cypress)
|
||||
const modifiedData = {
|
||||
data:
|
||||
testSettings && Object.keys(testSettings).length > 0
|
||||
? merge(cloneDeep(originalJson.data), testSettings)
|
||||
: originalJson.data,
|
||||
};
|
||||
|
||||
await route.fulfill({
|
||||
status: originalResponse.status(),
|
||||
headers: originalResponse.headers(),
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify(modifiedData),
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error in /rest/settings intercept:', error);
|
||||
await route.continue();
|
||||
}
|
||||
});
|
||||
|
||||
// POST /rest/credentials/test
|
||||
await target.route('**/rest/credentials/test', async (route: Route) => {
|
||||
if (route.request().method() === 'POST') {
|
||||
await route.fulfill({
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify({ data: { status: 'success', message: 'Tested successfully' } }),
|
||||
});
|
||||
} else {
|
||||
await route.continue();
|
||||
}
|
||||
});
|
||||
|
||||
// POST /rest/license/renew
|
||||
await target.route('**/rest/license/renew', async (route: Route) => {
|
||||
if (route.request().method() === 'POST') {
|
||||
await route.fulfill({
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify({
|
||||
data: {
|
||||
usage: { activeWorkflowTriggers: { limit: -1, value: 0, warningThreshold: 0.8 } },
|
||||
license: { planId: '', planName: 'Community' },
|
||||
},
|
||||
}),
|
||||
});
|
||||
} else {
|
||||
await route.continue();
|
||||
}
|
||||
});
|
||||
|
||||
// Pathname /api/health
|
||||
await target.route(
|
||||
(url) => url.pathname.endsWith('/api/health'),
|
||||
async (route: Route) => {
|
||||
await route.fulfill({
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify({ status: 'OK' }),
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
// Pathname /api/versions/*
|
||||
await target.route(
|
||||
(url) => url.pathname.startsWith('/api/versions/'),
|
||||
async (route: Route) => {
|
||||
await route.fulfill({
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify([
|
||||
{
|
||||
name: '1.45.1',
|
||||
createdAt: '2023-08-18T11:53:12.857Z',
|
||||
hasSecurityIssue: null,
|
||||
hasSecurityFix: null,
|
||||
securityIssueFixVersion: null,
|
||||
hasBreakingChange: null,
|
||||
documentationUrl: 'https://docs.n8n.io/release-notes/#n8n131',
|
||||
nodes: [],
|
||||
description: 'Includes <strong>bug fixes</strong>',
|
||||
},
|
||||
{
|
||||
name: '1.0.5',
|
||||
createdAt: '2023-07-24T10:54:56.097Z',
|
||||
hasSecurityIssue: false,
|
||||
hasSecurityFix: null,
|
||||
securityIssueFixVersion: null,
|
||||
hasBreakingChange: true,
|
||||
documentationUrl: 'https://docs.n8n.io/release-notes/#n8n104',
|
||||
nodes: [],
|
||||
description:
|
||||
'Includes <strong>core functionality</strong> and <strong>bug fixes</strong>',
|
||||
},
|
||||
]),
|
||||
});
|
||||
},
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user