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 6package github 7 8import ( 9 "context" 10 "encoding/json" 11 "fmt" 12 "net/http" 13 "reflect" 14 "testing" 15) 16 17func 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 47func 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 70func 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 78func 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 98func 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 106func 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 135func 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 143func 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 157func 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 165func 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 179func 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 193func 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} 200