@@ -477,7 +477,7 @@ func TestLink_BranchNames_AllNeedPRs(t *testing.T) {
477477 assert .Contains (t , output , "Created stack with 3 PRs" )
478478}
479479
480- func TestLink_BranchNames_DraftFlag (t * testing.T ) {
480+ func TestLink_BranchNames_DefaultDraft (t * testing.T ) {
481481 restore := git .SetOps (newLinkGitMock ("feat-a" , "feat-b" ))
482482 defer restore ()
483483
@@ -512,13 +512,120 @@ func TestLink_BranchNames_DraftFlag(t *testing.T) {
512512 }
513513
514514 cmd := LinkCmd (cfg )
515- cmd .SetArgs ([]string {"--draft" , "feat-a" , "feat-b" })
515+ cmd .SetArgs ([]string {"feat-a" , "feat-b" })
516+ cmd .SetOut (io .Discard )
517+ cmd .SetErr (io .Discard )
518+ err := cmd .Execute ()
519+
520+ assert .NoError (t , err )
521+ assert .True (t , createdDraft , "PRs should be created as drafts by default" )
522+ }
523+
524+ func TestLink_BranchNames_OpenFlag (t * testing.T ) {
525+ restore := git .SetOps (newLinkGitMock ("feat-a" , "feat-b" ))
526+ defer restore ()
527+
528+ var createdDraft bool
529+ prCounter := 0
530+
531+ cfg , _ , _ := config .NewTestConfig ()
532+ cfg .GitHubClientOverride = & github.MockClient {
533+ FindPRForBranchFn : func (branch string ) (* github.PullRequest , error ) {
534+ return nil , nil
535+ },
536+ FindPRByNumberFn : func (n int ) (* github.PullRequest , error ) {
537+ heads := map [int ]string {1 : "feat-a" , 2 : "feat-b" }
538+ bases := map [int ]string {1 : "main" , 2 : "feat-a" }
539+ if h , ok := heads [n ]; ok {
540+ return & github.PullRequest {Number : n , HeadRefName : h , BaseRefName : bases [n ]}, nil
541+ }
542+ return nil , nil
543+ },
544+ CreatePRFn : func (base , head , title , body string , draft bool ) (* github.PullRequest , error ) {
545+ createdDraft = draft
546+ prCounter ++
547+ return & github.PullRequest {
548+ Number : prCounter , HeadRefName : head , BaseRefName : base ,
549+ URL : fmt .Sprintf ("https://github.com/o/r/pull/%d" , prCounter ),
550+ }, nil
551+ },
552+ ListStacksFn : func () ([]github.RemoteStack , error ) {
553+ return []github.RemoteStack {}, nil
554+ },
555+ CreateStackFn : func ([]int ) (int , error ) { return 1 , nil },
556+ }
557+
558+ cmd := LinkCmd (cfg )
559+ cmd .SetArgs ([]string {"--open" , "feat-a" , "feat-b" })
560+ cmd .SetOut (io .Discard )
561+ cmd .SetErr (io .Discard )
562+ err := cmd .Execute ()
563+
564+ assert .NoError (t , err )
565+ assert .False (t , createdDraft , "PRs should not be created as drafts when --open is set" )
566+ }
567+
568+ func TestLink_OpenFlag_ConvertsDraftPRs (t * testing.T ) {
569+ restore := git .SetOps (newLinkGitMock ("feat-a" , "feat-b" ))
570+ defer restore ()
571+
572+ var markedReady []string
573+
574+ cfg , _ , errR := config .NewTestConfig ()
575+ cfg .GitHubClientOverride = & github.MockClient {
576+ FindPRForBranchFn : func (branch string ) (* github.PullRequest , error ) {
577+ switch branch {
578+ case "feat-a" :
579+ return & github.PullRequest {
580+ Number : 1 , ID : "PR_1" , HeadRefName : "feat-a" , BaseRefName : "main" ,
581+ IsDraft : true , URL : "https://github.com/o/r/pull/1" ,
582+ }, nil
583+ case "feat-b" :
584+ return & github.PullRequest {
585+ Number : 2 , ID : "PR_2" , HeadRefName : "feat-b" , BaseRefName : "feat-a" ,
586+ IsDraft : true , URL : "https://github.com/o/r/pull/2" ,
587+ }, nil
588+ }
589+ return nil , nil
590+ },
591+ FindPRByNumberFn : func (n int ) (* github.PullRequest , error ) {
592+ switch n {
593+ case 1 :
594+ return & github.PullRequest {
595+ Number : 1 , ID : "PR_1" , HeadRefName : "feat-a" , BaseRefName : "main" ,
596+ IsDraft : true , URL : "https://github.com/o/r/pull/1" ,
597+ }, nil
598+ case 2 :
599+ return & github.PullRequest {
600+ Number : 2 , ID : "PR_2" , HeadRefName : "feat-b" , BaseRefName : "feat-a" ,
601+ IsDraft : true , URL : "https://github.com/o/r/pull/2" ,
602+ }, nil
603+ }
604+ return nil , nil
605+ },
606+ MarkPRReadyForReviewFn : func (prID string ) error {
607+ markedReady = append (markedReady , prID )
608+ return nil
609+ },
610+ ListStacksFn : func () ([]github.RemoteStack , error ) {
611+ return []github.RemoteStack {}, nil
612+ },
613+ CreateStackFn : func ([]int ) (int , error ) { return 1 , nil },
614+ }
615+
616+ cmd := LinkCmd (cfg )
617+ cmd .SetArgs ([]string {"--open" , "feat-a" , "feat-b" })
516618 cmd .SetOut (io .Discard )
517619 cmd .SetErr (io .Discard )
518620 err := cmd .Execute ()
519621
622+ cfg .Err .Close ()
623+ errOut , _ := io .ReadAll (errR )
624+ output := string (errOut )
625+
520626 assert .NoError (t , err )
521- assert .True (t , createdDraft , "PRs should be created as drafts when --draft is set" )
627+ assert .Equal (t , []string {"PR_1" , "PR_2" }, markedReady , "both draft PRs should be marked ready" )
628+ assert .Contains (t , output , "Marked PR" )
522629}
523630
524631func TestLink_MixedArgs_PRNumberAndBranch (t * testing.T ) {
0 commit comments