...

Source file src/github.com/google/go-github/v55/github/event_test.go

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

     1  // Copyright 2020 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  	"encoding/json"
    10  	"testing"
    11  )
    12  
    13  func TestPayload_Panic(t *testing.T) {
    14  	defer func() {
    15  		if r := recover(); r == nil {
    16  			t.Errorf("Payload did not panic but should have")
    17  		}
    18  	}()
    19  
    20  	name := "UserEvent"
    21  	body := json.RawMessage("[") // bogus JSON
    22  	e := &Event{Type: &name, RawPayload: &body}
    23  	e.Payload()
    24  }
    25  
    26  func TestPayload_NoPanic(t *testing.T) {
    27  	name := "UserEvent"
    28  	body := json.RawMessage("{}")
    29  	e := &Event{Type: &name, RawPayload: &body}
    30  	e.Payload()
    31  }
    32  
    33  func TestEmptyEvent_NoPanic(t *testing.T) {
    34  	e := &Event{}
    35  	if _, err := e.ParsePayload(); err == nil {
    36  		t.Error("ParsePayload unexpectedly succeeded on empty event")
    37  	}
    38  
    39  	e = nil
    40  	if _, err := e.ParsePayload(); err == nil {
    41  		t.Error("ParsePayload unexpectedly succeeded on nil event")
    42  	}
    43  }
    44  
    45  func TestEvent_Marshal(t *testing.T) {
    46  	testJSONMarshal(t, &Event{}, "{}")
    47  
    48  	l := make(map[string]interface{})
    49  	l["key"] = "value"
    50  
    51  	jsonMsg, _ := json.Marshal(&l)
    52  
    53  	u := &Event{
    54  		Type:       String("t"),
    55  		Public:     Bool(false),
    56  		RawPayload: (*json.RawMessage)(&jsonMsg),
    57  		Repo: &Repository{
    58  			ID:   Int64(1),
    59  			URL:  String("s"),
    60  			Name: String("n"),
    61  		},
    62  		Actor: &User{
    63  			Login:     String("l"),
    64  			ID:        Int64(1),
    65  			NodeID:    String("n"),
    66  			URL:       String("u"),
    67  			ReposURL:  String("r"),
    68  			EventsURL: String("e"),
    69  			AvatarURL: String("a"),
    70  		},
    71  		Org: &Organization{
    72  			BillingEmail:                         String("be"),
    73  			Blog:                                 String("b"),
    74  			Company:                              String("c"),
    75  			Email:                                String("e"),
    76  			TwitterUsername:                      String("tu"),
    77  			Location:                             String("loc"),
    78  			Name:                                 String("n"),
    79  			Description:                          String("d"),
    80  			IsVerified:                           Bool(true),
    81  			HasOrganizationProjects:              Bool(true),
    82  			HasRepositoryProjects:                Bool(true),
    83  			DefaultRepoPermission:                String("drp"),
    84  			MembersCanCreateRepos:                Bool(true),
    85  			MembersCanCreateInternalRepos:        Bool(true),
    86  			MembersCanCreatePrivateRepos:         Bool(true),
    87  			MembersCanCreatePublicRepos:          Bool(false),
    88  			MembersAllowedRepositoryCreationType: String("marct"),
    89  			MembersCanCreatePages:                Bool(true),
    90  			MembersCanCreatePublicPages:          Bool(false),
    91  			MembersCanCreatePrivatePages:         Bool(true),
    92  		},
    93  		CreatedAt: &Timestamp{referenceTime},
    94  		ID:        String("id"),
    95  	}
    96  
    97  	want := `{
    98  		"type": "t",
    99  		"public": false,
   100  		"payload": {
   101  			"key": "value"
   102  		},
   103  		"repo": {
   104  			"id": 1,
   105  			"name": "n",
   106  			"url": "s"
   107  		},
   108  		"actor": {
   109  			"login": "l",
   110  			"id": 1,
   111  			"node_id": "n",
   112  			"avatar_url": "a",
   113  			"url": "u",
   114  			"events_url": "e",
   115  			"repos_url": "r"
   116  		},
   117  		"org": {
   118  			"name": "n",
   119  			"company": "c",
   120  			"blog": "b",
   121  			"location": "loc",
   122  			"email": "e",
   123  			"twitter_username": "tu",
   124  			"description": "d",
   125  			"billing_email": "be",
   126  			"is_verified": true,
   127  			"has_organization_projects": true,
   128  			"has_repository_projects": true,
   129  			"default_repository_permission": "drp",
   130  			"members_can_create_repositories": true,
   131  			"members_can_create_public_repositories": false,
   132  			"members_can_create_private_repositories": true,
   133  			"members_can_create_internal_repositories": true,
   134  			"members_allowed_repository_creation_type": "marct",
   135  			"members_can_create_pages": true,
   136  			"members_can_create_public_pages": false,
   137  			"members_can_create_private_pages": true
   138  		},
   139  		"created_at": ` + referenceTimeStr + `,
   140  		"id": "id"
   141  	}`
   142  
   143  	testJSONMarshal(t, u, want)
   144  }
   145  

View as plain text