internal/control/stage3admin_test.go
70 lines · 2536 bytes
4 symbols in this file
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}