|
|
|
|
|
|
|
|
|
|
|
package form |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
|
"bytes" |
|
|
|
|
|
"errors" |
|
|
|
|
|
"io" |
|
|
|
|
|
"net/http" |
|
|
|
|
|
"net/http/httptest" |
|
|
|
|
|
"net/url" |
|
|
|
|
|
"testing" |
|
|
|
|
|
|
|
|
|
|
|
. "github.com/smartystreets/goconvey/convey" |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
type user struct { |
|
|
|
|
|
Username string `schema:"username"` |
|
|
|
|
|
Password string `schema:"password"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (self *user) Validate() error { |
|
|
|
|
|
if self.Username == "" || self.Password == "" { |
|
|
|
|
|
return errors.New("username/password can not be empty") |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if len(self.Password) < 8 { |
|
|
|
|
|
return errors.New("password must be greater than 8bits") |
|
|
|
|
|
} |
|
|
|
|
|
return nil |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func TestParse(t *testing.T) { |
|
|
|
|
|
app := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
|
var form user |
|
|
|
|
|
if err := Parse(r, &form); err == nil { |
|
|
|
|
|
w.WriteHeader(http.StatusAccepted) |
|
|
|
|
|
io.WriteString(w, "uid") |
|
|
|
|
|
} else { |
|
|
|
|
|
w.WriteHeader(http.StatusBadRequest) |
|
|
|
|
|
io.WriteString(w, err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
Convey("rex.form.Parse", t, func() { |
|
|
|
|
|
values := url.Values{} |
|
|
|
|
|
values.Set("username", "username") |
|
|
|
|
|
values.Set("password", "password") |
|
|
|
|
|
|
|
|
|
|
|
request, _ := http.NewRequest("POST", "/", bytes.NewBufferString(values.Encode())) |
|
|
|
|
|
request.Header.Set("Content-Type", "application/x-www-form-urlencoded") |
|
|
|
|
|
response := httptest.NewRecorder() |
|
|
|
|
|
|
|
|
|
|
|
app.ServeHTTP(response, request) |
|
|
|
|
|
So(response.Code, ShouldEqual, http.StatusAccepted) |
|
|
|
|
|
|
|
|
|
|
|
values.Set("password", "7") |
|
|
|
|
|
request, _ = http.NewRequest("POST", "/", bytes.NewBufferString(values.Encode())) |
|
|
|
|
|
response = httptest.NewRecorder() |
|
|
|
|
|
|
|
|
|
|
|
app.ServeHTTP(response, request) |
|
|
|
|
|
So(response.Code, ShouldEqual, http.StatusBadRequest) |
|
|
|
|
|
}) |
|
|
|
|
|
} |