github.com/google/go-github/v33@v33.0.0/github/repos_hooks_test.go (about)

     1  // Copyright 2013 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  	"encoding/json"
    11  	"fmt"
    12  	"net/http"
    13  	"reflect"
    14  	"testing"
    15  )
    16  
    17  func TestRepositoriesService_CreateHook(t *testing.T) {
    18  	client, mux, _, teardown := setup()
    19  	defer teardown()
    20  
    21  	input := &Hook{CreatedAt: &referenceTime}
    22  
    23  	mux.HandleFunc("/repos/o/r/hooks", func(w http.ResponseWriter, r *http.Request) {
    24  		v := new(createHookRequest)
    25  		json.NewDecoder(r.Body).Decode(v)
    26  
    27  		testMethod(t, r, "POST")
    28  		want := &createHookRequest{Name: "web"}
    29  		if !reflect.DeepEqual(v, want) {
    30  			t.Errorf("Request body = %+v, want %+v", v, want)
    31  		}
    32  
    33  		fmt.Fprint(w, `{"id":1}`)
    34  	})
    35  
    36  	hook, _, err := client.Repositories.CreateHook(context.Background(), "o", "r", input)
    37  	if err != nil {
    38  		t.Errorf("Repositories.CreateHook returned error: %v", err)
    39  	}
    40  
    41  	want := &Hook{ID: Int64(1)}
    42  	if !reflect.DeepEqual(hook, want) {
    43  		t.Errorf("Repositories.CreateHook returned %+v, want %+v", hook, want)
    44  	}
    45  }
    46  
    47  func TestRepositoriesService_ListHooks(t *testing.T) {
    48  	client, mux, _, teardown := setup()
    49  	defer teardown()
    50  
    51  	mux.HandleFunc("/repos/o/r/hooks", func(w http.ResponseWriter, r *http.Request) {
    52  		testMethod(t, r, "GET")
    53  		testFormValues(t, r, values{"page": "2"})
    54  		fmt.Fprint(w, `[{"id":1}, {"id":2}]`)
    55  	})
    56  
    57  	opt := &ListOptions{Page: 2}
    58  
    59  	hooks, _, err := client.Repositories.ListHooks(context.Background(), "o", "r", opt)
    60  	if err != nil {
    61  		t.Errorf("Repositories.ListHooks returned error: %v", err)
    62  	}
    63  
    64  	want := []*Hook{{ID: Int64(1)}, {ID: Int64(2)}}
    65  	if !reflect.DeepEqual(hooks, want) {
    66  		t.Errorf("Repositories.ListHooks returned %+v, want %+v", hooks, want)
    67  	}
    68  }
    69  
    70  func TestRepositoriesService_ListHooks_invalidOwner(t *testing.T) {
    71  	client, _, _, teardown := setup()
    72  	defer teardown()
    73  
    74  	_, _, err := client.Repositories.ListHooks(context.Background(), "%", "%", nil)
    75  	testURLParseError(t, err)
    76  }
    77  
    78  func TestRepositoriesService_GetHook(t *testing.T) {
    79  	client, mux, _, teardown := setup()
    80  	defer teardown()
    81  
    82  	mux.HandleFunc("/repos/o/r/hooks/1", func(w http.ResponseWriter, r *http.Request) {
    83  		testMethod(t, r, "GET")
    84  		fmt.Fprint(w, `{"id":1}`)
    85  	})
    86  
    87  	hook, _, err := client.Repositories.GetHook(context.Background(), "o", "r", 1)
    88  	if err != nil {
    89  		t.Errorf("Repositories.GetHook returned error: %v", err)
    90  	}
    91  
    92  	want := &Hook{ID: Int64(1)}
    93  	if !reflect.DeepEqual(hook, want) {
    94  		t.Errorf("Repositories.GetHook returned %+v, want %+v", hook, want)
    95  	}
    96  }
    97  
    98  func TestRepositoriesService_GetHook_invalidOwner(t *testing.T) {
    99  	client, _, _, teardown := setup()
   100  	defer teardown()
   101  
   102  	_, _, err := client.Repositories.GetHook(context.Background(), "%", "%", 1)
   103  	testURLParseError(t, err)
   104  }
   105  
   106  func TestRepositoriesService_EditHook(t *testing.T) {
   107  	client, mux, _, teardown := setup()
   108  	defer teardown()
   109  
   110  	input := &Hook{}
   111  
   112  	mux.HandleFunc("/repos/o/r/hooks/1", func(w http.ResponseWriter, r *http.Request) {
   113  		v := new(Hook)
   114  		json.NewDecoder(r.Body).Decode(v)
   115  
   116  		testMethod(t, r, "PATCH")
   117  		if !reflect.DeepEqual(v, input) {
   118  			t.Errorf("Request body = %+v, want %+v", v, input)
   119  		}
   120  
   121  		fmt.Fprint(w, `{"id":1}`)
   122  	})
   123  
   124  	hook, _, err := client.Repositories.EditHook(context.Background(), "o", "r", 1, input)
   125  	if err != nil {
   126  		t.Errorf("Repositories.EditHook returned error: %v", err)
   127  	}
   128  
   129  	want := &Hook{ID: Int64(1)}
   130  	if !reflect.DeepEqual(hook, want) {
   131  		t.Errorf("Repositories.EditHook returned %+v, want %+v", hook, want)
   132  	}
   133  }
   134  
   135  func TestRepositoriesService_EditHook_invalidOwner(t *testing.T) {
   136  	client, _, _, teardown := setup()
   137  	defer teardown()
   138  
   139  	_, _, err := client.Repositories.EditHook(context.Background(), "%", "%", 1, nil)
   140  	testURLParseError(t, err)
   141  }
   142  
   143  func TestRepositoriesService_DeleteHook(t *testing.T) {
   144  	client, mux, _, teardown := setup()
   145  	defer teardown()
   146  
   147  	mux.HandleFunc("/repos/o/r/hooks/1", func(w http.ResponseWriter, r *http.Request) {
   148  		testMethod(t, r, "DELETE")
   149  	})
   150  
   151  	_, err := client.Repositories.DeleteHook(context.Background(), "o", "r", 1)
   152  	if err != nil {
   153  		t.Errorf("Repositories.DeleteHook returned error: %v", err)
   154  	}
   155  }
   156  
   157  func TestRepositoriesService_DeleteHook_invalidOwner(t *testing.T) {
   158  	client, _, _, teardown := setup()
   159  	defer teardown()
   160  
   161  	_, err := client.Repositories.DeleteHook(context.Background(), "%", "%", 1)
   162  	testURLParseError(t, err)
   163  }
   164  
   165  func TestRepositoriesService_PingHook(t *testing.T) {
   166  	client, mux, _, teardown := setup()
   167  	defer teardown()
   168  
   169  	mux.HandleFunc("/repos/o/r/hooks/1/pings", func(w http.ResponseWriter, r *http.Request) {
   170  		testMethod(t, r, "POST")
   171  	})
   172  
   173  	_, err := client.Repositories.PingHook(context.Background(), "o", "r", 1)
   174  	if err != nil {
   175  		t.Errorf("Repositories.PingHook returned error: %v", err)
   176  	}
   177  }
   178  
   179  func TestRepositoriesService_TestHook(t *testing.T) {
   180  	client, mux, _, teardown := setup()
   181  	defer teardown()
   182  
   183  	mux.HandleFunc("/repos/o/r/hooks/1/tests", func(w http.ResponseWriter, r *http.Request) {
   184  		testMethod(t, r, "POST")
   185  	})
   186  
   187  	_, err := client.Repositories.TestHook(context.Background(), "o", "r", 1)
   188  	if err != nil {
   189  		t.Errorf("Repositories.TestHook returned error: %v", err)
   190  	}
   191  }
   192  
   193  func TestRepositoriesService_TestHook_invalidOwner(t *testing.T) {
   194  	client, _, _, teardown := setup()
   195  	defer teardown()
   196  
   197  	_, err := client.Repositories.TestHook(context.Background(), "%", "%", 1)
   198  	testURLParseError(t, err)
   199  }