github.com/google/go-github/v70@v70.0.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  }