github.com/google/go-github/v33@v33.0.0/github/repos_traffic_test.go (about) 1 // Copyright 2016 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "context" 10 "fmt" 11 "net/http" 12 "reflect" 13 "testing" 14 "time" 15 ) 16 17 func TestRepositoriesService_ListTrafficReferrers(t *testing.T) { 18 client, mux, _, teardown := setup() 19 defer teardown() 20 21 mux.HandleFunc("/repos/o/r/traffic/popular/referrers", func(w http.ResponseWriter, r *http.Request) { 22 testMethod(t, r, "GET") 23 fmt.Fprintf(w, `[{ 24 "referrer": "Google", 25 "count": 4, 26 "uniques": 3 27 }]`) 28 }) 29 ctx := context.Background() 30 got, _, err := client.Repositories.ListTrafficReferrers(ctx, "o", "r") 31 if err != nil { 32 t.Errorf("Repositories.ListTrafficReferrers returned error: %+v", err) 33 } 34 35 want := []*TrafficReferrer{{ 36 Referrer: String("Google"), 37 Count: Int(4), 38 Uniques: Int(3), 39 }} 40 if !reflect.DeepEqual(got, want) { 41 t.Errorf("Repositories.ListTrafficReferrers returned %+v, want %+v", got, want) 42 } 43 44 // Test s.client.NewRequest failure 45 client.BaseURL.Path = "" 46 got, resp, err := client.Repositories.ListTrafficReferrers(ctx, "o", "r") 47 if got != nil { 48 t.Errorf("client.BaseURL.Path='' ListTrafficReferrers = %#v, want nil", got) 49 } 50 if resp != nil { 51 t.Errorf("client.BaseURL.Path='' ListTrafficReferrers resp = %#v, want nil", resp) 52 } 53 if err == nil { 54 t.Error("client.BaseURL.Path='' ListTrafficReferrers err = nil, want error") 55 } 56 57 // Test s.client.Do failure 58 client.BaseURL.Path = "/api-v3/" 59 client.rateLimits[0].Reset.Time = time.Now().Add(10 * time.Minute) 60 got, resp, err = client.Repositories.ListTrafficReferrers(ctx, "o", "r") 61 if got != nil { 62 t.Errorf("rate.Reset.Time > now ListTrafficReferrers = %#v, want nil", got) 63 } 64 if want := http.StatusForbidden; resp == nil || resp.Response.StatusCode != want { 65 t.Errorf("rate.Reset.Time > now ListTrafficReferrers resp = %#v, want StatusCode=%v", resp.Response, want) 66 } 67 if err == nil { 68 t.Error("rate.Reset.Time > now ListTrafficReferrers err = nil, want error") 69 } 70 } 71 72 func TestRepositoriesService_ListTrafficPaths(t *testing.T) { 73 client, mux, _, teardown := setup() 74 defer teardown() 75 76 mux.HandleFunc("/repos/o/r/traffic/popular/paths", func(w http.ResponseWriter, r *http.Request) { 77 testMethod(t, r, "GET") 78 fmt.Fprintf(w, `[{ 79 "path": "/github/hubot", 80 "title": "github/hubot: A customizable life embetterment robot.", 81 "count": 3542, 82 "uniques": 2225 83 }]`) 84 }) 85 ctx := context.Background() 86 got, _, err := client.Repositories.ListTrafficPaths(ctx, "o", "r") 87 if err != nil { 88 t.Errorf("Repositories.ListTrafficPaths returned error: %+v", err) 89 } 90 91 want := []*TrafficPath{{ 92 Path: String("/github/hubot"), 93 Title: String("github/hubot: A customizable life embetterment robot."), 94 Count: Int(3542), 95 Uniques: Int(2225), 96 }} 97 if !reflect.DeepEqual(got, want) { 98 t.Errorf("Repositories.ListTrafficPaths returned %+v, want %+v", got, want) 99 } 100 101 // Test s.client.NewRequest failure 102 client.BaseURL.Path = "" 103 got, resp, err := client.Repositories.ListTrafficPaths(ctx, "o", "r") 104 if got != nil { 105 t.Errorf("client.BaseURL.Path='' ListTrafficPaths = %#v, want nil", got) 106 } 107 if resp != nil { 108 t.Errorf("client.BaseURL.Path='' ListTrafficPaths resp = %#v, want nil", resp) 109 } 110 if err == nil { 111 t.Error("client.BaseURL.Path='' ListTrafficPaths err = nil, want error") 112 } 113 114 // Test s.client.Do failure 115 client.BaseURL.Path = "/api-v3/" 116 client.rateLimits[0].Reset.Time = time.Now().Add(10 * time.Minute) 117 got, resp, err = client.Repositories.ListTrafficPaths(ctx, "o", "r") 118 if got != nil { 119 t.Errorf("rate.Reset.Time > now ListTrafficPaths = %#v, want nil", got) 120 } 121 if want := http.StatusForbidden; resp == nil || resp.Response.StatusCode != want { 122 t.Errorf("rate.Reset.Time > now ListTrafficPaths resp = %#v, want StatusCode=%v", resp.Response, want) 123 } 124 if err == nil { 125 t.Error("rate.Reset.Time > now ListTrafficPaths err = nil, want error") 126 } 127 } 128 129 func TestRepositoriesService_ListTrafficViews(t *testing.T) { 130 client, mux, _, teardown := setup() 131 defer teardown() 132 133 mux.HandleFunc("/repos/o/r/traffic/views", func(w http.ResponseWriter, r *http.Request) { 134 testMethod(t, r, "GET") 135 fmt.Fprintf(w, `{"count": 7, 136 "uniques": 6, 137 "views": [{ 138 "timestamp": "2016-05-31T16:00:00.000Z", 139 "count": 7, 140 "uniques": 6 141 }]}`) 142 }) 143 144 ctx := context.Background() 145 got, _, err := client.Repositories.ListTrafficViews(ctx, "o", "r", nil) 146 if err != nil { 147 t.Errorf("Repositories.ListTrafficViews returned error: %+v", err) 148 } 149 150 want := &TrafficViews{ 151 Views: []*TrafficData{{ 152 Timestamp: &Timestamp{time.Date(2016, time.May, 31, 16, 0, 0, 0, time.UTC)}, 153 Count: Int(7), 154 Uniques: Int(6), 155 }}, 156 Count: Int(7), 157 Uniques: Int(6), 158 } 159 160 if !reflect.DeepEqual(got, want) { 161 t.Errorf("Repositories.ListTrafficViews returned %+v, want %+v", got, want) 162 } 163 164 // Test addOptions failure 165 _, _, err = client.Repositories.ListTrafficViews(ctx, "\n", "\n", &TrafficBreakdownOptions{}) 166 if err == nil { 167 t.Error("bad options ListTrafficViews err = nil, want error") 168 } 169 170 // Test s.client.NewRequest failure 171 client.BaseURL.Path = "" 172 got, resp, err := client.Repositories.ListTrafficViews(ctx, "o", "r", nil) 173 if got != nil { 174 t.Errorf("client.BaseURL.Path='' ListTrafficViews = %#v, want nil", got) 175 } 176 if resp != nil { 177 t.Errorf("client.BaseURL.Path='' ListTrafficViews resp = %#v, want nil", resp) 178 } 179 if err == nil { 180 t.Error("client.BaseURL.Path='' ListTrafficViews err = nil, want error") 181 } 182 183 // Test s.client.Do failure 184 client.BaseURL.Path = "/api-v3/" 185 client.rateLimits[0].Reset.Time = time.Now().Add(10 * time.Minute) 186 got, resp, err = client.Repositories.ListTrafficViews(ctx, "o", "r", nil) 187 if got != nil { 188 t.Errorf("rate.Reset.Time > now ListTrafficViews = %#v, want nil", got) 189 } 190 if want := http.StatusForbidden; resp == nil || resp.Response.StatusCode != want { 191 t.Errorf("rate.Reset.Time > now ListTrafficViews resp = %#v, want StatusCode=%v", resp.Response, want) 192 } 193 if err == nil { 194 t.Error("rate.Reset.Time > now ListTrafficViews err = nil, want error") 195 } 196 } 197 198 func TestRepositoriesService_ListTrafficClones(t *testing.T) { 199 client, mux, _, teardown := setup() 200 defer teardown() 201 202 mux.HandleFunc("/repos/o/r/traffic/clones", func(w http.ResponseWriter, r *http.Request) { 203 testMethod(t, r, "GET") 204 fmt.Fprintf(w, `{"count": 7, 205 "uniques": 6, 206 "clones": [{ 207 "timestamp": "2016-05-31T16:00:00.00Z", 208 "count": 7, 209 "uniques": 6 210 }]}`) 211 }) 212 213 ctx := context.Background() 214 got, _, err := client.Repositories.ListTrafficClones(ctx, "o", "r", nil) 215 if err != nil { 216 t.Errorf("Repositories.ListTrafficClones returned error: %+v", err) 217 } 218 219 want := &TrafficClones{ 220 Clones: []*TrafficData{{ 221 Timestamp: &Timestamp{time.Date(2016, time.May, 31, 16, 0, 0, 0, time.UTC)}, 222 Count: Int(7), 223 Uniques: Int(6), 224 }}, 225 Count: Int(7), 226 Uniques: Int(6), 227 } 228 229 if !reflect.DeepEqual(got, want) { 230 t.Errorf("Repositories.ListTrafficClones returned %+v, want %+v", got, want) 231 } 232 233 // Test addOptions failure 234 _, _, err = client.Repositories.ListTrafficClones(ctx, "\n", "\n", &TrafficBreakdownOptions{}) 235 if err == nil { 236 t.Error("bad options ListTrafficViews err = nil, want error") 237 } 238 239 // Test s.client.NewRequest failure 240 client.BaseURL.Path = "" 241 got, resp, err := client.Repositories.ListTrafficClones(ctx, "o", "r", nil) 242 if got != nil { 243 t.Errorf("client.BaseURL.Path='' ListTrafficClones = %#v, want nil", got) 244 } 245 if resp != nil { 246 t.Errorf("client.BaseURL.Path='' ListTrafficClones resp = %#v, want nil", resp) 247 } 248 if err == nil { 249 t.Error("client.BaseURL.Path='' ListTrafficClones err = nil, want error") 250 } 251 252 // Test s.client.Do failure 253 client.BaseURL.Path = "/api-v3/" 254 client.rateLimits[0].Reset.Time = time.Now().Add(10 * time.Minute) 255 got, resp, err = client.Repositories.ListTrafficClones(ctx, "o", "r", nil) 256 if got != nil { 257 t.Errorf("rate.Reset.Time > now ListTrafficClones = %#v, want nil", got) 258 } 259 if want := http.StatusForbidden; resp == nil || resp.Response.StatusCode != want { 260 t.Errorf("rate.Reset.Time > now ListTrafficClones resp = %#v, want StatusCode=%v", resp.Response, want) 261 } 262 if err == nil { 263 t.Error("rate.Reset.Time > now ListTrafficClones err = nil, want error") 264 } 265 }