...

Source file src/github.com/google/go-github/v45/github/issues_events_test.go

Documentation: github.com/google/go-github/v45/github

     1  // Copyright 2014 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  	"testing"
    13  
    14  	"github.com/google/go-cmp/cmp"
    15  )
    16  
    17  func TestIssuesService_ListIssueEvents(t *testing.T) {
    18  	client, mux, _, teardown := setup()
    19  	defer teardown()
    20  
    21  	mux.HandleFunc("/repos/o/r/issues/1/events", func(w http.ResponseWriter, r *http.Request) {
    22  		testMethod(t, r, "GET")
    23  		testHeader(t, r, "Accept", mediaTypeProjectCardDetailsPreview)
    24  		testFormValues(t, r, values{
    25  			"page":     "1",
    26  			"per_page": "2",
    27  		})
    28  		fmt.Fprint(w, `[{"id":1}]`)
    29  	})
    30  
    31  	opt := &ListOptions{Page: 1, PerPage: 2}
    32  	ctx := context.Background()
    33  	events, _, err := client.Issues.ListIssueEvents(ctx, "o", "r", 1, opt)
    34  	if err != nil {
    35  		t.Errorf("Issues.ListIssueEvents returned error: %v", err)
    36  	}
    37  
    38  	want := []*IssueEvent{{ID: Int64(1)}}
    39  	if !cmp.Equal(events, want) {
    40  		t.Errorf("Issues.ListIssueEvents returned %+v, want %+v", events, want)
    41  	}
    42  
    43  	const methodName = "ListIssueEvents"
    44  	testBadOptions(t, methodName, func() (err error) {
    45  		_, _, err = client.Issues.ListIssueEvents(ctx, "\n", "\n", -1, &ListOptions{})
    46  		return err
    47  	})
    48  
    49  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    50  		got, resp, err := client.Issues.ListIssueEvents(ctx, "o", "r", 1, nil)
    51  		if got != nil {
    52  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
    53  		}
    54  		return resp, err
    55  	})
    56  }
    57  
    58  func TestIssuesService_ListRepositoryEvents(t *testing.T) {
    59  	client, mux, _, teardown := setup()
    60  	defer teardown()
    61  
    62  	mux.HandleFunc("/repos/o/r/issues/events", func(w http.ResponseWriter, r *http.Request) {
    63  		testMethod(t, r, "GET")
    64  		testFormValues(t, r, values{
    65  			"page":     "1",
    66  			"per_page": "2",
    67  		})
    68  		fmt.Fprint(w, `[{"id":1}]`)
    69  	})
    70  
    71  	opt := &ListOptions{Page: 1, PerPage: 2}
    72  	ctx := context.Background()
    73  	events, _, err := client.Issues.ListRepositoryEvents(ctx, "o", "r", opt)
    74  	if err != nil {
    75  		t.Errorf("Issues.ListRepositoryEvents returned error: %v", err)
    76  	}
    77  
    78  	want := []*IssueEvent{{ID: Int64(1)}}
    79  	if !cmp.Equal(events, want) {
    80  		t.Errorf("Issues.ListRepositoryEvents returned %+v, want %+v", events, want)
    81  	}
    82  
    83  	const methodName = "ListRepositoryEvents"
    84  	testBadOptions(t, methodName, func() (err error) {
    85  		_, _, err = client.Issues.ListRepositoryEvents(ctx, "\n", "\n", &ListOptions{})
    86  		return err
    87  	})
    88  
    89  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    90  		got, resp, err := client.Issues.ListRepositoryEvents(ctx, "o", "r", nil)
    91  		if got != nil {
    92  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
    93  		}
    94  		return resp, err
    95  	})
    96  }
    97  
    98  func TestIssuesService_GetEvent(t *testing.T) {
    99  	client, mux, _, teardown := setup()
   100  	defer teardown()
   101  
   102  	mux.HandleFunc("/repos/o/r/issues/events/1", func(w http.ResponseWriter, r *http.Request) {
   103  		testMethod(t, r, "GET")
   104  		fmt.Fprint(w, `{"id":1}`)
   105  	})
   106  
   107  	ctx := context.Background()
   108  	event, _, err := client.Issues.GetEvent(ctx, "o", "r", 1)
   109  	if err != nil {
   110  		t.Errorf("Issues.GetEvent returned error: %v", err)
   111  	}
   112  
   113  	want := &IssueEvent{ID: Int64(1)}
   114  	if !cmp.Equal(event, want) {
   115  		t.Errorf("Issues.GetEvent returned %+v, want %+v", event, want)
   116  	}
   117  
   118  	const methodName = "GetEvent"
   119  	testBadOptions(t, methodName, func() (err error) {
   120  		_, _, err = client.Issues.GetEvent(ctx, "\n", "\n", -1)
   121  		return err
   122  	})
   123  
   124  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   125  		got, resp, err := client.Issues.GetEvent(ctx, "o", "r", 1)
   126  		if got != nil {
   127  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   128  		}
   129  		return resp, err
   130  	})
   131  }
   132  
   133  func TestRename_Marshal(t *testing.T) {
   134  	testJSONMarshal(t, &Rename{}, "{}")
   135  
   136  	u := &Rename{
   137  		From: String("from"),
   138  		To:   String("to"),
   139  	}
   140  
   141  	want := `{
   142  		"from": "from",
   143  		"to": "to"
   144  	}`
   145  
   146  	testJSONMarshal(t, u, want)
   147  }
   148  
   149  func TestDismissedReview_Marshal(t *testing.T) {
   150  	testJSONMarshal(t, &DismissedReview{}, "{}")
   151  
   152  	u := &DismissedReview{
   153  		State:             String("state"),
   154  		ReviewID:          Int64(1),
   155  		DismissalMessage:  String("dm"),
   156  		DismissalCommitID: String("dcid"),
   157  	}
   158  
   159  	want := `{
   160  		"state": "state",
   161  		"review_id": 1,
   162  		"dismissal_message": "dm",
   163  		"dismissal_commit_id": "dcid"
   164  	}`
   165  
   166  	testJSONMarshal(t, u, want)
   167  }
   168  
   169  func TestIssueEvent_Marshal(t *testing.T) {
   170  	testJSONMarshal(t, &IssueEvent{}, "{}")
   171  
   172  	u := &IssueEvent{
   173  		ID:  Int64(1),
   174  		URL: String("url"),
   175  		Actor: &User{
   176  			Login:           String("l"),
   177  			ID:              Int64(1),
   178  			URL:             String("u"),
   179  			AvatarURL:       String("a"),
   180  			GravatarID:      String("g"),
   181  			Name:            String("n"),
   182  			Company:         String("c"),
   183  			Blog:            String("b"),
   184  			Location:        String("l"),
   185  			Email:           String("e"),
   186  			Hireable:        Bool(true),
   187  			Bio:             String("b"),
   188  			TwitterUsername: String("t"),
   189  			PublicRepos:     Int(1),
   190  			Followers:       Int(1),
   191  			Following:       Int(1),
   192  			CreatedAt:       &Timestamp{referenceTime},
   193  			SuspendedAt:     &Timestamp{referenceTime},
   194  		},
   195  		Event:     String("event"),
   196  		CreatedAt: &referenceTime,
   197  		Issue:     &Issue{ID: Int64(1)},
   198  		Assignee: &User{
   199  			Login:           String("l"),
   200  			ID:              Int64(1),
   201  			URL:             String("u"),
   202  			AvatarURL:       String("a"),
   203  			GravatarID:      String("g"),
   204  			Name:            String("n"),
   205  			Company:         String("c"),
   206  			Blog:            String("b"),
   207  			Location:        String("l"),
   208  			Email:           String("e"),
   209  			Hireable:        Bool(true),
   210  			Bio:             String("b"),
   211  			TwitterUsername: String("t"),
   212  			PublicRepos:     Int(1),
   213  			Followers:       Int(1),
   214  			Following:       Int(1),
   215  			CreatedAt:       &Timestamp{referenceTime},
   216  			SuspendedAt:     &Timestamp{referenceTime},
   217  		},
   218  		Assigner: &User{
   219  			Login:           String("l"),
   220  			ID:              Int64(1),
   221  			URL:             String("u"),
   222  			AvatarURL:       String("a"),
   223  			GravatarID:      String("g"),
   224  			Name:            String("n"),
   225  			Company:         String("c"),
   226  			Blog:            String("b"),
   227  			Location:        String("l"),
   228  			Email:           String("e"),
   229  			Hireable:        Bool(true),
   230  			Bio:             String("b"),
   231  			TwitterUsername: String("t"),
   232  			PublicRepos:     Int(1),
   233  			Followers:       Int(1),
   234  			Following:       Int(1),
   235  			CreatedAt:       &Timestamp{referenceTime},
   236  			SuspendedAt:     &Timestamp{referenceTime},
   237  		},
   238  		CommitID:  String("cid"),
   239  		Milestone: &Milestone{ID: Int64(1)},
   240  		Label:     &Label{ID: Int64(1)},
   241  		Rename: &Rename{
   242  			From: String("from"),
   243  			To:   String("to"),
   244  		},
   245  		LockReason:  String("lr"),
   246  		ProjectCard: &ProjectCard{ID: Int64(1)},
   247  		DismissedReview: &DismissedReview{
   248  			State:             String("state"),
   249  			ReviewID:          Int64(1),
   250  			DismissalMessage:  String("dm"),
   251  			DismissalCommitID: String("dcid"),
   252  		},
   253  		RequestedReviewer: &User{
   254  			Login:           String("l"),
   255  			ID:              Int64(1),
   256  			URL:             String("u"),
   257  			AvatarURL:       String("a"),
   258  			GravatarID:      String("g"),
   259  			Name:            String("n"),
   260  			Company:         String("c"),
   261  			Blog:            String("b"),
   262  			Location:        String("l"),
   263  			Email:           String("e"),
   264  			Hireable:        Bool(true),
   265  			Bio:             String("b"),
   266  			TwitterUsername: String("t"),
   267  			PublicRepos:     Int(1),
   268  			Followers:       Int(1),
   269  			Following:       Int(1),
   270  			CreatedAt:       &Timestamp{referenceTime},
   271  			SuspendedAt:     &Timestamp{referenceTime},
   272  		},
   273  		ReviewRequester: &User{
   274  			Login:           String("l"),
   275  			ID:              Int64(1),
   276  			URL:             String("u"),
   277  			AvatarURL:       String("a"),
   278  			GravatarID:      String("g"),
   279  			Name:            String("n"),
   280  			Company:         String("c"),
   281  			Blog:            String("b"),
   282  			Location:        String("l"),
   283  			Email:           String("e"),
   284  			Hireable:        Bool(true),
   285  			Bio:             String("b"),
   286  			TwitterUsername: String("t"),
   287  			PublicRepos:     Int(1),
   288  			Followers:       Int(1),
   289  			Following:       Int(1),
   290  			CreatedAt:       &Timestamp{referenceTime},
   291  			SuspendedAt:     &Timestamp{referenceTime},
   292  		},
   293  	}
   294  
   295  	want := `{
   296  		"id": 1,
   297  		"url": "url",
   298  		"actor": {
   299  			"login": "l",
   300  			"id": 1,
   301  			"avatar_url": "a",
   302  			"gravatar_id": "g",
   303  			"name": "n",
   304  			"company": "c",
   305  			"blog": "b",
   306  			"location": "l",
   307  			"email": "e",
   308  			"hireable": true,
   309  			"bio": "b",
   310  			"twitter_username": "t",
   311  			"public_repos": 1,
   312  			"followers": 1,
   313  			"following": 1,
   314  			"created_at": ` + referenceTimeStr + `,
   315  			"suspended_at": ` + referenceTimeStr + `,
   316  			"url": "u"
   317  		},
   318  		"event": "event",
   319  		"created_at": ` + referenceTimeStr + `,
   320  		"issue": {
   321  			"id": 1
   322  		},
   323  		"assignee": {
   324  			"login": "l",
   325  			"id": 1,
   326  			"avatar_url": "a",
   327  			"gravatar_id": "g",
   328  			"name": "n",
   329  			"company": "c",
   330  			"blog": "b",
   331  			"location": "l",
   332  			"email": "e",
   333  			"hireable": true,
   334  			"bio": "b",
   335  			"twitter_username": "t",
   336  			"public_repos": 1,
   337  			"followers": 1,
   338  			"following": 1,
   339  			"created_at": ` + referenceTimeStr + `,
   340  			"suspended_at": ` + referenceTimeStr + `,
   341  			"url": "u"
   342  		},
   343  		"assigner": {
   344  			"login": "l",
   345  			"id": 1,
   346  			"avatar_url": "a",
   347  			"gravatar_id": "g",
   348  			"name": "n",
   349  			"company": "c",
   350  			"blog": "b",
   351  			"location": "l",
   352  			"email": "e",
   353  			"hireable": true,
   354  			"bio": "b",
   355  			"twitter_username": "t",
   356  			"public_repos": 1,
   357  			"followers": 1,
   358  			"following": 1,
   359  			"created_at": ` + referenceTimeStr + `,
   360  			"suspended_at": ` + referenceTimeStr + `,
   361  			"url": "u"
   362  		},
   363  		"commit_id": "cid",
   364  		"milestone": {
   365  			"id": 1
   366  		},
   367  		"label": {
   368  			"id": 1
   369  		},
   370  		"rename": {
   371  			"from": "from",
   372  			"to": "to"
   373  		},
   374  		"lock_reason": "lr",
   375  		"project_card": {
   376  			"id": 1
   377  		},
   378  		"dismissed_review": {
   379  			"state": "state",
   380  			"review_id": 1,
   381  			"dismissal_message": "dm",
   382  			"dismissal_commit_id": "dcid"
   383  		},
   384  		"requested_reviewer": {
   385  			"login": "l",
   386  			"id": 1,
   387  			"avatar_url": "a",
   388  			"gravatar_id": "g",
   389  			"name": "n",
   390  			"company": "c",
   391  			"blog": "b",
   392  			"location": "l",
   393  			"email": "e",
   394  			"hireable": true,
   395  			"bio": "b",
   396  			"twitter_username": "t",
   397  			"public_repos": 1,
   398  			"followers": 1,
   399  			"following": 1,
   400  			"created_at": ` + referenceTimeStr + `,
   401  			"suspended_at": ` + referenceTimeStr + `,
   402  			"url": "u"
   403  		},
   404  		"review_requester": {
   405  			"login": "l",
   406  			"id": 1,
   407  			"avatar_url": "a",
   408  			"gravatar_id": "g",
   409  			"name": "n",
   410  			"company": "c",
   411  			"blog": "b",
   412  			"location": "l",
   413  			"email": "e",
   414  			"hireable": true,
   415  			"bio": "b",
   416  			"twitter_username": "t",
   417  			"public_repos": 1,
   418  			"followers": 1,
   419  			"following": 1,
   420  			"created_at": ` + referenceTimeStr + `,
   421  			"suspended_at": ` + referenceTimeStr + `,
   422  			"url": "u"
   423  		}
   424  	}`
   425  
   426  	testJSONMarshal(t, u, want)
   427  }
   428  

View as plain text