e2e/emailremove_test.go

v1.20.0
gitbay/e2e/emailremove_test.go history · blame · raw

64 lines · 2519 bytes

 1package e2e
 2
 3import (
 4	"encoding/json"
 5	"fmt"
 6	"strings"
 7	"testing"
 8)
 9
10// An address can be removed and the primary moved, within the rules the
11// store holds: the primary stays until another is primary, and the last
12// verified address stays (#181).
13func TestEmailRemoveAndPrimary(t *testing.T) {
14	smtp := startFakeSMTP(t)
15	inst := startInstanceWith(t, fmt.Sprintf(
16		"[mail]\nsmtp_host = %q\nfrom = \"noreply@gitbay.test\"\n", smtp.addr))
17	key := inst.newKey(t, "gus")
18	inst.admin(t, "admin", "user", "create", "gus",
19		"--key", key+".pub", "--email", "gus@primary.test", "--verified")
20	for _, a := range []string{"typo@example.test", "gus@next.test"} {
21		if _, errOut, code := inst.ssh(t, key, "", "email", "add", a); code != 0 {
22			t.Fatalf("email add %s: %s", a, errOut)
23		}
24	}
25
26	if _, errOut, code := inst.ssh(t, key, "", "email", "remove", "gus@primary.test"); code != 4 || !strings.Contains(errOut, "primary") {
27		t.Fatalf("removing the primary: exit %d %s", code, errOut)
28	}
29	if _, errOut, code := inst.ssh(t, key, "", "email", "remove", "nobody@example.test"); code != 3 {
30		t.Fatalf("removing an absent address: exit %d %s", code, errOut)
31	}
32	if _, errOut, code := inst.ssh(t, key, "", "email", "primary", "gus@next.test"); code != 4 || !strings.Contains(errOut, "not verified") {
33		t.Fatalf("unverified address as primary: exit %d %s", code, errOut)
34	}
35	if _, errOut, code := inst.ssh(t, key, "", "email", "remove", "typo@example.test"); code != 0 {
36		t.Fatalf("removing an unverified address: exit %d %s", code, errOut)
37	}
38
39	inst.admin(t, "admin", "email", "verify", "gus", "gus@next.test")
40	if _, errOut, code := inst.ssh(t, key, "", "email", "primary", "gus@next.test"); code != 0 {
41		t.Fatalf("email primary: exit %d %s", code, errOut)
42	}
43	if _, errOut, code := inst.ssh(t, key, "", "email", "remove", "gus@primary.test"); code != 0 {
44		t.Fatalf("removing the former primary: exit %d %s", code, errOut)
45	}
46
47	out, errOut, code := inst.ssh(t, key, "", "email", "list", "--json")
48	if code != 0 {
49		t.Fatalf("email list: exit %d %s", code, errOut)
50	}
51	var env struct {
52		Data []struct {
53			Address  string `json:"address"`
54			Verified bool   `json:"verified"`
55			Primary  bool   `json:"primary"`
56		} `json:"data"`
57	}
58	if err := json.Unmarshal([]byte(out), &env); err != nil {
59		t.Fatalf("email list --json: %v\n%s", err, out)
60	}
61	if len(env.Data) != 1 || env.Data[0].Address != "gus@next.test" || !env.Data[0].Verified || !env.Data[0].Primary {
62		t.Fatalf("addresses after the changes: %+v", env.Data)
63	}
64}