Skip to content

Commit f48f9cd

Browse files
committed
tests: simplify tests
1 parent 9d10d65 commit f48f9cd

File tree

6 files changed

+167
-810
lines changed

6 files changed

+167
-810
lines changed

account_test.go

Lines changed: 19 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,17 @@ package desec
22

33
import (
44
"context"
5-
"io"
65
"net/http"
7-
"net/http/httptest"
8-
"os"
96
"testing"
107

118
"github.com/stretchr/testify/assert"
129
"github.com/stretchr/testify/require"
1310
)
1411

1512
func TestAccountClient_ObtainCaptcha(t *testing.T) {
16-
mux := http.NewServeMux()
17-
server := httptest.NewServer(mux)
18-
t.Cleanup(server.Close)
19-
20-
client := New("", NewDefaultClientOptions())
21-
client.BaseURL = server.URL
22-
23-
mux.HandleFunc("/captcha/", func(rw http.ResponseWriter, req *http.Request) {
24-
if req.Method != http.MethodPost {
25-
http.Error(rw, "invalid method", http.StatusMethodNotAllowed)
26-
return
27-
}
28-
29-
file, err := os.Open("./fixtures/accounts_captcha.json")
30-
if err != nil {
31-
http.Error(rw, err.Error(), http.StatusInternalServerError)
32-
return
33-
}
34-
35-
defer func() { _ = file.Close() }()
36-
37-
_, err = io.Copy(rw, file)
38-
if err != nil {
39-
http.Error(rw, err.Error(), http.StatusInternalServerError)
40-
return
41-
}
42-
})
13+
client, mux := setupTest(t, "")
14+
15+
mux.HandleFunc("POST /captcha/", fromFixtures("accounts_captcha.json", http.StatusOK))
4316

4417
captcha, err := client.Account.ObtainCaptcha(context.Background())
4518
require.NoError(t, err)
@@ -52,19 +25,9 @@ func TestAccountClient_ObtainCaptcha(t *testing.T) {
5225
}
5326

5427
func TestAccountClient_Register(t *testing.T) {
55-
mux := http.NewServeMux()
56-
server := httptest.NewServer(mux)
57-
t.Cleanup(server.Close)
58-
59-
client := New("", NewDefaultClientOptions())
60-
client.BaseURL = server.URL
61-
62-
mux.HandleFunc("/auth/", func(rw http.ResponseWriter, req *http.Request) {
63-
if req.Method != http.MethodPost {
64-
http.Error(rw, "invalid method", http.StatusMethodNotAllowed)
65-
return
66-
}
28+
client, mux := setupTest(t, "")
6729

30+
mux.HandleFunc("POST /auth/", func(rw http.ResponseWriter, _ *http.Request) {
6831
rw.WriteHeader(http.StatusAccepted)
6932
})
7033

@@ -82,33 +45,9 @@ func TestAccountClient_Register(t *testing.T) {
8245
}
8346

8447
func TestAccountClient_Login(t *testing.T) {
85-
mux := http.NewServeMux()
86-
server := httptest.NewServer(mux)
87-
t.Cleanup(server.Close)
88-
89-
client := New("", NewDefaultClientOptions())
90-
client.BaseURL = server.URL
91-
92-
mux.HandleFunc("/auth/login/", func(rw http.ResponseWriter, req *http.Request) {
93-
if req.Method != http.MethodPost {
94-
http.Error(rw, "invalid method", http.StatusMethodNotAllowed)
95-
return
96-
}
97-
98-
file, err := os.Open("./fixtures/accounts_login.json")
99-
if err != nil {
100-
http.Error(rw, err.Error(), http.StatusInternalServerError)
101-
return
102-
}
103-
104-
defer func() { _ = file.Close() }()
105-
106-
_, err = io.Copy(rw, file)
107-
if err != nil {
108-
http.Error(rw, err.Error(), http.StatusInternalServerError)
109-
return
110-
}
111-
})
48+
client, mux := setupTest(t, "")
49+
50+
mux.HandleFunc("POST /auth/login/", fromFixtures("accounts_login.json", http.StatusOK))
11251

11352
token, err := client.Account.Login(context.Background(), "[email protected]", "secret")
11453
require.NoError(t, err)
@@ -125,19 +64,9 @@ func TestAccountClient_Login(t *testing.T) {
12564
}
12665

12766
func TestAccountClient_Logout(t *testing.T) {
128-
mux := http.NewServeMux()
129-
server := httptest.NewServer(mux)
130-
t.Cleanup(server.Close)
131-
132-
client := New("f07Q0TRmEb-CRWPe4h64_iV2jbet", NewDefaultClientOptions())
133-
client.BaseURL = server.URL
134-
135-
mux.HandleFunc("/auth/logout/", func(rw http.ResponseWriter, req *http.Request) {
136-
if req.Method != http.MethodPost {
137-
http.Error(rw, "invalid method", http.StatusMethodNotAllowed)
138-
return
139-
}
67+
client, mux := setupTest(t, "f07Q0TRmEb-CRWPe4h64_iV2jbet")
14068

69+
mux.HandleFunc("POST /auth/logout/", func(rw http.ResponseWriter, _ *http.Request) {
14170
rw.WriteHeader(http.StatusNoContent)
14271
})
14372

@@ -148,33 +77,9 @@ func TestAccountClient_Logout(t *testing.T) {
14877
}
14978

15079
func TestAccountClient_RetrieveInformation(t *testing.T) {
151-
mux := http.NewServeMux()
152-
server := httptest.NewServer(mux)
153-
t.Cleanup(server.Close)
154-
155-
client := New("f07Q0TRmEb-CRWPe4h64_iV2jbet", NewDefaultClientOptions())
156-
client.BaseURL = server.URL
157-
158-
mux.HandleFunc("/auth/account/", func(rw http.ResponseWriter, req *http.Request) {
159-
if req.Method != http.MethodPost {
160-
http.Error(rw, "invalid method", http.StatusMethodNotAllowed)
161-
return
162-
}
163-
164-
file, err := os.Open("./fixtures/accounts_retrieve.json")
165-
if err != nil {
166-
http.Error(rw, err.Error(), http.StatusInternalServerError)
167-
return
168-
}
169-
170-
defer func() { _ = file.Close() }()
171-
172-
_, err = io.Copy(rw, file)
173-
if err != nil {
174-
http.Error(rw, err.Error(), http.StatusInternalServerError)
175-
return
176-
}
177-
})
80+
client, mux := setupTest(t, "f07Q0TRmEb-CRWPe4h64_iV2jbet")
81+
82+
mux.HandleFunc("POST /auth/account/", fromFixtures("accounts_retrieve.json", http.StatusOK))
17883

17984
account, err := client.Account.RetrieveInformation(context.Background())
18085
require.NoError(t, err)
@@ -188,19 +93,9 @@ func TestAccountClient_RetrieveInformation(t *testing.T) {
18893
}
18994

19095
func TestAccountClient_PasswordReset(t *testing.T) {
191-
mux := http.NewServeMux()
192-
server := httptest.NewServer(mux)
193-
t.Cleanup(server.Close)
194-
195-
client := New("", NewDefaultClientOptions())
196-
client.BaseURL = server.URL
197-
198-
mux.HandleFunc("/", func(rw http.ResponseWriter, req *http.Request) {
199-
if req.Method != http.MethodPost {
200-
http.Error(rw, "invalid method", http.StatusMethodNotAllowed)
201-
return
202-
}
96+
client, mux := setupTest(t, "")
20397

98+
mux.HandleFunc("POST /", func(rw http.ResponseWriter, _ *http.Request) {
20499
rw.WriteHeader(http.StatusAccepted)
205100
})
206101

@@ -214,19 +109,9 @@ func TestAccountClient_PasswordReset(t *testing.T) {
214109
}
215110

216111
func TestAccountClient_ChangeEmail(t *testing.T) {
217-
mux := http.NewServeMux()
218-
server := httptest.NewServer(mux)
219-
t.Cleanup(server.Close)
220-
221-
client := New("", NewDefaultClientOptions())
222-
client.BaseURL = server.URL
223-
224-
mux.HandleFunc("/", func(rw http.ResponseWriter, req *http.Request) {
225-
if req.Method != http.MethodPost {
226-
http.Error(rw, "invalid method", http.StatusMethodNotAllowed)
227-
return
228-
}
112+
client, mux := setupTest(t, "")
229113

114+
mux.HandleFunc("POST /", func(rw http.ResponseWriter, _ *http.Request) {
230115
rw.WriteHeader(http.StatusAccepted)
231116
})
232117

@@ -235,19 +120,9 @@ func TestAccountClient_ChangeEmail(t *testing.T) {
235120
}
236121

237122
func TestAccountClient_Delete(t *testing.T) {
238-
mux := http.NewServeMux()
239-
server := httptest.NewServer(mux)
240-
t.Cleanup(server.Close)
241-
242-
client := New("", NewDefaultClientOptions())
243-
client.BaseURL = server.URL
244-
245-
mux.HandleFunc("/auth/account/delete/", func(rw http.ResponseWriter, req *http.Request) {
246-
if req.Method != http.MethodPost {
247-
http.Error(rw, "invalid method", http.StatusMethodNotAllowed)
248-
return
249-
}
123+
client, mux := setupTest(t, "")
250124

125+
mux.HandleFunc("POST /auth/account/delete/", func(rw http.ResponseWriter, _ *http.Request) {
251126
rw.WriteHeader(http.StatusAccepted)
252127
})
253128

desec_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package desec
2+
3+
import (
4+
"io"
5+
"net/http"
6+
"net/http/httptest"
7+
"os"
8+
"path/filepath"
9+
"testing"
10+
"time"
11+
)
12+
13+
func setupTest(t *testing.T, token string) (*Client, *http.ServeMux) {
14+
t.Helper()
15+
16+
mux := http.NewServeMux()
17+
server := httptest.NewServer(mux)
18+
t.Cleanup(server.Close)
19+
20+
options := NewDefaultClientOptions()
21+
options.HTTPClient = server.Client()
22+
23+
client := New(token, options)
24+
client.BaseURL = server.URL
25+
26+
return client, mux
27+
}
28+
29+
func fromFixtures(filename string, statusCode int) http.HandlerFunc {
30+
return func(rw http.ResponseWriter, _ *http.Request) {
31+
rw.Header().Set("Content-Type", "application/json")
32+
33+
file, err := os.Open(filepath.Clean(filepath.Join("fixtures", filename)))
34+
if err != nil {
35+
http.Error(rw, err.Error(), http.StatusInternalServerError)
36+
37+
return
38+
}
39+
40+
defer func() { _ = file.Close() }()
41+
42+
rw.WriteHeader(statusCode)
43+
44+
_, err = io.Copy(rw, file)
45+
if err != nil {
46+
http.Error(rw, err.Error(), http.StatusInternalServerError)
47+
48+
return
49+
}
50+
}
51+
}
52+
53+
func mustParseTime(value string) *time.Time {
54+
date, _ := time.Parse(time.RFC3339, value)
55+
return &date
56+
}

0 commit comments

Comments
 (0)