diff --git a/packages/source-control-azure-devops/src/server/AzureDevOpsSourceControlProvider.test.ts b/packages/source-control-azure-devops/src/server/AzureDevOpsSourceControlProvider.test.ts index 70f0ce906fe4..5b4e8e91c436 100644 --- a/packages/source-control-azure-devops/src/server/AzureDevOpsSourceControlProvider.test.ts +++ b/packages/source-control-azure-devops/src/server/AzureDevOpsSourceControlProvider.test.ts @@ -1,8 +1,11 @@ import { processOutput } from "@t3tools/source-control-testing/TestSourceControlHost"; import { assert, it } from "@effect/vitest"; +import * as Effect from "effect/Effect"; +import * as Layer from "effect/Layer"; import * as Option from "effect/Option"; import { ChildProcessSpawner } from "effect/process"; +import * as AzureDevOpsCli from "./AzureDevOpsCli.ts"; import * as AzureDevOpsSourceControlProvider from "./AzureDevOpsSourceControlProvider.ts"; const { parseAuth } = AzureDevOpsSourceControlProvider.discovery; @@ -25,3 +28,18 @@ it("reads the signed-in Azure account and says when az is signed out", () => { ); assert.strictEqual(parseAuth(processOutput("\n")).status, "unknown"); }); + +it.effect( + "looks up a branch's pull requests a full page at a time, past forks' same-named branches", + () => + Effect.gen(function* () { + const provider = yield* AzureDevOpsSourceControlProvider.make; + assert.deepStrictEqual( + provider.headBranchProbe?.({ + headSelectors: ["octocat:feature", "feature"], + state: "open", + }), + { headSelectors: ["feature"], limit: 100 }, + ); + }).pipe(Effect.provide(Layer.mock(AzureDevOpsCli.AzureDevOpsCli)({}))), +); diff --git a/packages/source-control-azure-devops/src/server/AzureDevOpsSourceControlProvider.ts b/packages/source-control-azure-devops/src/server/AzureDevOpsSourceControlProvider.ts index 64c1ada9bc13..c63fa639f2de 100644 --- a/packages/source-control-azure-devops/src/server/AzureDevOpsSourceControlProvider.ts +++ b/packages/source-control-azure-devops/src/server/AzureDevOpsSourceControlProvider.ts @@ -76,6 +76,11 @@ export const make = Effect.gen(function* () { return SourceControlProvider.SourceControlProvider.of({ kind: SourceControlProviderKind.make("azure-devops"), + // Azure lists fork pull requests by source branch with no owner filter, so read a full page. + headBranchProbe: ({ headSelectors }) => ({ + headSelectors: headSelectors.filter((selector) => !selector.includes(":")), + limit: 100, + }), listChangeRequests: Effect.fn("AzureDevOpsSourceControlProvider.listChangeRequests")( function (input) { const source = SourceControlProvider.sourceControlRefFromInput(input);