1
2
3
4
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("[")
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