internal/control/stage3admin_test.go

v1.42.0
gitbay/internal/control/stage3admin_test.go history · blame · raw

70 lines · 2536 bytes

 1package control
 2
 3import (
 4	"regexp"
 5	"strings"
 6	"testing"
 7
 8	"gitbay.org/gitbay/internal/store"
 9)
10
11var diskBytes = regexp.MustCompile(`\t\d{4,}\t|\d+\.\d KiB`)
12
13// adminFixture is the work fixture with alice as an instance admin, a
14// second account, and a closed merge request to prune.
15func adminFixture(t *testing.T) (*store.Store, store.Repo, store.User, string) {
16	t.Helper()
17	st, repo, u, root, _ := workFixture(t)
18	if err := st.SetUserAdmin(u.ID, true); err != nil {
19		t.Fatal(err)
20	}
21	u.IsAdmin = true
22	dispatchIn(t, st, u, root, "", "admin", "user", "create", "bob")
23	dispatchIn(t, st, u, root, "", "mr", "close", repo.Path(), "1")
24	return st, repo, u, root
25}
26
27func TestAdminPlainPinned(t *testing.T) {
28	st, repo, u, root := adminFixture(t)
29	for name, argv := range map[string][]string{
30		"admin-user-list":          {"admin", "user", "list"},
31		"admin-user-show":          {"admin", "user", "show", "alice"},
32		"admin-runners":            {"admin", "runners"},
33		"admin-repo-list":          {"admin", "repo", "list"},
34		"admin-stats":              {"admin", "stats"},
35		"admin-mail-inbound-check": {"admin", "mail", "inbound", "check"},
36	} {
37		got := dispatchIn(t, st, u, root, "", argv...)
38		// A repository's size on disk moves by a few bytes between runs.
39		got = diskBytes.ReplaceAllString(got, "<size>")
40		pinPlain(t, name, got)
41	}
42	pinPlain(t, "admin-mr-prune", dispatchIn(t, st, u, root, "", "admin", "mr", "prune", repo.Path(), "1", "--yes"))
43}
44
45func TestAdminScreens(t *testing.T) {
46	st, repo, u, root := adminFixture(t)
47	for _, tc := range []struct {
48		argv []string
49		want []string
50	}{
51		{[]string{"admin", "user", "list"}, []string{"Accounts (3)\n", "alice", "bob", "admin"}},
52		{[]string{"admin", "user", "show", "alice"}, []string{"User:", "alice", "active", "gitbay admin user demote alice"}},
53		{[]string{"admin", "runners"}, []string{"Queue:", "0 pending"}},
54		{[]string{"admin", "repo", "list"}, []string{"Repositories (1)\n", "alice/app"}},
55		{[]string{"admin", "stats"}, []string{"Users:", "2", "Repos:", "Disk:"}},
56		{[]string{"admin", "mail", "inbound", "check"}, []string{"Inbound:  off\n"}},
57		{[]string{"admin", "mr", "prune", repo.Path(), "1", "--yes"}, []string{"Pruned (1)\n", "!1", "already gone"}},
58	} {
59		out := atTerminalIn(t, st, u, root, tc.argv...)
60		for _, w := range tc.want {
61			if !strings.Contains(out, w) {
62				t.Errorf("%v: missing %q in:\n%s", tc.argv, w, out)
63			}
64		}
65		if strings.Contains(tc.argv[1], "mail") || tc.argv[1] == "runners" {
66			continue
67		}
68		checkLegend(t, out)
69	}
70}