github.com/google/go-github/v42@v42.0.0/github/orgs_hooks_test.go (about)

     1  // Copyright 2015 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  	"testing"
    14  
    15  	"github.com/google/go-cmp/cmp"
    16  )
    17  
    18  func TestOrganizationsService_ListHooks(t *testing.T) {
    19  	client, mux, _, teardown := setup()
    20  	defer teardown()
    21  
    22  	mux.HandleFunc("/orgs/o/hooks", func(w http.ResponseWriter, r *http.Request) {
    23  		testMethod(t, r, "GET")
    24  		testFormValues(t, r, values{"page": "2"})
    25  		fmt.Fprint(w, `[{"id":1}, {"id":2}]`)
    26  	})
    27  
    28  	opt := &ListOptions{Page: 2}
    29  
    30  	ctx := context.Background()
    31  	hooks, _, err := client.Organizations.ListHooks(ctx, "o", opt)
    32  	if err != nil {
    33  		t.Errorf("Organizations.ListHooks returned error: %v", err)
    34  	}
    35  
    36  	want := []*Hook{{ID: Int64(1)}, {ID: Int64(2)}}
    37  	if !cmp.Equal(hooks, want) {
    38  		t.Errorf("Organizations.ListHooks returned %+v, want %+v", hooks, want)
    39  	}
    40  
    41  	const methodName = "ListHooks"
    42  	testBadOptions(t, methodName, func() (err error) {
    43  		_, _, err = client.Organizations.ListHooks(ctx, "\n", opt)
    44  		return err
    45  	})
    46  
    47  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    48  		got, resp, err := client.Organizations.ListHooks(ctx, "o", opt)
    49  		if got != nil {
    50  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
    51  		}
    52  		return resp, err
    53  	})
    54  }
    55  
    56  func TestOrganizationsService_ListHooks_invalidOrg(t *testing.T) {
    57  	client, _, _, teardown := setup()
    58  	defer teardown()
    59  
    60  	ctx := context.Background()
    61  	_, _, err := client.Organizations.ListHooks(ctx, "%", nil)
    62  	testURLParseError(t, err)
    63  }
    64  
    65  func TestOrganizationsService_CreateHook(t *testing.T) {
    66  	client, mux, _, teardown := setup()
    67  	defer teardown()
    68  
    69  	input := &Hook{CreatedAt: &referenceTime}
    70  
    71  	mux.HandleFunc("/orgs/o/hooks", func(w http.ResponseWriter, r *http.Request) {
    72  		v := new(createHookRequest)
    73  		json.NewDecoder(r.Body).Decode(v)
    74  
    75  		testMethod(t, r, "POST")
    76  		want := &createHookRequest{Name: "web"}
    77  		if !cmp.Equal(v, want) {
    78  			t.Errorf("Request body = %+v, want %+v", v, want)
    79  		}
    80  
    81  		fmt.Fprint(w, `{"id":1}`)
    82  	})
    83  
    84  	ctx := context.Background()
    85  	hook, _, err := client.Organizations.CreateHook(ctx, "o", input)
    86  	if err != nil {
    87  		t.Errorf("Organizations.CreateHook returned error: %v", err)
    88  	}
    89  
    90  	want := &Hook{ID: Int64(1)}
    91  	if !cmp.Equal(hook, want) {
    92  		t.Errorf("Organizations.CreateHook returned %+v, want %+v", hook, want)
    93  	}
    94  
    95  	const methodName = "CreateHook"
    96  	testBadOptions(t, methodName, func() (err error) {
    97  		_, _, err = client.Organizations.CreateHook(ctx, "\n", input)
    98  		return err
    99  	})
   100  
   101  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   102  		got, resp, err := client.Organizations.CreateHook(ctx, "o", input)
   103  		if got != nil {
   104  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   105  		}
   106  		return resp, err
   107  	})
   108  }
   109  
   110  func TestOrganizationsService_GetHook(t *testing.T) {
   111  	client, mux, _, teardown := setup()
   112  	defer teardown()
   113  
   114  	mux.HandleFunc("/orgs/o/hooks/1", func(w http.ResponseWriter, r *http.Request) {
   115  		testMethod(t, r, "GET")
   116  		fmt.Fprint(w, `{"id":1}`)
   117  	})
   118  
   119  	ctx := context.Background()
   120  	hook, _, err := client.Organizations.GetHook(ctx, "o", 1)
   121  	if err != nil {
   122  		t.Errorf("Organizations.GetHook returned error: %v", err)
   123  	}
   124  
   125  	want := &Hook{ID: Int64(1)}
   126  	if !cmp.Equal(hook, want) {
   127  		t.Errorf("Organizations.GetHook returned %+v, want %+v", hook, want)
   128  	}
   129  
   130  	const methodName = "GetHook"
   131  	testBadOptions(t, methodName, func() (err error) {
   132  		_, _, err = client.Organizations.GetHook(ctx, "\n", -1)
   133  		return err
   134  	})
   135  }
   136  
   137  func TestOrganizationsService_GetHook_invalidOrg(t *testing.T) {
   138  	client, _, _, teardown := setup()
   139  	defer teardown()
   140  
   141  	ctx := context.Background()
   142  	_, _, err := client.Organizations.GetHook(ctx, "%", 1)
   143  	testURLParseError(t, err)
   144  }
   145  
   146  func TestOrganizationsService_EditHook(t *testing.T) {
   147  	client, mux, _, teardown := setup()
   148  	defer teardown()
   149  
   150  	input := &Hook{}
   151  
   152  	mux.HandleFunc("/orgs/o/hooks/1", func(w http.ResponseWriter, r *http.Request) {
   153  		v := new(Hook)
   154  		json.NewDecoder(r.Body).Decode(v)
   155  
   156  		testMethod(t, r, "PATCH")
   157  		if !cmp.Equal(v, input) {
   158  			t.Errorf("Request body = %+v, want %+v", v, input)
   159  		}
   160  
   161  		fmt.Fprint(w, `{"id":1}`)
   162  	})
   163  
   164  	ctx := context.Background()
   165  	hook, _, err := client.Organizations.EditHook(ctx, "o", 1, input)
   166  	if err != nil {
   167  		t.Errorf("Organizations.EditHook returned error: %v", err)
   168  	}
   169  
   170  	want := &Hook{ID: Int64(1)}
   171  	if !cmp.Equal(hook, want) {
   172  		t.Errorf("Organizations.EditHook returned %+v, want %+v", hook, want)
   173  	}
   174  
   175  	const methodName = "EditHook"
   176  	testBadOptions(t, methodName, func() (err error) {
   177  		_, _, err = client.Organizations.EditHook(ctx, "\n", -1, input)
   178  		return err
   179  	})
   180  }
   181  
   182  func TestOrganizationsService_EditHook_invalidOrg(t *testing.T) {
   183  	client, _, _, teardown := setup()
   184  	defer teardown()
   185  
   186  	ctx := context.Background()
   187  	_, _, err := client.Organizations.EditHook(ctx, "%", 1, nil)
   188  	testURLParseError(t, err)
   189  }
   190  
   191  func TestOrganizationsService_PingHook(t *testing.T) {
   192  	client, mux, _, teardown := setup()
   193  	defer teardown()
   194  
   195  	mux.HandleFunc("/orgs/o/hooks/1/pings", func(w http.ResponseWriter, r *http.Request) {
   196  		testMethod(t, r, "POST")
   197  	})
   198  
   199  	ctx := context.Background()
   200  	_, err := client.Organizations.PingHook(ctx, "o", 1)
   201  	if err != nil {
   202  		t.Errorf("Organizations.PingHook returned error: %v", err)
   203  	}
   204  
   205  	const methodName = "PingHook"
   206  	testBadOptions(t, methodName, func() (err error) {
   207  		_, err = client.Organizations.PingHook(ctx, "\n", -1)
   208  		return err
   209  	})
   210  
   211  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   212  		return client.Organizations.PingHook(ctx, "o", 1)
   213  	})
   214  }
   215  
   216  func TestOrganizationsService_DeleteHook(t *testing.T) {
   217  	client, mux, _, teardown := setup()
   218  	defer teardown()
   219  
   220  	mux.HandleFunc("/orgs/o/hooks/1", func(w http.ResponseWriter, r *http.Request) {
   221  		testMethod(t, r, "DELETE")
   222  	})
   223  
   224  	ctx := context.Background()
   225  	_, err := client.Organizations.DeleteHook(ctx, "o", 1)
   226  	if err != nil {
   227  		t.Errorf("Organizations.DeleteHook returned error: %v", err)
   228  	}
   229  
   230  	const methodName = "DeleteHook"
   231  	testBadOptions(t, methodName, func() (err error) {
   232  		_, err = client.Organizations.DeleteHook(ctx, "\n", -1)
   233  		return err
   234  	})
   235  
   236  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   237  		return client.Organizations.DeleteHook(ctx, "o", 1)
   238  	})
   239  }
   240  
   241  func TestOrganizationsService_DeleteHook_invalidOrg(t *testing.T) {
   242  	client, _, _, teardown := setup()
   243  	defer teardown()
   244  
   245  	ctx := context.Background()
   246  	_, err := client.Organizations.DeleteHook(ctx, "%", 1)
   247  	testURLParseError(t, err)
   248  }