github.com/google/go-github/v69@v69.2.0/github/admin_stats_test.go (about) 1 // Copyright 2017 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 TestAdminService_GetAdminStats(t *testing.T) { 18 t.Parallel() 19 client, mux, _ := setup(t) 20 21 mux.HandleFunc("/enterprise/stats/all", func(w http.ResponseWriter, r *http.Request) { 22 testMethod(t, r, "GET") 23 24 fmt.Fprint(w, ` 25 { 26 "repos": { 27 "total_repos": 212, 28 "root_repos": 194, 29 "fork_repos": 18, 30 "org_repos": 51, 31 "total_pushes": 3082, 32 "total_wikis": 15 33 }, 34 "hooks": { 35 "total_hooks": 27, 36 "active_hooks": 23, 37 "inactive_hooks": 4 38 }, 39 "pages": { 40 "total_pages": 36 41 }, 42 "orgs": { 43 "total_orgs": 33, 44 "disabled_orgs": 0, 45 "total_teams": 60, 46 "total_team_members": 314 47 }, 48 "users": { 49 "total_users": 254, 50 "admin_users": 45, 51 "suspended_users": 21 52 }, 53 "pulls": { 54 "total_pulls": 86, 55 "merged_pulls": 60, 56 "mergeable_pulls": 21, 57 "unmergeable_pulls": 3 58 }, 59 "issues": { 60 "total_issues": 179, 61 "open_issues": 83, 62 "closed_issues": 96 63 }, 64 "milestones": { 65 "total_milestones": 7, 66 "open_milestones": 6, 67 "closed_milestones": 1 68 }, 69 "gists": { 70 "total_gists": 178, 71 "private_gists": 151, 72 "public_gists": 25 73 }, 74 "comments": { 75 "total_commit_comments": 6, 76 "total_gist_comments": 28, 77 "total_issue_comments": 366, 78 "total_pull_request_comments": 30 79 } 80 } 81 `) 82 }) 83 84 ctx := context.Background() 85 stats, _, err := client.Admin.GetAdminStats(ctx) 86 if err != nil { 87 t.Errorf("AdminService.GetAdminStats returned error: %v", err) 88 } 89 90 if want := testAdminStats; !cmp.Equal(stats, want) { 91 t.Errorf("AdminService.GetAdminStats returned %+v, want %+v", stats, want) 92 } 93 94 const methodName = "GetAdminStats" 95 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 96 got, resp, err := client.Admin.GetAdminStats(ctx) 97 if got != nil { 98 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 99 } 100 return resp, err 101 }) 102 } 103 104 func TestAdminService_Stringify(t *testing.T) { 105 t.Parallel() 106 want := "github.AdminStats{Issues:github.IssueStats{TotalIssues:179, OpenIssues:83, ClosedIssues:96}, Hooks:github.HookStats{TotalHooks:27, ActiveHooks:23, InactiveHooks:4}, Milestones:github.MilestoneStats{TotalMilestones:7, OpenMilestones:6, ClosedMilestones:1}, Orgs:github.OrgStats{TotalOrgs:33, DisabledOrgs:0, TotalTeams:60, TotalTeamMembers:314}, Comments:github.CommentStats{TotalCommitComments:6, TotalGistComments:28, TotalIssueComments:366, TotalPullRequestComments:30}, Pages:github.PageStats{TotalPages:36}, Users:github.UserStats{TotalUsers:254, AdminUsers:45, SuspendedUsers:21}, Gists:github.GistStats{TotalGists:178, PrivateGists:151, PublicGists:25}, Pulls:github.PullStats{TotalPulls:86, MergedPulls:60, MergeablePulls:21, UnmergeablePulls:3}, Repos:github.RepoStats{TotalRepos:212, RootRepos:194, ForkRepos:18, OrgRepos:51, TotalPushes:3082, TotalWikis:15}}" 107 if got := testAdminStats.String(); got != want { 108 t.Errorf("testAdminStats.String = %q, want %q", got, want) 109 } 110 111 want = "github.IssueStats{TotalIssues:179, OpenIssues:83, ClosedIssues:96}" 112 if got := testAdminStats.Issues.String(); got != want { 113 t.Errorf("testAdminStats.Issues.String = %q, want %q", got, want) 114 } 115 116 want = "github.HookStats{TotalHooks:27, ActiveHooks:23, InactiveHooks:4}" 117 if got := testAdminStats.Hooks.String(); got != want { 118 t.Errorf("testAdminStats.Hooks.String = %q, want %q", got, want) 119 } 120 121 want = "github.MilestoneStats{TotalMilestones:7, OpenMilestones:6, ClosedMilestones:1}" 122 if got := testAdminStats.Milestones.String(); got != want { 123 t.Errorf("testAdminStats.Milestones.String = %q, want %q", got, want) 124 } 125 126 want = "github.OrgStats{TotalOrgs:33, DisabledOrgs:0, TotalTeams:60, TotalTeamMembers:314}" 127 if got := testAdminStats.Orgs.String(); got != want { 128 t.Errorf("testAdminStats.Orgs.String = %q, want %q", got, want) 129 } 130 131 want = "github.CommentStats{TotalCommitComments:6, TotalGistComments:28, TotalIssueComments:366, TotalPullRequestComments:30}" 132 if got := testAdminStats.Comments.String(); got != want { 133 t.Errorf("testAdminStats.Comments.String = %q, want %q", got, want) 134 } 135 136 want = "github.PageStats{TotalPages:36}" 137 if got := testAdminStats.Pages.String(); got != want { 138 t.Errorf("testAdminStats.Pages.String = %q, want %q", got, want) 139 } 140 141 want = "github.UserStats{TotalUsers:254, AdminUsers:45, SuspendedUsers:21}" 142 if got := testAdminStats.Users.String(); got != want { 143 t.Errorf("testAdminStats.Users.String = %q, want %q", got, want) 144 } 145 146 want = "github.GistStats{TotalGists:178, PrivateGists:151, PublicGists:25}" 147 if got := testAdminStats.Gists.String(); got != want { 148 t.Errorf("testAdminStats.Gists.String = %q, want %q", got, want) 149 } 150 151 want = "github.PullStats{TotalPulls:86, MergedPulls:60, MergeablePulls:21, UnmergeablePulls:3}" 152 if got := testAdminStats.Pulls.String(); got != want { 153 t.Errorf("testAdminStats.Pulls.String = %q, want %q", got, want) 154 } 155 156 want = "github.RepoStats{TotalRepos:212, RootRepos:194, ForkRepos:18, OrgRepos:51, TotalPushes:3082, TotalWikis:15}" 157 if got := testAdminStats.Repos.String(); got != want { 158 t.Errorf("testAdminStats.Repos.String = %q, want %q", got, want) 159 } 160 } 161 162 var testAdminStats = &AdminStats{ 163 Repos: &RepoStats{ 164 TotalRepos: Ptr(212), 165 RootRepos: Ptr(194), 166 ForkRepos: Ptr(18), 167 OrgRepos: Ptr(51), 168 TotalPushes: Ptr(3082), 169 TotalWikis: Ptr(15), 170 }, 171 Hooks: &HookStats{ 172 TotalHooks: Ptr(27), 173 ActiveHooks: Ptr(23), 174 InactiveHooks: Ptr(4), 175 }, 176 Pages: &PageStats{ 177 TotalPages: Ptr(36), 178 }, 179 Orgs: &OrgStats{ 180 TotalOrgs: Ptr(33), 181 DisabledOrgs: Ptr(0), 182 TotalTeams: Ptr(60), 183 TotalTeamMembers: Ptr(314), 184 }, 185 Users: &UserStats{ 186 TotalUsers: Ptr(254), 187 AdminUsers: Ptr(45), 188 SuspendedUsers: Ptr(21), 189 }, 190 Pulls: &PullStats{ 191 TotalPulls: Ptr(86), 192 MergedPulls: Ptr(60), 193 MergeablePulls: Ptr(21), 194 UnmergeablePulls: Ptr(3), 195 }, 196 Issues: &IssueStats{ 197 TotalIssues: Ptr(179), 198 OpenIssues: Ptr(83), 199 ClosedIssues: Ptr(96), 200 }, 201 Milestones: &MilestoneStats{ 202 TotalMilestones: Ptr(7), 203 OpenMilestones: Ptr(6), 204 ClosedMilestones: Ptr(1), 205 }, 206 Gists: &GistStats{ 207 TotalGists: Ptr(178), 208 PrivateGists: Ptr(151), 209 PublicGists: Ptr(25), 210 }, 211 Comments: &CommentStats{ 212 TotalCommitComments: Ptr(6), 213 TotalGistComments: Ptr(28), 214 TotalIssueComments: Ptr(366), 215 TotalPullRequestComments: Ptr(30), 216 }, 217 } 218 219 func TestIssueStats_Marshal(t *testing.T) { 220 t.Parallel() 221 testJSONMarshal(t, &IssueStats{}, "{}") 222 223 u := &IssueStats{ 224 TotalIssues: Ptr(1), 225 OpenIssues: Ptr(1), 226 ClosedIssues: Ptr(1), 227 } 228 229 want := `{ 230 "total_issues": 1, 231 "open_issues": 1, 232 "closed_issues": 1 233 }` 234 235 testJSONMarshal(t, u, want) 236 } 237 238 func TestHookStats_Marshal(t *testing.T) { 239 t.Parallel() 240 testJSONMarshal(t, &HookStats{}, "{}") 241 242 u := &HookStats{ 243 TotalHooks: Ptr(1), 244 ActiveHooks: Ptr(1), 245 InactiveHooks: Ptr(1), 246 } 247 248 want := `{ 249 "total_hooks": 1, 250 "active_hooks": 1, 251 "inactive_hooks": 1 252 }` 253 254 testJSONMarshal(t, u, want) 255 } 256 257 func TestMilestoneStats_Marshal(t *testing.T) { 258 t.Parallel() 259 testJSONMarshal(t, &MilestoneStats{}, "{}") 260 261 u := &MilestoneStats{ 262 TotalMilestones: Ptr(1), 263 OpenMilestones: Ptr(1), 264 ClosedMilestones: Ptr(1), 265 } 266 267 want := `{ 268 "total_milestones": 1, 269 "open_milestones": 1, 270 "closed_milestones": 1 271 }` 272 273 testJSONMarshal(t, u, want) 274 } 275 276 func TestOrgStats_Marshal(t *testing.T) { 277 t.Parallel() 278 testJSONMarshal(t, &OrgStats{}, "{}") 279 280 u := &OrgStats{ 281 TotalOrgs: Ptr(1), 282 DisabledOrgs: Ptr(1), 283 TotalTeams: Ptr(1), 284 TotalTeamMembers: Ptr(1), 285 } 286 287 want := `{ 288 "total_orgs": 1, 289 "disabled_orgs": 1, 290 "total_teams": 1, 291 "total_team_members": 1 292 }` 293 294 testJSONMarshal(t, u, want) 295 } 296 297 func TestCommentStats_Marshal(t *testing.T) { 298 t.Parallel() 299 testJSONMarshal(t, &CommentStats{}, "{}") 300 301 u := &CommentStats{ 302 TotalCommitComments: Ptr(1), 303 TotalGistComments: Ptr(1), 304 TotalIssueComments: Ptr(1), 305 TotalPullRequestComments: Ptr(1), 306 } 307 308 want := `{ 309 "total_commit_comments": 1, 310 "total_gist_comments": 1, 311 "total_issue_comments": 1, 312 "total_pull_request_comments": 1 313 }` 314 315 testJSONMarshal(t, u, want) 316 } 317 318 func TestPageStats_Marshal(t *testing.T) { 319 t.Parallel() 320 testJSONMarshal(t, &PageStats{}, "{}") 321 322 u := &PageStats{ 323 TotalPages: Ptr(1), 324 } 325 326 want := `{ 327 "total_pages": 1 328 }` 329 330 testJSONMarshal(t, u, want) 331 } 332 333 func TestUserStats_Marshal(t *testing.T) { 334 t.Parallel() 335 testJSONMarshal(t, &UserStats{}, "{}") 336 337 u := &UserStats{ 338 TotalUsers: Ptr(1), 339 AdminUsers: Ptr(1), 340 SuspendedUsers: Ptr(1), 341 } 342 343 want := `{ 344 "total_users": 1, 345 "admin_users": 1, 346 "suspended_users": 1 347 }` 348 349 testJSONMarshal(t, u, want) 350 } 351 352 func TestGistStats_Marshal(t *testing.T) { 353 t.Parallel() 354 testJSONMarshal(t, &GistStats{}, "{}") 355 356 u := &GistStats{ 357 TotalGists: Ptr(1), 358 PrivateGists: Ptr(1), 359 PublicGists: Ptr(1), 360 } 361 362 want := `{ 363 "total_gists": 1, 364 "private_gists": 1, 365 "public_gists": 1 366 }` 367 368 testJSONMarshal(t, u, want) 369 } 370 371 func TestPullStats_Marshal(t *testing.T) { 372 t.Parallel() 373 testJSONMarshal(t, &PullStats{}, "{}") 374 375 u := &PullStats{ 376 TotalPulls: Ptr(1), 377 MergedPulls: Ptr(1), 378 MergeablePulls: Ptr(1), 379 UnmergeablePulls: Ptr(1), 380 } 381 382 want := `{ 383 "total_pulls": 1, 384 "merged_pulls": 1, 385 "mergeable_pulls": 1, 386 "unmergeable_pulls": 1 387 }` 388 389 testJSONMarshal(t, u, want) 390 } 391 392 func TestRepoStats_Marshal(t *testing.T) { 393 t.Parallel() 394 testJSONMarshal(t, &RepoStats{}, "{}") 395 396 u := &RepoStats{ 397 TotalRepos: Ptr(1), 398 RootRepos: Ptr(1), 399 ForkRepos: Ptr(1), 400 OrgRepos: Ptr(1), 401 TotalPushes: Ptr(1), 402 TotalWikis: Ptr(1), 403 } 404 405 want := `{ 406 "total_repos": 1, 407 "root_repos": 1, 408 "fork_repos": 1, 409 "org_repos": 1, 410 "total_pushes": 1, 411 "total_wikis": 1 412 }` 413 414 testJSONMarshal(t, u, want) 415 } 416 417 func TestAdminStats_Marshal(t *testing.T) { 418 t.Parallel() 419 testJSONMarshal(t, &AdminStats{}, "{}") 420 421 u := &AdminStats{ 422 Repos: &RepoStats{ 423 TotalRepos: Ptr(212), 424 RootRepos: Ptr(194), 425 ForkRepos: Ptr(18), 426 OrgRepos: Ptr(51), 427 TotalPushes: Ptr(3082), 428 TotalWikis: Ptr(15), 429 }, 430 Hooks: &HookStats{ 431 TotalHooks: Ptr(27), 432 ActiveHooks: Ptr(23), 433 InactiveHooks: Ptr(4), 434 }, 435 Pages: &PageStats{ 436 TotalPages: Ptr(36), 437 }, 438 Orgs: &OrgStats{ 439 TotalOrgs: Ptr(33), 440 DisabledOrgs: Ptr(0), 441 TotalTeams: Ptr(60), 442 TotalTeamMembers: Ptr(314), 443 }, 444 Users: &UserStats{ 445 TotalUsers: Ptr(254), 446 AdminUsers: Ptr(45), 447 SuspendedUsers: Ptr(21), 448 }, 449 Pulls: &PullStats{ 450 TotalPulls: Ptr(86), 451 MergedPulls: Ptr(60), 452 MergeablePulls: Ptr(21), 453 UnmergeablePulls: Ptr(3), 454 }, 455 Issues: &IssueStats{ 456 TotalIssues: Ptr(179), 457 OpenIssues: Ptr(83), 458 ClosedIssues: Ptr(96), 459 }, 460 Milestones: &MilestoneStats{ 461 TotalMilestones: Ptr(7), 462 OpenMilestones: Ptr(6), 463 ClosedMilestones: Ptr(1), 464 }, 465 Gists: &GistStats{ 466 TotalGists: Ptr(178), 467 PrivateGists: Ptr(151), 468 PublicGists: Ptr(25), 469 }, 470 Comments: &CommentStats{ 471 TotalCommitComments: Ptr(6), 472 TotalGistComments: Ptr(28), 473 TotalIssueComments: Ptr(366), 474 TotalPullRequestComments: Ptr(30), 475 }, 476 } 477 478 want := `{ 479 "repos": { 480 "total_repos": 212, 481 "root_repos": 194, 482 "fork_repos": 18, 483 "org_repos": 51, 484 "total_pushes": 3082, 485 "total_wikis": 15 486 }, 487 "hooks": { 488 "total_hooks": 27, 489 "active_hooks": 23, 490 "inactive_hooks": 4 491 }, 492 "pages": { 493 "total_pages": 36 494 }, 495 "orgs": { 496 "total_orgs": 33, 497 "disabled_orgs": 0, 498 "total_teams": 60, 499 "total_team_members": 314 500 }, 501 "users": { 502 "total_users": 254, 503 "admin_users": 45, 504 "suspended_users": 21 505 }, 506 "pulls": { 507 "total_pulls": 86, 508 "merged_pulls": 60, 509 "mergeable_pulls": 21, 510 "unmergeable_pulls": 3 511 }, 512 "issues": { 513 "total_issues": 179, 514 "open_issues": 83, 515 "closed_issues": 96 516 }, 517 "milestones": { 518 "total_milestones": 7, 519 "open_milestones": 6, 520 "closed_milestones": 1 521 }, 522 "gists": { 523 "total_gists": 178, 524 "private_gists": 151, 525 "public_gists": 25 526 }, 527 "comments": { 528 "total_commit_comments": 6, 529 "total_gist_comments": 28, 530 "total_issue_comments": 366, 531 "total_pull_request_comments": 30 532 } 533 }` 534 535 testJSONMarshal(t, u, want) 536 }