You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
2.6 KiB
118 lines
2.6 KiB
package main |
|
|
|
import ( |
|
"net/http" |
|
"net/http/httptest" |
|
"net/url" |
|
"os" |
|
"reflect" |
|
"testing" |
|
) |
|
|
|
func Test_sanitizeForm(t *testing.T) { |
|
t.Run("Sanitize form", func(t *testing.T) { |
|
result := sanitizeForm(&url.Values{"<b>Test</b>": {"<a href=\"https://example.com\">Test</a>"}}) |
|
want := FormValues{"Test": {"Test"}} |
|
if !reflect.DeepEqual(*result, want) { |
|
t.Error() |
|
} |
|
}) |
|
} |
|
|
|
func TestFormHandler(t *testing.T) { |
|
t.Run("GET request to FormHandler", func(t *testing.T) { |
|
req := httptest.NewRequest("GET", "http://example.com/", nil) |
|
w := httptest.NewRecorder() |
|
FormHandler(w, req) |
|
resp := w.Result() |
|
if resp.StatusCode != http.StatusOK { |
|
t.Error() |
|
} |
|
}) |
|
t.Run("POST request to FormHandler", func(t *testing.T) { |
|
req := httptest.NewRequest("POST", "http://example.com/", nil) |
|
w := httptest.NewRecorder() |
|
FormHandler(w, req) |
|
resp := w.Result() |
|
if resp.StatusCode != http.StatusCreated { |
|
t.Error() |
|
} |
|
}) |
|
t.Run("Wrong method request to FormHandler", func(t *testing.T) { |
|
req := httptest.NewRequest("DELETE", "http://example.com/", nil) |
|
w := httptest.NewRecorder() |
|
FormHandler(w, req) |
|
resp := w.Result() |
|
if resp.StatusCode != http.StatusMethodNotAllowed { |
|
t.Error() |
|
} |
|
}) |
|
} |
|
|
|
func Test_isBot(t *testing.T) { |
|
t.Run("No bot", func(t *testing.T) { |
|
os.Clearenv() |
|
result := isBot(&FormValues{"_t_email": {""}}) |
|
if !reflect.DeepEqual(result, false) { |
|
t.Error() |
|
} |
|
}) |
|
t.Run("No honeypot", func(t *testing.T) { |
|
os.Clearenv() |
|
result := isBot(&FormValues{}) |
|
if !reflect.DeepEqual(result, false) { |
|
t.Error() |
|
} |
|
}) |
|
t.Run("Bot", func(t *testing.T) { |
|
os.Clearenv() |
|
result := isBot(&FormValues{"_t_email": {"Test", ""}}) |
|
if !reflect.DeepEqual(result, true) { |
|
t.Error() |
|
} |
|
}) |
|
} |
|
|
|
func Test_sendResponse(t *testing.T) { |
|
t.Run("No redirect", func(t *testing.T) { |
|
values := &FormValues{} |
|
w := httptest.NewRecorder() |
|
sendResponse(values, w) |
|
if w.Code != http.StatusCreated { |
|
t.Error() |
|
} |
|
}) |
|
t.Run("No redirect 2", func(t *testing.T) { |
|
values := &FormValues{ |
|
"_redirectTo": {""}, |
|
} |
|
w := httptest.NewRecorder() |
|
sendResponse(values, w) |
|
if w.Code != http.StatusCreated { |
|
t.Error() |
|
} |
|
}) |
|
t.Run("No redirect 3", func(t *testing.T) { |
|
values := &FormValues{ |
|
"_redirectTo": {"abc", "def"}, |
|
} |
|
w := httptest.NewRecorder() |
|
sendResponse(values, w) |
|
if w.Code != http.StatusCreated { |
|
t.Error() |
|
} |
|
}) |
|
t.Run("Redirect", func(t *testing.T) { |
|
values := &FormValues{ |
|
"_redirectTo": {"https://example.com"}, |
|
} |
|
w := httptest.NewRecorder() |
|
sendResponse(values, w) |
|
if w.Code != http.StatusSeeOther { |
|
t.Error() |
|
} |
|
if w.Header().Get("Location") != "https://example.com" { |
|
t.Error() |
|
} |
|
}) |
|
}
|
|
|