diff --git a/ui/src/lib/workspace-routines.test.ts b/ui/src/lib/workspace-routines.test.ts index e40fa456565..383ce566d80 100644 --- a/ui/src/lib/workspace-routines.test.ts +++ b/ui/src/lib/workspace-routines.test.ts @@ -139,4 +139,19 @@ describe("workspace routine helpers", () => { otherWorkspaces: [noProjectRoutine, otherProjectRoutine], }); }); + + it("does not treat company-wide routines as current-workspace routines when the workspace has no project", () => { + const noProjectRoutine = createRoutine({ + id: "routine-no-project", + projectId: null, + variables: [ + { name: "workspaceBranch", label: null, type: "text", defaultValue: null, required: true, options: [] }, + ], + }); + + expect(groupWorkspaceSpecificRoutines([noProjectRoutine], null)).toEqual({ + thisWorkspace: [], + otherWorkspaces: [noProjectRoutine], + }); + }); }); diff --git a/ui/src/lib/workspace-routines.ts b/ui/src/lib/workspace-routines.ts index a901c029054..70b0d4e16c0 100644 --- a/ui/src/lib/workspace-routines.ts +++ b/ui/src/lib/workspace-routines.ts @@ -55,7 +55,7 @@ export function groupWorkspaceSpecificRoutines( for (const routine of routines) { if (!routineHasWorkspaceSpecificVariables(routine)) continue; - if (routine.projectId === currentProjectId) { + if (currentProjectId !== null && routine.projectId === currentProjectId) { groups.thisWorkspace.push(routine); } else { groups.otherWorkspaces.push(routine); diff --git a/ui/src/pages/ExecutionWorkspaceDetail.test.tsx b/ui/src/pages/ExecutionWorkspaceDetail.test.tsx index ba8c0e73c3b..4004b595684 100644 --- a/ui/src/pages/ExecutionWorkspaceDetail.test.tsx +++ b/ui/src/pages/ExecutionWorkspaceDetail.test.tsx @@ -237,12 +237,13 @@ async function flush() { await new Promise((resolve) => setTimeout(resolve, 0)); } -async function waitForCondition(condition: () => boolean) { - for (let index = 0; index < 20; index += 1) { +async function waitForCondition(condition: () => boolean, timeoutMs = 2000) { + const startedAt = Date.now(); + while (Date.now() - startedAt < timeoutMs) { if (condition()) return; await flush(); } - expect(condition()).toBe(true); + expect(condition(), `condition did not become true within ${timeoutMs}ms`).toBe(true); } describe("ExecutionWorkspaceDetail plugin slots", () => {