github.com/google/go-github/v64@v64.0.0/github/event_test.go (about) 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 }