github.com/google/go-github/v69@v69.2.0/github/gists_comments_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  	"testing"
    14  	"time"
    15  
    16  	"github.com/google/go-cmp/cmp"
    17  )
    18  
    19  func TestGistComments_Marshal(t *testing.T) {
    20  	t.Parallel()
    21  	testJSONMarshal(t, &GistComment{}, "{}")
    22  
    23  	createdAt := time.Date(2002, time.February, 10, 15, 30, 0, 0, time.UTC)
    24  
    25  	u := &GistComment{
    26  		ID:   Ptr(int64(1)),
    27  		URL:  Ptr("u"),
    28  		Body: Ptr("test gist comment"),
    29  		User: &User{
    30  			Login:       Ptr("ll"),
    31  			ID:          Ptr(int64(123)),
    32  			AvatarURL:   Ptr("a"),
    33  			GravatarID:  Ptr("g"),
    34  			Name:        Ptr("n"),
    35  			Company:     Ptr("c"),
    36  			Blog:        Ptr("b"),
    37  			Location:    Ptr("l"),
    38  			Email:       Ptr("e"),
    39  			Hireable:    Ptr(true),
    40  			PublicRepos: Ptr(1),
    41  			Followers:   Ptr(1),
    42  			Following:   Ptr(1),
    43  			CreatedAt:   &Timestamp{referenceTime},
    44  			URL:         Ptr("u"),
    45  		},
    46  		CreatedAt: &Timestamp{createdAt},
    47  	}
    48  
    49  	want := `{
    50  		"id": 1,
    51  		"url": "u",
    52  		"body": "test gist comment",
    53  		"user": {
    54  			"login": "ll",
    55  			"id": 123,
    56  			"avatar_url": "a",
    57  			"gravatar_id": "g",
    58  			"name": "n",
    59  			"company": "c",
    60  			"blog": "b",
    61  			"location": "l",
    62  			"email": "e",
    63  			"hireable": true,
    64  			"public_repos": 1,
    65  			"followers": 1,
    66  			"following": 1,
    67  			"created_at": ` + referenceTimeStr + `,
    68  			"url": "u"
    69  		},
    70  		"created_at": "2002-02-10T15:30:00Z"
    71  	}`
    72  
    73  	testJSONMarshal(t, u, want)
    74  }
    75  func TestGistsService_ListComments(t *testing.T) {
    76  	t.Parallel()
    77  	client, mux, _ := setup(t)
    78  
    79  	mux.HandleFunc("/gists/1/comments", func(w http.ResponseWriter, r *http.Request) {
    80  		testMethod(t, r, "GET")
    81  		testFormValues(t, r, values{"page": "2"})
    82  		fmt.Fprint(w, `[{"id": 1}]`)
    83  	})
    84  
    85  	opt := &ListOptions{Page: 2}
    86  	ctx := context.Background()
    87  	comments, _, err := client.Gists.ListComments(ctx, "1", opt)
    88  	if err != nil {
    89  		t.Errorf("Gists.Comments returned error: %v", err)
    90  	}
    91  
    92  	want := []*GistComment{{ID: Ptr(int64(1))}}
    93  	if !cmp.Equal(comments, want) {
    94  		t.Errorf("Gists.ListComments returned %+v, want %+v", comments, want)
    95  	}
    96  
    97  	const methodName = "ListComments"
    98  	testBadOptions(t, methodName, func() (err error) {
    99  		_, _, err = client.Gists.ListComments(ctx, "\n", opt)
   100  		return err
   101  	})
   102  
   103  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   104  		got, resp, err := client.Gists.ListComments(ctx, "1", opt)
   105  		if got != nil {
   106  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   107  		}
   108  		return resp, err
   109  	})
   110  }
   111  
   112  func TestGistsService_ListComments_invalidID(t *testing.T) {
   113  	t.Parallel()
   114  	client, _, _ := setup(t)
   115  
   116  	ctx := context.Background()
   117  	_, _, err := client.Gists.ListComments(ctx, "%", nil)
   118  	testURLParseError(t, err)
   119  }
   120  
   121  func TestGistsService_GetComment(t *testing.T) {
   122  	t.Parallel()
   123  	client, mux, _ := setup(t)
   124  
   125  	mux.HandleFunc("/gists/1/comments/2", func(w http.ResponseWriter, r *http.Request) {
   126  		testMethod(t, r, "GET")
   127  		fmt.Fprint(w, `{"id": 1}`)
   128  	})
   129  
   130  	ctx := context.Background()
   131  	comment, _, err := client.Gists.GetComment(ctx, "1", 2)
   132  	if err != nil {
   133  		t.Errorf("Gists.GetComment returned error: %v", err)
   134  	}
   135  
   136  	want := &GistComment{ID: Ptr(int64(1))}
   137  	if !cmp.Equal(comment, want) {
   138  		t.Errorf("Gists.GetComment returned %+v, want %+v", comment, want)
   139  	}
   140  
   141  	const methodName = "GetComment"
   142  	testBadOptions(t, methodName, func() (err error) {
   143  		_, _, err = client.Gists.GetComment(ctx, "\n", -2)
   144  		return err
   145  	})
   146  
   147  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   148  		got, resp, err := client.Gists.GetComment(ctx, "1", 2)
   149  		if got != nil {
   150  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   151  		}
   152  		return resp, err
   153  	})
   154  }
   155  
   156  func TestGistsService_GetComment_invalidID(t *testing.T) {
   157  	t.Parallel()
   158  	client, _, _ := setup(t)
   159  
   160  	ctx := context.Background()
   161  	_, _, err := client.Gists.GetComment(ctx, "%", 1)
   162  	testURLParseError(t, err)
   163  }
   164  
   165  func TestGistsService_CreateComment(t *testing.T) {
   166  	t.Parallel()
   167  	client, mux, _ := setup(t)
   168  
   169  	input := &GistComment{ID: Ptr(int64(1)), Body: Ptr("b")}
   170  
   171  	mux.HandleFunc("/gists/1/comments", func(w http.ResponseWriter, r *http.Request) {
   172  		v := new(GistComment)
   173  		assertNilError(t, json.NewDecoder(r.Body).Decode(v))
   174  
   175  		testMethod(t, r, "POST")
   176  		if !cmp.Equal(v, input) {
   177  			t.Errorf("Request body = %+v, want %+v", v, input)
   178  		}
   179  
   180  		fmt.Fprint(w, `{"id":1}`)
   181  	})
   182  
   183  	ctx := context.Background()
   184  	comment, _, err := client.Gists.CreateComment(ctx, "1", input)
   185  	if err != nil {
   186  		t.Errorf("Gists.CreateComment returned error: %v", err)
   187  	}
   188  
   189  	want := &GistComment{ID: Ptr(int64(1))}
   190  	if !cmp.Equal(comment, want) {
   191  		t.Errorf("Gists.CreateComment returned %+v, want %+v", comment, want)
   192  	}
   193  
   194  	const methodName = "CreateComment"
   195  	testBadOptions(t, methodName, func() (err error) {
   196  		_, _, err = client.Gists.CreateComment(ctx, "\n", input)
   197  		return err
   198  	})
   199  
   200  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   201  		got, resp, err := client.Gists.CreateComment(ctx, "1", input)
   202  		if got != nil {
   203  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   204  		}
   205  		return resp, err
   206  	})
   207  }
   208  
   209  func TestGistsService_CreateComment_invalidID(t *testing.T) {
   210  	t.Parallel()
   211  	client, _, _ := setup(t)
   212  
   213  	ctx := context.Background()
   214  	_, _, err := client.Gists.CreateComment(ctx, "%", nil)
   215  	testURLParseError(t, err)
   216  }
   217  
   218  func TestGistsService_EditComment(t *testing.T) {
   219  	t.Parallel()
   220  	client, mux, _ := setup(t)
   221  
   222  	input := &GistComment{ID: Ptr(int64(1)), Body: Ptr("b")}
   223  
   224  	mux.HandleFunc("/gists/1/comments/2", func(w http.ResponseWriter, r *http.Request) {
   225  		v := new(GistComment)
   226  		assertNilError(t, json.NewDecoder(r.Body).Decode(v))
   227  
   228  		testMethod(t, r, "PATCH")
   229  		if !cmp.Equal(v, input) {
   230  			t.Errorf("Request body = %+v, want %+v", v, input)
   231  		}
   232  
   233  		fmt.Fprint(w, `{"id":1}`)
   234  	})
   235  
   236  	ctx := context.Background()
   237  	comment, _, err := client.Gists.EditComment(ctx, "1", 2, input)
   238  	if err != nil {
   239  		t.Errorf("Gists.EditComment returned error: %v", err)
   240  	}
   241  
   242  	want := &GistComment{ID: Ptr(int64(1))}
   243  	if !cmp.Equal(comment, want) {
   244  		t.Errorf("Gists.EditComment returned %+v, want %+v", comment, want)
   245  	}
   246  
   247  	const methodName = "EditComment"
   248  	testBadOptions(t, methodName, func() (err error) {
   249  		_, _, err = client.Gists.EditComment(ctx, "\n", -2, input)
   250  		return err
   251  	})
   252  
   253  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   254  		got, resp, err := client.Gists.EditComment(ctx, "1", 2, input)
   255  		if got != nil {
   256  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   257  		}
   258  		return resp, err
   259  	})
   260  }
   261  
   262  func TestGistsService_EditComment_invalidID(t *testing.T) {
   263  	t.Parallel()
   264  	client, _, _ := setup(t)
   265  
   266  	ctx := context.Background()
   267  	_, _, err := client.Gists.EditComment(ctx, "%", 1, nil)
   268  	testURLParseError(t, err)
   269  }
   270  
   271  func TestGistsService_DeleteComment(t *testing.T) {
   272  	t.Parallel()
   273  	client, mux, _ := setup(t)
   274  
   275  	mux.HandleFunc("/gists/1/comments/2", func(w http.ResponseWriter, r *http.Request) {
   276  		testMethod(t, r, "DELETE")
   277  	})
   278  
   279  	ctx := context.Background()
   280  	_, err := client.Gists.DeleteComment(ctx, "1", 2)
   281  	if err != nil {
   282  		t.Errorf("Gists.Delete returned error: %v", err)
   283  	}
   284  
   285  	const methodName = "DeleteComment"
   286  	testBadOptions(t, methodName, func() (err error) {
   287  		_, err = client.Gists.DeleteComment(ctx, "\n", -2)
   288  		return err
   289  	})
   290  
   291  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   292  		return client.Gists.DeleteComment(ctx, "1", 2)
   293  	})
   294  }
   295  
   296  func TestGistsService_DeleteComment_invalidID(t *testing.T) {
   297  	t.Parallel()
   298  	client, _, _ := setup(t)
   299  
   300  	ctx := context.Background()
   301  	_, err := client.Gists.DeleteComment(ctx, "%", 1)
   302  	testURLParseError(t, err)
   303  }