fix(tests): iteration 11
This commit is contained in:
@@ -1,4 +1,8 @@
|
|||||||
import { test as base, expect, type Page } from '@playwright/test';
|
import { test as base, expect, type Page } from '@playwright/test';
|
||||||
|
import {
|
||||||
|
buildCreateAgentPreferences,
|
||||||
|
buildSeededHost,
|
||||||
|
} from './helpers/daemon-registry';
|
||||||
|
|
||||||
// Extend base test to provide dynamic baseURL from global-setup
|
// Extend base test to provide dynamic baseURL from global-setup
|
||||||
const test = base.extend({
|
const test = base.extend({
|
||||||
@@ -58,31 +62,12 @@ test.beforeEach(async ({ page }) => {
|
|||||||
if (!serverId) {
|
if (!serverId) {
|
||||||
throw new Error('E2E_SERVER_ID is not set - expected from Playwright globalSetup.');
|
throw new Error('E2E_SERVER_ID is not set - expected from Playwright globalSetup.');
|
||||||
}
|
}
|
||||||
const testDaemon = {
|
const testDaemon = buildSeededHost({
|
||||||
serverId,
|
serverId,
|
||||||
label: 'localhost',
|
endpoint: `127.0.0.1:${daemonPort}`,
|
||||||
connections: [
|
nowIso,
|
||||||
{
|
});
|
||||||
id: `direct:127.0.0.1:${daemonPort}`,
|
const createAgentPreferences = buildCreateAgentPreferences(testDaemon.serverId);
|
||||||
type: 'direct',
|
|
||||||
endpoint: `127.0.0.1:${daemonPort}`,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
preferredConnectionId: `direct:127.0.0.1:${daemonPort}`,
|
|
||||||
createdAt: nowIso,
|
|
||||||
updatedAt: nowIso,
|
|
||||||
};
|
|
||||||
|
|
||||||
const createAgentPreferences = {
|
|
||||||
// Ensure create flow never uses a remembered host from the developer's real app.
|
|
||||||
serverId: testDaemon.serverId,
|
|
||||||
// Keep e2e fast/cheap by default.
|
|
||||||
provider: 'codex',
|
|
||||||
providerPreferences: {
|
|
||||||
claude: { model: 'haiku' },
|
|
||||||
codex: { model: 'gpt-5.1-codex-mini', thinkingOptionId: 'low' },
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
await page.addInitScript(
|
await page.addInitScript(
|
||||||
({ daemon, preferences, seedNonce }) => {
|
({ daemon, preferences, seedNonce }) => {
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
import { expect, type Page } from '@playwright/test';
|
import { expect, type Page } from '@playwright/test';
|
||||||
|
import {
|
||||||
|
buildCreateAgentPreferences,
|
||||||
|
buildSeededHost,
|
||||||
|
} from './daemon-registry';
|
||||||
|
|
||||||
function escapeRegex(value: string): string {
|
function escapeRegex(value: string): string {
|
||||||
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||||
@@ -33,8 +37,8 @@ async function ensureE2EStorageSeeded(page: Page): Promise<void> {
|
|||||||
if (entry?.serverId !== expectedServerId) return true;
|
if (entry?.serverId !== expectedServerId) return true;
|
||||||
const connections = entry?.connections;
|
const connections = entry?.connections;
|
||||||
if (!Array.isArray(connections)) return true;
|
if (!Array.isArray(connections)) return true;
|
||||||
if (connections.some((c: any) => c?.type === 'direct' && typeof c?.endpoint === 'string' && /:6767\b/.test(c.endpoint))) return true;
|
if (connections.some((c: any) => c?.type === 'directTcp' && typeof c?.endpoint === 'string' && /:6767\b/.test(c.endpoint))) return true;
|
||||||
return !connections.some((c: any) => c?.type === 'direct' && c?.endpoint === expectedEndpoint);
|
return !connections.some((c: any) => c?.type === 'directTcp' && c?.endpoint === expectedEndpoint);
|
||||||
} catch {
|
} catch {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -45,42 +49,20 @@ async function ensureE2EStorageSeeded(page: Page): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const nowIso = new Date().toISOString();
|
const nowIso = new Date().toISOString();
|
||||||
|
const daemon = buildSeededHost({
|
||||||
|
serverId: expectedServerId,
|
||||||
|
endpoint: expectedEndpoint,
|
||||||
|
nowIso,
|
||||||
|
});
|
||||||
|
const preferences = buildCreateAgentPreferences(expectedServerId);
|
||||||
await page.evaluate(
|
await page.evaluate(
|
||||||
({ expectedEndpoint, nowIso, expectedServerId }) => {
|
({ daemon, preferences }) => {
|
||||||
localStorage.setItem('@paseo:e2e', '1');
|
localStorage.setItem('@paseo:e2e', '1');
|
||||||
localStorage.setItem(
|
localStorage.setItem('@paseo:daemon-registry', JSON.stringify([daemon]));
|
||||||
'@paseo:daemon-registry',
|
localStorage.setItem('@paseo:create-agent-preferences', JSON.stringify(preferences));
|
||||||
JSON.stringify([
|
|
||||||
{
|
|
||||||
serverId: expectedServerId,
|
|
||||||
label: 'localhost',
|
|
||||||
connections: [
|
|
||||||
{
|
|
||||||
id: `direct:${expectedEndpoint}`,
|
|
||||||
type: 'direct',
|
|
||||||
endpoint: expectedEndpoint,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
preferredConnectionId: `direct:${expectedEndpoint}`,
|
|
||||||
createdAt: nowIso,
|
|
||||||
updatedAt: nowIso,
|
|
||||||
},
|
|
||||||
])
|
|
||||||
);
|
|
||||||
localStorage.setItem(
|
|
||||||
'@paseo:create-agent-preferences',
|
|
||||||
JSON.stringify({
|
|
||||||
serverId: expectedServerId,
|
|
||||||
provider: 'codex',
|
|
||||||
providerPreferences: {
|
|
||||||
claude: { model: 'haiku' },
|
|
||||||
codex: { model: 'gpt-5.1-codex-mini', thinkingOptionId: 'low' },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
);
|
|
||||||
localStorage.removeItem('@paseo:settings');
|
localStorage.removeItem('@paseo:settings');
|
||||||
},
|
},
|
||||||
{ expectedEndpoint, nowIso, expectedServerId }
|
{ daemon, preferences }
|
||||||
);
|
);
|
||||||
|
|
||||||
await page.reload();
|
await page.reload();
|
||||||
@@ -128,13 +110,13 @@ async function assertE2EUsesSeededTestDaemon(page: Page): Promise<void> {
|
|||||||
const connections: unknown = daemon?.connections;
|
const connections: unknown = daemon?.connections;
|
||||||
if (
|
if (
|
||||||
!Array.isArray(connections) ||
|
!Array.isArray(connections) ||
|
||||||
!connections.some((c: any) => c?.type === 'direct' && c?.endpoint === expectedEndpoint)
|
!connections.some((c: any) => c?.type === 'directTcp' && c?.endpoint === expectedEndpoint)
|
||||||
) {
|
) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`E2E expected seeded daemon connections to include direct ${expectedEndpoint} (got ${JSON.stringify(connections)}).`
|
`E2E expected seeded daemon connections to include directTcp ${expectedEndpoint} (got ${JSON.stringify(connections)}).`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (Array.isArray(connections) && connections.some((c: any) => c?.type === 'direct' && typeof c?.endpoint === 'string' && /:6767\b/.test(c.endpoint))) {
|
if (Array.isArray(connections) && connections.some((c: any) => c?.type === 'directTcp' && typeof c?.endpoint === 'string' && /:6767\b/.test(c.endpoint))) {
|
||||||
throw new Error(`E2E detected a daemon endpoint pointing at :6767 (${JSON.stringify(connections)}).`);
|
throw new Error(`E2E detected a daemon endpoint pointing at :6767 (${JSON.stringify(connections)}).`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
export const TEST_HOST_LABEL = "localhost";
|
||||||
|
|
||||||
|
export const TEST_PROVIDER_PREFERENCES = {
|
||||||
|
claude: { model: "haiku" },
|
||||||
|
codex: { model: "gpt-5.1-codex-mini", thinkingOptionId: "low" },
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export function buildDirectTcpConnection(endpoint: string) {
|
||||||
|
return {
|
||||||
|
id: `direct:${endpoint}`,
|
||||||
|
type: "directTcp" as const,
|
||||||
|
endpoint,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function buildSeededHost(input: {
|
||||||
|
serverId: string;
|
||||||
|
endpoint: string;
|
||||||
|
label?: string;
|
||||||
|
nowIso: string;
|
||||||
|
}) {
|
||||||
|
const connection = buildDirectTcpConnection(input.endpoint);
|
||||||
|
return {
|
||||||
|
serverId: input.serverId,
|
||||||
|
label: input.label ?? TEST_HOST_LABEL,
|
||||||
|
connections: [connection],
|
||||||
|
preferredConnectionId: connection.id,
|
||||||
|
createdAt: input.nowIso,
|
||||||
|
updatedAt: input.nowIso,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function buildCreateAgentPreferences(serverId: string) {
|
||||||
|
return {
|
||||||
|
serverId,
|
||||||
|
provider: "codex" as const,
|
||||||
|
providerPreferences: TEST_PROVIDER_PREFERENCES,
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user