github.com/google/go-github/v33@v33.0.0/github/activity_events_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 TestActivityService_ListEvents(t *testing.T) {
    18  	client, mux, _, teardown := setup()
    19  	defer teardown()
    20  
    21  	mux.HandleFunc("/events", func(w http.ResponseWriter, r *http.Request) {
    22  		testMethod(t, r, "GET")
    23  		testFormValues(t, r, values{
    24  			"page": "2",
    25  		})
    26  		fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`)
    27  	})
    28  
    29  	opt := &ListOptions{Page: 2}
    30  	events, _, err := client.Activity.ListEvents(context.Background(), opt)
    31  	if err != nil {
    32  		t.Errorf("Activities.ListEvents returned error: %v", err)
    33  	}
    34  
    35  	want := []*Event{{ID: String("1")}, {ID: String("2")}}
    36  	if !reflect.DeepEqual(events, want) {
    37  		t.Errorf("Activities.ListEvents returned %+v, want %+v", events, want)
    38  	}
    39  }
    40  
    41  func TestActivityService_ListRepositoryEvents(t *testing.T) {
    42  	client, mux, _, teardown := setup()
    43  	defer teardown()
    44  
    45  	mux.HandleFunc("/repos/o/r/events", func(w http.ResponseWriter, r *http.Request) {
    46  		testMethod(t, r, "GET")
    47  		testFormValues(t, r, values{
    48  			"page": "2",
    49  		})
    50  		fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`)
    51  	})
    52  
    53  	opt := &ListOptions{Page: 2}
    54  	events, _, err := client.Activity.ListRepositoryEvents(context.Background(), "o", "r", opt)
    55  	if err != nil {
    56  		t.Errorf("Activities.ListRepositoryEvents returned error: %v", err)
    57  	}
    58  
    59  	want := []*Event{{ID: String("1")}, {ID: String("2")}}
    60  	if !reflect.DeepEqual(events, want) {
    61  		t.Errorf("Activities.ListRepositoryEvents returned %+v, want %+v", events, want)
    62  	}
    63  }
    64  
    65  func TestActivityService_ListRepositoryEvents_invalidOwner(t *testing.T) {
    66  	client, _, _, teardown := setup()
    67  	defer teardown()
    68  
    69  	_, _, err := client.Activity.ListRepositoryEvents(context.Background(), "%", "%", nil)
    70  	testURLParseError(t, err)
    71  }
    72  
    73  func TestActivityService_ListIssueEventsForRepository(t *testing.T) {
    74  	client, mux, _, teardown := setup()
    75  	defer teardown()
    76  
    77  	mux.HandleFunc("/repos/o/r/issues/events", func(w http.ResponseWriter, r *http.Request) {
    78  		testMethod(t, r, "GET")
    79  		testFormValues(t, r, values{
    80  			"page": "2",
    81  		})
    82  		fmt.Fprint(w, `[{"id":1},{"id":2}]`)
    83  	})
    84  
    85  	opt := &ListOptions{Page: 2}
    86  	events, _, err := client.Activity.ListIssueEventsForRepository(context.Background(), "o", "r", opt)
    87  	if err != nil {
    88  		t.Errorf("Activities.ListIssueEventsForRepository returned error: %v", err)
    89  	}
    90  
    91  	want := []*IssueEvent{{ID: Int64(1)}, {ID: Int64(2)}}
    92  	if !reflect.DeepEqual(events, want) {
    93  		t.Errorf("Activities.ListIssueEventsForRepository returned %+v, want %+v", events, want)
    94  	}
    95  }
    96  
    97  func TestActivityService_ListIssueEventsForRepository_invalidOwner(t *testing.T) {
    98  	client, _, _, teardown := setup()
    99  	defer teardown()
   100  
   101  	_, _, err := client.Activity.ListIssueEventsForRepository(context.Background(), "%", "%", nil)
   102  	testURLParseError(t, err)
   103  }
   104  
   105  func TestActivityService_ListEventsForRepoNetwork(t *testing.T) {
   106  	client, mux, _, teardown := setup()
   107  	defer teardown()
   108  
   109  	mux.HandleFunc("/networks/o/r/events", func(w http.ResponseWriter, r *http.Request) {
   110  		testMethod(t, r, "GET")
   111  		testFormValues(t, r, values{
   112  			"page": "2",
   113  		})
   114  		fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`)
   115  	})
   116  
   117  	opt := &ListOptions{Page: 2}
   118  	events, _, err := client.Activity.ListEventsForRepoNetwork(context.Background(), "o", "r", opt)
   119  	if err != nil {
   120  		t.Errorf("Activities.ListEventsForRepoNetwork returned error: %v", err)
   121  	}
   122  
   123  	want := []*Event{{ID: String("1")}, {ID: String("2")}}
   124  	if !reflect.DeepEqual(events, want) {
   125  		t.Errorf("Activities.ListEventsForRepoNetwork returned %+v, want %+v", events, want)
   126  	}
   127  }
   128  
   129  func TestActivityService_ListEventsForRepoNetwork_invalidOwner(t *testing.T) {
   130  	client, _, _, teardown := setup()
   131  	defer teardown()
   132  
   133  	_, _, err := client.Activity.ListEventsForRepoNetwork(context.Background(), "%", "%", nil)
   134  	testURLParseError(t, err)
   135  }
   136  
   137  func TestActivityService_ListEventsForOrganization(t *testing.T) {
   138  	client, mux, _, teardown := setup()
   139  	defer teardown()
   140  
   141  	mux.HandleFunc("/orgs/o/events", func(w http.ResponseWriter, r *http.Request) {
   142  		testMethod(t, r, "GET")
   143  		testFormValues(t, r, values{
   144  			"page": "2",
   145  		})
   146  		fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`)
   147  	})
   148  
   149  	opt := &ListOptions{Page: 2}
   150  	events, _, err := client.Activity.ListEventsForOrganization(context.Background(), "o", opt)
   151  	if err != nil {
   152  		t.Errorf("Activities.ListEventsForOrganization returned error: %v", err)
   153  	}
   154  
   155  	want := []*Event{{ID: String("1")}, {ID: String("2")}}
   156  	if !reflect.DeepEqual(events, want) {
   157  		t.Errorf("Activities.ListEventsForOrganization returned %+v, want %+v", events, want)
   158  	}
   159  }
   160  
   161  func TestActivityService_ListEventsForOrganization_invalidOrg(t *testing.T) {
   162  	client, _, _, teardown := setup()
   163  	defer teardown()
   164  
   165  	_, _, err := client.Activity.ListEventsForOrganization(context.Background(), "%", nil)
   166  	testURLParseError(t, err)
   167  }
   168  
   169  func TestActivityService_ListEventsPerformedByUser_all(t *testing.T) {
   170  	client, mux, _, teardown := setup()
   171  	defer teardown()
   172  
   173  	mux.HandleFunc("/users/u/events", func(w http.ResponseWriter, r *http.Request) {
   174  		testMethod(t, r, "GET")
   175  		testFormValues(t, r, values{
   176  			"page": "2",
   177  		})
   178  		fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`)
   179  	})
   180  
   181  	opt := &ListOptions{Page: 2}
   182  	events, _, err := client.Activity.ListEventsPerformedByUser(context.Background(), "u", false, opt)
   183  	if err != nil {
   184  		t.Errorf("Events.ListPerformedByUser returned error: %v", err)
   185  	}
   186  
   187  	want := []*Event{{ID: String("1")}, {ID: String("2")}}
   188  	if !reflect.DeepEqual(events, want) {
   189  		t.Errorf("Events.ListPerformedByUser returned %+v, want %+v", events, want)
   190  	}
   191  }
   192  
   193  func TestActivityService_ListEventsPerformedByUser_publicOnly(t *testing.T) {
   194  	client, mux, _, teardown := setup()
   195  	defer teardown()
   196  
   197  	mux.HandleFunc("/users/u/events/public", func(w http.ResponseWriter, r *http.Request) {
   198  		testMethod(t, r, "GET")
   199  		fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`)
   200  	})
   201  
   202  	events, _, err := client.Activity.ListEventsPerformedByUser(context.Background(), "u", true, nil)
   203  	if err != nil {
   204  		t.Errorf("Events.ListPerformedByUser returned error: %v", err)
   205  	}
   206  
   207  	want := []*Event{{ID: String("1")}, {ID: String("2")}}
   208  	if !reflect.DeepEqual(events, want) {
   209  		t.Errorf("Events.ListPerformedByUser returned %+v, want %+v", events, want)
   210  	}
   211  }
   212  
   213  func TestActivityService_ListEventsPerformedByUser_invalidUser(t *testing.T) {
   214  	client, _, _, teardown := setup()
   215  	defer teardown()
   216  
   217  	_, _, err := client.Activity.ListEventsPerformedByUser(context.Background(), "%", false, nil)
   218  	testURLParseError(t, err)
   219  }
   220  
   221  func TestActivityService_ListEventsReceivedByUser_all(t *testing.T) {
   222  	client, mux, _, teardown := setup()
   223  	defer teardown()
   224  
   225  	mux.HandleFunc("/users/u/received_events", func(w http.ResponseWriter, r *http.Request) {
   226  		testMethod(t, r, "GET")
   227  		testFormValues(t, r, values{
   228  			"page": "2",
   229  		})
   230  		fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`)
   231  	})
   232  
   233  	opt := &ListOptions{Page: 2}
   234  	events, _, err := client.Activity.ListEventsReceivedByUser(context.Background(), "u", false, opt)
   235  	if err != nil {
   236  		t.Errorf("Events.ListReceivedByUser returned error: %v", err)
   237  	}
   238  
   239  	want := []*Event{{ID: String("1")}, {ID: String("2")}}
   240  	if !reflect.DeepEqual(events, want) {
   241  		t.Errorf("Events.ListReceivedUser returned %+v, want %+v", events, want)
   242  	}
   243  }
   244  
   245  func TestActivityService_ListEventsReceivedByUser_publicOnly(t *testing.T) {
   246  	client, mux, _, teardown := setup()
   247  	defer teardown()
   248  
   249  	mux.HandleFunc("/users/u/received_events/public", func(w http.ResponseWriter, r *http.Request) {
   250  		testMethod(t, r, "GET")
   251  		fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`)
   252  	})
   253  
   254  	events, _, err := client.Activity.ListEventsReceivedByUser(context.Background(), "u", true, nil)
   255  	if err != nil {
   256  		t.Errorf("Events.ListReceivedByUser returned error: %v", err)
   257  	}
   258  
   259  	want := []*Event{{ID: String("1")}, {ID: String("2")}}
   260  	if !reflect.DeepEqual(events, want) {
   261  		t.Errorf("Events.ListReceivedByUser returned %+v, want %+v", events, want)
   262  	}
   263  }
   264  
   265  func TestActivityService_ListEventsReceivedByUser_invalidUser(t *testing.T) {
   266  	client, _, _, teardown := setup()
   267  	defer teardown()
   268  
   269  	_, _, err := client.Activity.ListEventsReceivedByUser(context.Background(), "%", false, nil)
   270  	testURLParseError(t, err)
   271  }
   272  
   273  func TestActivityService_ListUserEventsForOrganization(t *testing.T) {
   274  	client, mux, _, teardown := setup()
   275  	defer teardown()
   276  
   277  	mux.HandleFunc("/users/u/events/orgs/o", func(w http.ResponseWriter, r *http.Request) {
   278  		testMethod(t, r, "GET")
   279  		testFormValues(t, r, values{
   280  			"page": "2",
   281  		})
   282  		fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`)
   283  	})
   284  
   285  	opt := &ListOptions{Page: 2}
   286  	events, _, err := client.Activity.ListUserEventsForOrganization(context.Background(), "o", "u", opt)
   287  	if err != nil {
   288  		t.Errorf("Activities.ListUserEventsForOrganization returned error: %v", err)
   289  	}
   290  
   291  	want := []*Event{{ID: String("1")}, {ID: String("2")}}
   292  	if !reflect.DeepEqual(events, want) {
   293  		t.Errorf("Activities.ListUserEventsForOrganization returned %+v, want %+v", events, want)
   294  	}
   295  }
   296  
   297  func TestActivityService_EventParsePayload_typed(t *testing.T) {
   298  	raw := []byte(`{"type": "PushEvent","payload":{"push_id": 1}}`)
   299  	var event *Event
   300  	if err := json.Unmarshal(raw, &event); err != nil {
   301  		t.Fatalf("Unmarshal Event returned error: %v", err)
   302  	}
   303  
   304  	want := &PushEvent{PushID: Int64(1)}
   305  	got, err := event.ParsePayload()
   306  	if err != nil {
   307  		t.Fatalf("ParsePayload returned unexpected error: %v", err)
   308  	}
   309  	if !reflect.DeepEqual(got, want) {
   310  		t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want)
   311  	}
   312  }
   313  
   314  // TestEvent_Payload_untyped checks that unrecognized events are parsed to an
   315  // interface{} value (instead of being discarded or throwing an error), for
   316  // forward compatibility with new event types.
   317  func TestActivityService_EventParsePayload_untyped(t *testing.T) {
   318  	raw := []byte(`{"type": "UnrecognizedEvent","payload":{"field": "val"}}`)
   319  	var event *Event
   320  	if err := json.Unmarshal(raw, &event); err != nil {
   321  		t.Fatalf("Unmarshal Event returned error: %v", err)
   322  	}
   323  
   324  	want := map[string]interface{}{"field": "val"}
   325  	got, err := event.ParsePayload()
   326  	if err != nil {
   327  		t.Fatalf("ParsePayload returned unexpected error: %v", err)
   328  	}
   329  	if !reflect.DeepEqual(got, want) {
   330  		t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want)
   331  	}
   332  }
   333  
   334  func TestActivityService_EventParsePayload_installation(t *testing.T) {
   335  	raw := []byte(`{"type": "PullRequestEvent","payload":{"installation":{"id":1}}}`)
   336  	var event *Event
   337  	if err := json.Unmarshal(raw, &event); err != nil {
   338  		t.Fatalf("Unmarshal Event returned error: %v", err)
   339  	}
   340  
   341  	want := &PullRequestEvent{Installation: &Installation{ID: Int64(1)}}
   342  	got, err := event.ParsePayload()
   343  	if err != nil {
   344  		t.Fatalf("ParsePayload returned unexpected error: %v", err)
   345  	}
   346  	if !reflect.DeepEqual(got, want) {
   347  		t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want)
   348  	}
   349  }