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  }