@@ -169,3 +169,58 @@ func TestMergeStackAsync_OmitsEmptyMethod(t *testing.T) {
169169 _ , hasMethod := parsed ["merge_method" ]
170170 assert .False (t , hasMethod , "merge_method should be omitted when empty" )
171171}
172+
173+ // testPolicyClient builds a Client whose GraphQL client is backed by a stub
174+ // transport returning the given response body.
175+ func testPolicyClient (t * testing.T , graphqlResp string ) * Client {
176+ t .Helper ()
177+ rt := roundTripFunc (func (r * http.Request ) (* http.Response , error ) {
178+ return & http.Response {
179+ StatusCode : http .StatusOK ,
180+ Body : io .NopCloser (strings .NewReader (graphqlResp )),
181+ Header : http.Header {"Content-Type" : []string {"application/json" }},
182+ Request : r ,
183+ }, nil
184+ })
185+ gql , err := api .NewGraphQLClient (api.ClientOptions {Host : "github.com" , AuthToken : "x" , Transport : rt })
186+ require .NoError (t , err )
187+ return & Client {gql : gql , owner : "o" , repo : "r" }
188+ }
189+
190+ func TestBaseBranchPolicy (t * testing.T ) {
191+ tests := []struct {
192+ name string
193+ body string
194+ wantQueue bool
195+ }{
196+ {
197+ name : "no merge queue" ,
198+ body : `{"data":{"repository":{"mergeQueue":null,"ref":{"rules":{"nodes":[]}}}}}` ,
199+ },
200+ {
201+ name : "merge queue via mergeQueue field" ,
202+ body : `{"data":{"repository":{"mergeQueue":{"id":"MQ"},"ref":{"rules":{"nodes":[]}}}}}` ,
203+ wantQueue : true ,
204+ },
205+ {
206+ name : "merge queue via ruleset type" ,
207+ body : `{"data":{"repository":{"mergeQueue":null,"ref":{"rules":{"nodes":[{"type":"MERGE_QUEUE"}]}}}}}` ,
208+ wantQueue : true ,
209+ },
210+ {
211+ name : "other rules, no merge queue" ,
212+ body : `{"data":{"repository":{"mergeQueue":null,"ref":{"rules":{"nodes":[{"type":"PULL_REQUEST"}]}}}}}` ,
213+ },
214+ {
215+ name : "null ref" ,
216+ body : `{"data":{"repository":{"mergeQueue":null,"ref":null}}}` ,
217+ },
218+ }
219+ for _ , tt := range tests {
220+ t .Run (tt .name , func (t * testing.T ) {
221+ policy , err := testPolicyClient (t , tt .body ).BaseBranchPolicy ("main" )
222+ require .NoError (t , err )
223+ assert .Equal (t , tt .wantQueue , policy .RequiresMergeQueue , "RequiresMergeQueue" )
224+ })
225+ }
226+ }
0 commit comments