@@ -937,3 +937,69 @@ func TestPullRequestsDecline_NotFound(t *testing.T) {
937937 assert .Error (t , err )
938938 assert .Nil (t , result )
939939}
940+ func TestBuildPullRequestBody_MergeStrategy (t * testing.T ) {
941+ t .Parallel ()
942+
943+ tests := map [string ]struct {
944+ strategy PullRequestsMergeStrategy
945+ expected string
946+ }{
947+ "MergeCommit" : {MergeCommit , "merge_commit" },
948+ "Squash" : {Squash , "squash" },
949+ "FastForward" : {FastForward , "fast_forward" },
950+ "SquashFastForward" : {SquashFastForward , "squash_fast_forward" },
951+ "RebaseFastForward" : {RebaseFastForward , "rebase_fast_forward" },
952+ "RebaseMerge" : {RebaseMerge , "rebase_merge" },
953+ }
954+
955+ for name , tc := range tests {
956+ t .Run (name , func (t * testing.T ) {
957+ t .Parallel ()
958+ pr := & PullRequests {}
959+ opts := & PullRequestsOptions {
960+ Title : "Merge Strategy" ,
961+ MergeStrategy : tc .strategy ,
962+ }
963+
964+ data , err := pr .buildPullRequestBody (opts )
965+ require .NoError (t , err )
966+
967+ var body map [string ]interface {}
968+ require .NoError (t , json .Unmarshal ([]byte (data ), & body ))
969+
970+ assert .Equal (t , tc .expected , body ["merge_strategy" ], "Strategy %s did not serialize correctly" , name )
971+ })
972+ }
973+ }
974+
975+ func TestPullRequestsMerge_WithStrategy (t * testing.T ) {
976+ t .Parallel ()
977+ var receivedBody map [string ]interface {}
978+
979+ client , server := setupMockServer (func (w http.ResponseWriter , r * http.Request ) {
980+ bodyBytes , _ := io .ReadAll (r .Body )
981+ _ = json .Unmarshal (bodyBytes , & receivedBody )
982+
983+ mergedPR := realisticPRResponse ()
984+ mergedPR ["state" ] = "MERGED"
985+ respondJSON (w , http .StatusOK , mergedPR )
986+ })
987+ defer server .Close ()
988+
989+ opts := & PullRequestsOptions {
990+ Owner : "owner" ,
991+ RepoSlug : "repo" ,
992+ ID : "1" ,
993+ MergeStrategy : FastForward ,
994+ Message : "Fast-forwarding this PR" ,
995+ }
996+
997+ result , err := client .Repositories .PullRequests .Merge (opts )
998+
999+ require .NoError (t , err )
1000+ assert .Equal (t , string (FastForward ), receivedBody ["merge_strategy" ])
1001+ assert .Equal (t , "Fast-forwarding this PR" , receivedBody ["message" ])
1002+
1003+ resultMap := result .(map [string ]interface {})
1004+ assert .Equal (t , "MERGED" , resultMap ["state" ])
1005+ }
0 commit comments