@@ -18,6 +18,7 @@ package blockers
1818
1919import (
2020 "context"
21+ "errors"
2122 "fmt"
2223 "reflect"
2324 "strconv"
@@ -435,11 +436,18 @@ func TestBlockers(t *testing.T) {
435436}
436437
437438type fakeGitHubClient struct {
438- lock sync.Mutex
439- queries map [string ][]string
439+ lock sync.Mutex
440+ queries map [string ][]string
441+ injectErr func (ctx context.Context , q interface {}, vars map [string ]interface {}, org string ) error
440442}
441443
442444func (fghc * fakeGitHubClient ) QueryWithGitHubAppsSupport (ctx context.Context , q interface {}, vars map [string ]interface {}, org string ) error {
445+ if fghc .injectErr != nil {
446+ if err := fghc .injectErr (ctx , q , vars , org ); err != nil {
447+ return err
448+ }
449+ }
450+
443451 if query := vars ["query" ]; query == nil || string (query .(githubql.String )) == "" {
444452 return fmt .Errorf ("query variable was unset, variables: %+v" , vars )
445453 }
@@ -461,37 +469,61 @@ func TestBlockersFindAll(t *testing.T) {
461469 orgRepoTokensByOrg := map [string ]string {
462470 "org-a" : `org:"org-a" -repo:"org-a/repo-b"` ,
463471 "org-b" : `org:"org-b" -repo:"org-b/repo-b"` ,
472+ "org-c" : `org:"org-c" -repo:"org-c/repo-c"` ,
464473 }
465474 const blockerLabel = "tide/merge-blocker"
466475 testCases := []struct {
467- name string
468- usesAppsAuth bool
469-
476+ name string
477+ usesAppsAuth bool
478+ injectQueryErr func ( ctx context. Context , q interface {}, vars map [ string ] interface {}, org string ) error
470479 expectedQueries map [string ][]string
480+ expectedErr error
471481 }{
472482 {
473483 name : "Apps auth, query is split by org" ,
474484 usesAppsAuth : true ,
475485 expectedQueries : map [string ][]string {
476486 "org-a" : {`-repo:"org-a/repo-b" is:issue label:"tide/merge-blocker" org:"org-a" state:open` },
477487 "org-b" : {`-repo:"org-b/repo-b" is:issue label:"tide/merge-blocker" org:"org-b" state:open` },
488+ "org-c" : {`-repo:"org-c/repo-c" is:issue label:"tide/merge-blocker" org:"org-c" state:open` },
478489 },
479490 },
480491 {
481492 name : "No apps auth, one query" ,
482493 usesAppsAuth : false ,
483494 expectedQueries : map [string ][]string {
484- "" : {`-repo:"org-a/repo-b" -repo:"org-b/repo-b" is:issue label:"tide/merge-blocker" org:"org-a" org:"org-b" state:open` },
495+ "" : {`-repo:"org-a/repo-b" -repo:"org-b/repo-b" -repo:"org-c/repo-c" is:issue label:"tide/merge-blocker" org:"org-a" org:"org-b" org:"org-c" state:open` },
496+ },
497+ },
498+ {
499+ name : "One org query fails, the other succeed" ,
500+ usesAppsAuth : true ,
501+ injectQueryErr : func (ctx context.Context , q interface {}, vars map [string ]interface {}, org string ) error {
502+ if org == "org-c" {
503+ return errors .New ("fault" )
504+ }
505+ return nil
506+ },
507+ expectedQueries : map [string ][]string {
508+ "org-a" : {`-repo:"org-a/repo-b" is:issue label:"tide/merge-blocker" org:"org-a" state:open` },
509+ "org-b" : {`-repo:"org-b/repo-b" is:issue label:"tide/merge-blocker" org:"org-b" state:open` },
485510 },
511+ expectedErr : & OrgError {},
486512 },
487513 }
488514
489515 for _ , tc := range testCases {
490516 t .Run (tc .name , func (t * testing.T ) {
491- ghc := & fakeGitHubClient {}
517+ ghc := & fakeGitHubClient {injectErr : tc . injectQueryErr }
492518
493519 if _ , err := FindAll (ghc , logrus .WithField ("tc" , tc .name ), blockerLabel , orgRepoTokensByOrg , tc .usesAppsAuth ); err != nil {
494- t .Fatalf ("FindAll: %v" , err )
520+ if tc .expectedErr != nil {
521+ if ! errors .Is (err , tc .expectedErr ) {
522+ t .Errorf ("want error %T but got %T" , tc .expectedErr , err )
523+ }
524+ } else {
525+ t .Fatalf ("FindAll: %v" , err )
526+ }
495527 }
496528
497529 if diff := cmp .Diff (ghc .queries , tc .expectedQueries , cmpopts .SortSlices (func (a , b string ) bool { return a < b })); diff != "" {
0 commit comments