Skip to content

Commit 41973b3

Browse files
committed
test: Extract general http request recorder
This is a common pattern for testing in particular form submission
1 parent b6b86a8 commit 41973b3

File tree

4 files changed

+41
-37
lines changed

4 files changed

+41
-37
lines changed

html/html_form_element_checkbox_test.go

+2-23
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package html_test
22

33
import (
4-
"net/http"
54
"testing"
65

76
"github.com/gost-dom/browser/html"
7+
"github.com/gost-dom/browser/internal/testing/gosttest"
88
"github.com/gost-dom/browser/internal/testing/htmltest"
99
"github.com/stretchr/testify/suite"
1010
)
@@ -17,29 +17,8 @@ func TestHTMLFormElementWithCheckbox(t *testing.T) {
1717
suite.Run(t, new(HTMLFormElementWithCheckboxTestSuite))
1818
}
1919

20-
// httpRequestRecorder is a very simple http.Handler that just records the
21-
// incoming requests, and returns a 200 status
22-
type httpRequestRecorder struct {
23-
t testing.TB
24-
requests []*http.Request
25-
}
26-
27-
func (rec *httpRequestRecorder) ServeHTTP(w http.ResponseWriter, r *http.Request) {
28-
r.ParseForm()
29-
rec.requests = append(rec.requests, r)
30-
}
31-
32-
// Single asserts that a single request was made
33-
func (r httpRequestRecorder) Single() *http.Request {
34-
r.t.Helper()
35-
if len(r.requests) != 1 {
36-
r.t.Errorf("Expected single recorded request. Got: %d", len(r.requests))
37-
}
38-
return r.requests[0]
39-
}
40-
4120
func (s *HTMLFormElementWithCheckboxTestSuite) TestSubmitWithCheckboxes() {
42-
rec := &httpRequestRecorder{t: s.T()}
21+
rec := &gosttest.HttpRequestFormRecorder{T: s.T()}
4322
win := htmltest.NewWindowHelper(s.T(), NewWindowFromHandler(rec))
4423
win.LoadHTML(`<body>
4524
<form method="post">

html/html_form_element_submit_test.go

+6-12
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/gost-dom/browser/internal/testing/eventtest"
1313
"github.com/gost-dom/browser/internal/testing/fixtures"
1414
. "github.com/gost-dom/browser/internal/testing/gomega-matchers"
15+
"github.com/gost-dom/browser/internal/testing/gosttest"
1516
"github.com/gost-dom/browser/internal/testing/htmltest"
1617
. "github.com/gost-dom/browser/testing/gomega-matchers"
1718
"github.com/gost-dom/fixture"
@@ -297,26 +298,19 @@ func TestHTMLFormElementSubmitInputWithClickResetButton(t *testing.T) {
297298
}
298299

299300
func TestResubmitFormOn307Redirects(t *testing.T) {
300-
var (
301-
actualRequest *http.Request
302-
submittedForm url.Values
303-
)
304-
305301
w, setup := fixture.Init(t, &HTMLFormSubmitInputFixture{})
306302
w.BaseLocation = "http://example.com/forms"
307303
setup.Setup()
308304

305+
rec := &gosttest.HttpRequestFormRecorder{T: t}
309306
w.Handle("POST /form-destination", http.RedirectHandler("/form-redirected", 307))
310-
w.HandleFunc("POST /form-redirected", func(w http.ResponseWriter, r *http.Request) {
311-
r.ParseForm()
312-
actualRequest = r
313-
submittedForm = r.Form
314-
})
307+
w.Handle("POST /form-redirected", rec)
315308

316309
form := w.Form()
317310
form.SetMethod("post")
318311
form.SetAction("/form-destination")
319312
form.Submit()
320-
w.Assert().NotNil(actualRequest, "Request sent to the redirected location")
321-
w.Assert().Equal([]string{"bar"}, submittedForm["foo"], "Form on second request")
313+
314+
w.Assert().Equal(1, len(rec.Requests), "Request sent to the redirected location")
315+
w.Assert().Equal([]string{"bar"}, rec.Single().PostForm["foo"])
322316
}

html/html_input_element_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@ func (s *HTMLInputElementTestSuite) TestDefaultValue() {
2626
func (s *HTMLInputElementTestSuite) TestClickCheckbox() {
2727
e := html.NewHTMLInputElement(nil)
2828
e.SetType("checkbox")
29-
s.Assert().False(e.Checked())
29+
s.Assert().False(e.Checked(), "Checkbox should be false by default")
30+
3031
e.Click()
31-
s.Assert().True(e.Checked())
32+
s.Assert().True(e.Checked(), "Checkbox should be true when clicked")
3233

3334
e.AddEventListener("click", eventtest.PreventDefaultHandler())
3435
e.Click()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package gosttest
2+
3+
import (
4+
"net/http"
5+
"testing"
6+
)
7+
8+
// HttpRequestFormRecorder is a very simple http.Handler that just records the
9+
// incoming requests, and returns a 200 status.
10+
//
11+
// The recorder automatically calls [http/Request.ParseForm] to make form data
12+
// availeble.
13+
type HttpRequestFormRecorder struct {
14+
T testing.TB
15+
Requests []*http.Request
16+
}
17+
18+
func (rec *HttpRequestFormRecorder) ServeHTTP(w http.ResponseWriter, r *http.Request) {
19+
r.ParseForm()
20+
rec.Requests = append(rec.Requests, r)
21+
}
22+
23+
// Single asserts that a single request was made
24+
func (r HttpRequestFormRecorder) Single() *http.Request {
25+
r.T.Helper()
26+
if len(r.Requests) != 1 {
27+
r.T.Errorf("Expected single recorded request. Got: %d", len(r.Requests))
28+
}
29+
return r.Requests[0]
30+
}

0 commit comments

Comments
 (0)