15 func TestBadRegister(t *testing.T) {
16 srv := newTestServer()
17 httpsrv := httptest.NewServer(NewWebServer(srv.Aliases, srv.Users))
18 client := httpsrv.Client()
20 registrations := []url.Values{
21 // this user already exists; created in newTestServer.
23 "username": []string{testUsername},
24 "password": []string{testPassword},
26 // username isn't an email address
28 "username": []string{"bla bla hello world!"},
29 "password": []string{testPassword},
33 "username": []string{testUsername},
34 "password": []string{},
37 for i, form := range registrations {
38 resp, err := client.PostForm(httpsrv.URL+"/v1/register", form)
42 if resp.StatusCode != http.StatusBadRequest {
43 t.Errorf("bad registration case %d got HTTP status %s", i, resp.Status)
44 b, err := io.ReadAll(resp.Body)
53 // TestAliasLifecycle tests creating, reading, updating then deleting an alias.
54 func TestAliasLifecycle(t *testing.T) {
55 srv := newTestServer()
56 httpsrv := httptest.NewServer(NewWebServer(srv.Aliases, srv.Users))
57 client := httpsrv.Client()
59 req, err := http.NewRequest(http.MethodPost, httpsrv.URL+"/v1/aliases", nil)
60 req.SetBasicAuth(testUsername, testPassword)
61 resp, err := client.Do(req)
63 t.Fatalf("create alias: %v", err)
65 defer resp.Body.Close()
67 if err := json.NewDecoder(resp.Body).Decode(&alias); err != nil {
68 t.Fatalf("decode new alias response: %v", err)
71 req, err = http.NewRequest(http.MethodGet, httpsrv.URL+"/v1/aliases", nil)
72 req.SetBasicAuth(testUsername, testPassword)
73 resp, err = client.Do(req)
75 t.Fatalf("list aliases: %v", err)
77 defer resp.Body.Close()
78 if resp.StatusCode != http.StatusOK {
79 b, _ := io.ReadAll(resp.Body)
81 t.Fatalf("list aliases: HTTP status %s", resp.Status)
84 if err := json.NewDecoder(resp.Body).Decode(&aliases); err != nil {
85 t.Fatalf("decode list aliases response: %v", err)
88 // update alias by adding a note and expiry time
90 v.Set("expiry", strconv.Itoa(int(time.Now().Add(time.Hour).Unix())))
91 v.Set("note", "a test note to describe something")
92 req, err = http.NewRequest(http.MethodPost, httpsrv.URL+"/v1/aliases/"+alias.Recipient, strings.NewReader(v.Encode()))
94 t.Fatalf("create update request: %v", err)
96 req.SetBasicAuth(testUsername, testPassword)
97 resp, err = client.Do(req)
99 t.Fatalf("update alias: %v", err)
101 if resp.StatusCode != http.StatusOK {
102 b, _ := io.ReadAll(resp.Body)
104 t.Fatalf("update alias: HTTP status %s", resp.Status)
106 defer resp.Body.Close()
107 if err := json.NewDecoder(resp.Body).Decode(&alias); err != nil {
108 t.Fatalf("decode updated alias response: %v", err)
111 req, err = http.NewRequest(http.MethodDelete, httpsrv.URL+"/v1/aliases/"+alias.Recipient, nil)
113 t.Fatalf("create delete request: %v", err)
115 req.SetBasicAuth(testUsername, testPassword)
116 resp, err = client.Do(req)
118 t.Fatalf("delete alias: %v", err)
120 if resp.StatusCode != http.StatusNoContent {
121 b, _ := io.ReadAll(resp.Body)
123 t.Fatalf("delete alias: HTTP status %s", resp.Status)