fix code queue enqueue view preservation
This commit is contained in:
+55
-2
@@ -564,12 +564,14 @@ function isCodeQueueTaskEnqueueRequest(url: string, method: string): boolean {
|
||||
|
||||
async function runCodeQueueEnqueueAwaitSmoke(page: Page): Promise<any> {
|
||||
const marker = `e2e-await-enqueue-${Date.now()}-${Math.random().toString(16).slice(2, 8)}`;
|
||||
const submitQueueId = "e2e-submit-smoke";
|
||||
const prompt = [
|
||||
`Code Queue await enqueue smoke ${marker}`,
|
||||
"",
|
||||
"This task is created by the frontend E2E smoke test to verify that the enqueue submit path awaits the backend response before unlocking the form.",
|
||||
].join("\n");
|
||||
let delayedPostCount = 0;
|
||||
const taskOverviewRequests: string[] = [];
|
||||
const routePattern = "**/api/microservices/code-queue/proxy/api/tasks**";
|
||||
const routeHandler = async (route: any, request: any): Promise<void> => {
|
||||
if (!isCodeQueueTaskEnqueueRequest(request.url(), request.method())) {
|
||||
@@ -580,11 +582,39 @@ async function runCodeQueueEnqueueAwaitSmoke(page: Page): Promise<any> {
|
||||
await new Promise((resolve) => setTimeout(resolve, 900));
|
||||
await route.continue();
|
||||
};
|
||||
const onRequest = (request: any): void => {
|
||||
try {
|
||||
const parsed = new URL(request.url());
|
||||
if (request.method() === "GET" && parsed.pathname === "/api/microservices/code-queue/proxy/api/tasks/overview") {
|
||||
taskOverviewRequests.push(parsed.search);
|
||||
}
|
||||
} catch {
|
||||
// ignore non-URL requests
|
||||
}
|
||||
};
|
||||
|
||||
page.on("request", onRequest);
|
||||
await page.route(routePattern, routeHandler);
|
||||
try {
|
||||
await page.getByTestId("code-queue-filter-select").selectOption("__all__").catch(() => undefined);
|
||||
await page.getByTestId("code-queue-id-select").selectOption("default").catch(() => undefined);
|
||||
page.once("dialog", (dialog) => { void dialog.accept(submitQueueId); });
|
||||
await page.getByTestId("codex-create-queue-button").click();
|
||||
await page.waitForFunction((queueId) => {
|
||||
const select = document.querySelector('[data-testid="code-queue-id-select"]') as HTMLSelectElement | null;
|
||||
const filter = document.querySelector('[data-testid="code-queue-filter-select"]') as HTMLSelectElement | null;
|
||||
return select?.value === queueId && filter?.value === queueId && Array.from(select?.options || []).some((option) => option.value === queueId);
|
||||
}, submitQueueId, { timeout: 10000 });
|
||||
await page.getByTestId("code-queue-filter-select").selectOption("__all__").catch(() => undefined);
|
||||
await page.getByTestId("code-queue-id-select").selectOption(submitQueueId);
|
||||
taskOverviewRequests.length = 0;
|
||||
const beforeSubmitView = await page.evaluate(() => {
|
||||
const filter = document.querySelector('[data-testid="code-queue-filter-select"]') as HTMLSelectElement | null;
|
||||
const submitQueue = document.querySelector('[data-testid="code-queue-id-select"]') as HTMLSelectElement | null;
|
||||
return {
|
||||
filterValue: filter?.value || "",
|
||||
submitQueueValue: submitQueue?.value || "",
|
||||
};
|
||||
});
|
||||
await page.getByTestId("codex-max-attempts-input").fill("1");
|
||||
await page.getByTestId("codex-repeat-count-input").fill("1");
|
||||
await page.locator('[data-testid="code-queue-task-form"] textarea').fill(prompt);
|
||||
@@ -626,6 +656,10 @@ async function runCodeQueueEnqueueAwaitSmoke(page: Page): Promise<any> {
|
||||
const textarea = document.querySelector('[data-testid="code-queue-task-form"] textarea') as HTMLTextAreaElement | null;
|
||||
const notice = document.querySelector('[data-testid="codex-create-success"]') as HTMLElement | null;
|
||||
const card = document.querySelector(`[data-testid="codex-task-${CSS.escape(String(id))}"]`) as HTMLElement | null;
|
||||
const filter = document.querySelector('[data-testid="code-queue-filter-select"]') as HTMLSelectElement | null;
|
||||
const submitQueue = document.querySelector('[data-testid="code-queue-id-select"]') as HTMLSelectElement | null;
|
||||
const sessionPanel = document.querySelector('.codex-output-panel') as HTMLElement | null;
|
||||
const cards = Array.from(document.querySelectorAll('[data-testid^="codex-task-codex_"]')).map((node) => (node as HTMLElement).innerText);
|
||||
return {
|
||||
formBusy: form?.getAttribute("aria-busy") === "true",
|
||||
waitMissing: wait === null,
|
||||
@@ -634,6 +668,10 @@ async function runCodeQueueEnqueueAwaitSmoke(page: Page): Promise<any> {
|
||||
textareaEmpty: (textarea?.value || "") === "",
|
||||
noticeText: notice?.textContent || "",
|
||||
cardVisible: Boolean(card && card.offsetParent !== null),
|
||||
filterValue: filter?.value || "",
|
||||
submitQueueValue: submitQueue?.value || "",
|
||||
selectedTraceHasTask: Boolean(sessionPanel && (sessionPanel.textContent || "").includes(String(id))),
|
||||
allVisibleCardsRespectFilter: filter?.value === "__all__" || cards.every((text) => text.includes(`queue=${filter?.value || ""}`)),
|
||||
};
|
||||
}, taskId);
|
||||
const storedTask = await page.evaluate(async (id) => {
|
||||
@@ -663,11 +701,15 @@ async function runCodeQueueEnqueueAwaitSmoke(page: Page): Promise<any> {
|
||||
}
|
||||
})();
|
||||
await page.getByTestId("codex-max-attempts-input").fill("99").catch(() => undefined);
|
||||
const afterSubmitOverviewRequests = taskOverviewRequests.slice();
|
||||
return {
|
||||
checked: true,
|
||||
marker,
|
||||
submitQueueId,
|
||||
delayedPostCount,
|
||||
requestBody,
|
||||
afterSubmitOverviewRequests,
|
||||
postSubmitSubmitQueueOverviewRequestCount: afterSubmitOverviewRequests.filter((search) => search.includes(`queueId=${encodeURIComponent(submitQueueId)}`)).length,
|
||||
responseStatus: response.status(),
|
||||
responseOk: response.ok(),
|
||||
responseBody: {
|
||||
@@ -675,6 +717,7 @@ async function runCodeQueueEnqueueAwaitSmoke(page: Page): Promise<any> {
|
||||
taskIds: Array.isArray(responseBody?.tasks) ? responseBody.tasks.map((task: any) => String(task?.id || "")).filter(Boolean) : [],
|
||||
},
|
||||
taskId,
|
||||
beforeSubmitView,
|
||||
duringAwait,
|
||||
afterAwait,
|
||||
storedTask: {
|
||||
@@ -695,6 +738,7 @@ async function runCodeQueueEnqueueAwaitSmoke(page: Page): Promise<any> {
|
||||
};
|
||||
} finally {
|
||||
await page.unroute(routePattern, routeHandler).catch(() => undefined);
|
||||
page.off("request", onRequest);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2800,6 +2844,7 @@ async function frontendCheck(config: UniDeskConfig, urls: PublicUrls, checks: E2
|
||||
&& codeQueueEnqueueAwaitSmoke.responseOk === true
|
||||
&& codeQueueEnqueueAwaitSmoke.responseStatus === 202
|
||||
&& /^codex_\d+_[A-Za-z0-9_-]+$/u.test(String(codeQueueEnqueueAwaitSmoke.taskId || ""))
|
||||
&& codeQueueEnqueueAwaitSmoke.submitQueueId === "e2e-submit-smoke"
|
||||
&& codeQueueEnqueueAwaitSmoke.duringAwait?.formBusy === true
|
||||
&& codeQueueEnqueueAwaitSmoke.duringAwait?.waitVisible === true
|
||||
&& codeQueueEnqueueAwaitSmoke.duringAwait?.buttonDisabled === true
|
||||
@@ -2807,9 +2852,17 @@ async function frontendCheck(config: UniDeskConfig, urls: PublicUrls, checks: E2
|
||||
&& codeQueueEnqueueAwaitSmoke.afterAwait?.formBusy === false
|
||||
&& codeQueueEnqueueAwaitSmoke.afterAwait?.waitMissing === true
|
||||
&& codeQueueEnqueueAwaitSmoke.afterAwait?.textareaEmpty === true
|
||||
&& codeQueueEnqueueAwaitSmoke.beforeSubmitView?.filterValue === "__all__"
|
||||
&& codeQueueEnqueueAwaitSmoke.afterAwait?.filterValue === codeQueueEnqueueAwaitSmoke.beforeSubmitView?.filterValue
|
||||
&& codeQueueEnqueueAwaitSmoke.afterAwait?.submitQueueValue === codeQueueEnqueueAwaitSmoke.beforeSubmitView?.submitQueueValue
|
||||
&& codeQueueEnqueueAwaitSmoke.beforeSubmitView?.submitQueueValue === codeQueueEnqueueAwaitSmoke.submitQueueId
|
||||
&& Number(codeQueueEnqueueAwaitSmoke.postSubmitSubmitQueueOverviewRequestCount || 0) === 0
|
||||
&& codeQueueEnqueueAwaitSmoke.afterAwait?.cardVisible === true
|
||||
&& codeQueueEnqueueAwaitSmoke.afterAwait?.selectedTraceHasTask === true
|
||||
&& codeQueueEnqueueAwaitSmoke.afterAwait?.allVisibleCardsRespectFilter === true
|
||||
&& codeQueueEnqueueAwaitSmoke.storedTask?.ok === true
|
||||
&& codeQueueEnqueueAwaitSmoke.storedTask?.id === codeQueueEnqueueAwaitSmoke.taskId
|
||||
&& codeQueueEnqueueAwaitSmoke.storedTask?.queueId === "default"
|
||||
&& codeQueueEnqueueAwaitSmoke.storedTask?.queueId === codeQueueEnqueueAwaitSmoke.submitQueueId
|
||||
&& codeQueueEnqueueAwaitSmoke.storedTask?.promptIncludesMarker === true
|
||||
&& (codeQueueEnqueueAwaitSmoke.interrupt?.ok === true || codeQueueEnqueueAwaitSmoke.interrupt?.status === 409),
|
||||
{ codeQueueEnqueueAwaitSmoke });
|
||||
|
||||
Reference in New Issue
Block a user