@@ -49,6 +49,54 @@ describe("NewTaskLinkResolver", () => {
4949 expect ( result . analytics . properties . has_prompt ) . toBe ( true ) ;
5050 } ) ;
5151
52+ it . each ( [
53+ {
54+ name : "one pull request" ,
55+ prompt :
56+ '<github_pr number="12" title="Fix it" url="https://github.com/acme/web/pull/12" />' ,
57+ expected : "acme/web" ,
58+ } ,
59+ {
60+ name : "several pull requests from one repository" ,
61+ prompt :
62+ '<github_pr number="12" url="https://github.com/acme/web/pull/12" />\n<github_pr number="13" url="https://github.com/acme/web/pull/13" />' ,
63+ expected : "acme/web" ,
64+ } ,
65+ {
66+ name : "pull requests from different repositories" ,
67+ prompt :
68+ '<github_pr number="12" url="https://github.com/acme/web/pull/12" />\n<github_pr number="4" url="https://github.com/acme/api/pull/4" />' ,
69+ expected : undefined ,
70+ } ,
71+ {
72+ name : "an ordinary prompt" ,
73+ prompt : "fix the tests" ,
74+ expected : undefined ,
75+ } ,
76+ ] ) ( "infers the repository for $name" , async ( { prompt, expected } ) => {
77+ const resolver = makeResolver ( vi . fn ( ) ) ;
78+
79+ const result = await resolver . resolve ( { action : "new" , prompt } ) ;
80+
81+ if ( result . kind !== "navigate" ) throw new Error ( "expected navigate" ) ;
82+ expect ( result . navigation . initialCloudRepository ) . toBe ( expected ) ;
83+ } ) ;
84+
85+ it ( "prefers an explicit repository over the pull request prompt" , async ( ) => {
86+ const resolver = makeResolver ( vi . fn ( ) ) ;
87+ const prompt =
88+ '<github_pr number="12" url="https://github.com/acme/web/pull/12" />' ;
89+
90+ const result = await resolver . resolve ( {
91+ action : "new" ,
92+ prompt,
93+ repo : "acme/api" ,
94+ } ) ;
95+
96+ if ( result . kind !== "navigate" ) throw new Error ( "expected navigate" ) ;
97+ expect ( result . navigation . initialCloudRepository ) . toBe ( "acme/api" ) ;
98+ } ) ;
99+
52100 it ( "uses the decoded plan as the prompt for a plan-action payload" , async ( ) => {
53101 const resolver = makeResolver ( vi . fn ( ) ) ;
54102 const payload : NewTaskLinkPayload = { action : "plan" , plan : "step one" } ;
0 commit comments