github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/api/queries_pr_test.go (about) 1 package api 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/ungtb10d/cli/v2/internal/ghrepo" 8 "github.com/ungtb10d/cli/v2/pkg/httpmock" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestBranchDeleteRemote(t *testing.T) { 13 var tests = []struct { 14 name string 15 branch string 16 httpStubs func(*httpmock.Registry) 17 expectError bool 18 }{ 19 { 20 name: "success", 21 branch: "owner/branch#123", 22 httpStubs: func(reg *httpmock.Registry) { 23 reg.Register( 24 httpmock.REST("DELETE", "repos/OWNER/REPO/git/refs/heads/owner%2Fbranch%23123"), 25 httpmock.StatusStringResponse(204, "")) 26 }, 27 expectError: false, 28 }, 29 { 30 name: "error", 31 branch: "my-branch", 32 httpStubs: func(reg *httpmock.Registry) { 33 reg.Register( 34 httpmock.REST("DELETE", "repos/OWNER/REPO/git/refs/heads/my-branch"), 35 httpmock.StatusStringResponse(500, `{"message": "oh no"}`)) 36 }, 37 expectError: true, 38 }, 39 } 40 41 for _, tt := range tests { 42 t.Run(tt.name, func(t *testing.T) { 43 http := &httpmock.Registry{} 44 if tt.httpStubs != nil { 45 tt.httpStubs(http) 46 } 47 48 client := newTestClient(http) 49 repo, _ := ghrepo.FromFullName("OWNER/REPO") 50 51 err := BranchDeleteRemote(client, repo, tt.branch) 52 if (err != nil) != tt.expectError { 53 t.Fatalf("unexpected result: %v", err) 54 } 55 }) 56 } 57 } 58 59 func Test_Logins(t *testing.T) { 60 rr := ReviewRequests{} 61 var tests = []struct { 62 name string 63 requestedReviews string 64 want []string 65 }{ 66 { 67 name: "no requested reviewers", 68 requestedReviews: `{"nodes": []}`, 69 want: []string{}, 70 }, 71 { 72 name: "user", 73 requestedReviews: `{"nodes": [ 74 { 75 "requestedreviewer": { 76 "__typename": "User", "login": "testuser" 77 } 78 } 79 ]}`, 80 want: []string{"testuser"}, 81 }, 82 { 83 name: "team", 84 requestedReviews: `{"nodes": [ 85 { 86 "requestedreviewer": { 87 "__typename": "Team", 88 "name": "Test Team", 89 "slug": "test-team", 90 "organization": {"login": "myorg"} 91 } 92 } 93 ]}`, 94 want: []string{"myorg/test-team"}, 95 }, 96 { 97 name: "multiple users and teams", 98 requestedReviews: `{"nodes": [ 99 { 100 "requestedreviewer": { 101 "__typename": "User", "login": "user1" 102 } 103 }, 104 { 105 "requestedreviewer": { 106 "__typename": "User", "login": "user2" 107 } 108 }, 109 { 110 "requestedreviewer": { 111 "__typename": "Team", 112 "name": "Test Team", 113 "slug": "test-team", 114 "organization": {"login": "myorg"} 115 } 116 }, 117 { 118 "requestedreviewer": { 119 "__typename": "Team", 120 "name": "Dev Team", 121 "slug": "dev-team", 122 "organization": {"login": "myorg"} 123 } 124 } 125 ]}`, 126 want: []string{"user1", "user2", "myorg/test-team", "myorg/dev-team"}, 127 }, 128 } 129 130 for _, tt := range tests { 131 t.Run(tt.name, func(t *testing.T) { 132 err := json.Unmarshal([]byte(tt.requestedReviews), &rr) 133 assert.NoError(t, err, "Failed to unmarshal json string as ReviewRequests") 134 logins := rr.Logins() 135 assert.Equal(t, tt.want, logins) 136 }) 137 } 138 }