webtest: improve error
continuous-integration/drone the build failed Details

This commit is contained in:
Geno 2021-06-28 12:14:20 +02:00
parent 979f5fef7d
commit 48b828b029
7 changed files with 56 additions and 30 deletions

View File

@ -17,7 +17,8 @@ func TestAPIStatus(t *testing.T) {
obj := Status{}
// GET
s.Request(http.MethodGet, "/api/status", nil, http.StatusOK, &obj)
err := s.Request(http.MethodGet, "/api/status", nil, http.StatusOK, &obj)
assert.NoError(err)
assert.Equal(VERSION, obj.Version)
assert.Equal(EXTRAS, obj.Extras)
assert.True(obj.Up)
@ -26,7 +27,8 @@ func TestAPIStatus(t *testing.T) {
obj = Status{}
// GET - failed status
s.Request(http.MethodGet, "/api/status", nil, http.StatusInternalServerError, &obj)
err = s.Request(http.MethodGet, "/api/status", nil, http.StatusInternalServerError, &obj)
assert.NoError(err)
assert.Equal(VERSION, obj.Version)
assert.Equal(EXTRAS, obj.Extras)
assert.False(obj.Up)

View File

@ -20,24 +20,28 @@ func TestAPILogin(t *testing.T) {
hErr := web.HTTPError{}
// invalid
s.Request(http.MethodPost, "/api/v1/auth/login", 1, http.StatusBadRequest, &hErr)
err := s.Request(http.MethodPost, "/api/v1/auth/login", 1, http.StatusBadRequest, &hErr)
assert.NoError(err)
assert.Equal(web.APIErrorInvalidRequestFormat, hErr.Message)
req := login{}
hErr = web.HTTPError{}
// invalid - user
s.Request(http.MethodPost, "/api/v1/auth/login", &req, http.StatusUnauthorized, &hErr)
err = s.Request(http.MethodPost, "/api/v1/auth/login", &req, http.StatusUnauthorized, &hErr)
assert.NoError(err)
assert.Equal(APIErrorUserNotFound, hErr.Message)
req.Username = "admin"
hErr = web.HTTPError{}
// invalid - password
s.Request(http.MethodPost, "/api/v1/auth/login", &req, http.StatusUnauthorized, &hErr)
err = s.Request(http.MethodPost, "/api/v1/auth/login", &req, http.StatusUnauthorized, &hErr)
assert.NoError(err)
assert.Equal(APIErrorIncorrectPassword, hErr.Message)
req.Password = "CHANGEME"
obj := User{}
// valid login
s.Request(http.MethodPost, "/api/v1/auth/login", &req, http.StatusOK, &obj)
err = s.Request(http.MethodPost, "/api/v1/auth/login", &req, http.StatusOK, &obj)
assert.NoError(err)
assert.Equal("admin", obj.Username)
}

View File

@ -27,23 +27,26 @@ func TestAPIPasswordCode(t *testing.T) {
hErr := web.HTTPError{}
// invalid
s.Request(http.MethodPost, "/api/v1/auth/password/code", &passwordNew, http.StatusBadRequest, &hErr)
err := s.Request(http.MethodPost, "/api/v1/auth/password/code", &passwordNew, http.StatusBadRequest, &hErr)
assert.NoError(err)
assert.Equal(web.APIErrorInvalidRequestFormat, hErr.Message)
res := ""
// set new password
s.Request(http.MethodPost, "/api/v1/auth/password/code", &PasswordWithForgetCode{
err = s.Request(http.MethodPost, "/api/v1/auth/password/code", &PasswordWithForgetCode{
ForgetCode: forgetCode,
Password: passwordNew,
}, http.StatusOK, &res)
assert.NoError(err)
assert.Equal("admin", res)
hErr = web.HTTPError{}
// set password without code
s.Request(http.MethodPost, "/api/v1/auth/password/code", &PasswordWithForgetCode{
err = s.Request(http.MethodPost, "/api/v1/auth/password/code", &PasswordWithForgetCode{
ForgetCode: forgetCode,
Password: passwordCurrent,
}, http.StatusBadRequest, &hErr)
assert.NoError(err)
assert.Equal(APIErrorUserNotFound, hErr.Message)
forgetCode = uuid.New()
@ -51,9 +54,10 @@ func TestAPIPasswordCode(t *testing.T) {
res = ""
// set old password
s.Request(http.MethodPost, "/api/v1/auth/password/code", &PasswordWithForgetCode{
err = s.Request(http.MethodPost, "/api/v1/auth/password/code", &PasswordWithForgetCode{
ForgetCode: forgetCode,
Password: passwordCurrent,
}, http.StatusOK, &res)
assert.NoError(err)
assert.Equal("admin", res)
}

View File

@ -23,23 +23,28 @@ func TestAPIPassword(t *testing.T) {
hErr := web.HTTPError{}
// no auth
s.Request(http.MethodPost, "/api/v1/my/auth/password", &passwordNew, http.StatusUnauthorized, &hErr)
err := s.Request(http.MethodPost, "/api/v1/my/auth/password", &passwordNew, http.StatusUnauthorized, &hErr)
assert.NoError(err)
assert.Equal(APIErrorNoSession, hErr.Message)
s.TestLogin()
err = s.TestLogin()
assert.NoError(err)
hErr = web.HTTPError{}
// invalid
s.Request(http.MethodPost, "/api/v1/my/auth/password", nil, http.StatusBadRequest, &hErr)
err = s.Request(http.MethodPost, "/api/v1/my/auth/password", nil, http.StatusBadRequest, &hErr)
assert.NoError(err)
assert.Equal(web.APIErrorInvalidRequestFormat, hErr.Message)
res := false
// set new password
s.Request(http.MethodPost, "/api/v1/my/auth/password", &passwordNew, http.StatusOK, &res)
err = s.Request(http.MethodPost, "/api/v1/my/auth/password", &passwordNew, http.StatusOK, &res)
assert.NoError(err)
assert.True(res)
res = false
// set old password
s.Request(http.MethodPost, "/api/v1/my/auth/password", &passwordCurrent, http.StatusOK, &res)
err = s.Request(http.MethodPost, "/api/v1/my/auth/password", &passwordCurrent, http.StatusOK, &res)
assert.NoError(err)
assert.True(res)
}

View File

@ -20,14 +20,17 @@ func TestAPIStatus(t *testing.T) {
hErr := web.HTTPError{}
// invalid
s.Request(http.MethodGet, "/api/v1/auth/status", nil, http.StatusUnauthorized, &hErr)
err := s.Request(http.MethodGet, "/api/v1/auth/status", nil, http.StatusUnauthorized, &hErr)
assert.NoError(err)
assert.Equal(APIErrorNoSession, hErr.Message)
s.TestLogin()
err = s.TestLogin()
assert.NoError(err)
obj := User{}
// invalid - user
s.Request(http.MethodGet, "/api/v1/auth/status", nil, http.StatusOK, &obj)
err = s.Request(http.MethodGet, "/api/v1/auth/status", nil, http.StatusOK, &obj)
assert.NoError(err)
assert.Equal("admin", obj.Username)
}

View File

@ -16,10 +16,12 @@ func TestMetricsLoaded(t *testing.T) {
assert.NotNil(s)
// GET
s.Request(http.MethodGet, "/metrics", nil, http.StatusOK, nil)
err := s.Request(http.MethodGet, "/metrics", nil, http.StatusOK, nil)
assert.NoError(err)
UP = func() bool { return false }
// GET
s.Request(http.MethodGet, "/metrics", nil, http.StatusOK, nil)
err = s.Request(http.MethodGet, "/metrics", nil, http.StatusOK, nil)
assert.NoError(err)
}

View File

@ -90,19 +90,23 @@ func (s *testServer) DatabaseForget() {
}
// Request sends a request to webtest WebService
func (s *testServer) Request(method, url string, body interface{}, expectCode int, jsonObj interface{}) {
func (s *testServer) Request(method, url string, body interface{}, expectCode int, jsonObj interface{}) error {
var jsonBody io.Reader
if body != nil {
if strBody, ok := body.(string); ok {
jsonBody = strings.NewReader(strBody)
} else {
jsonBodyArray, err := json.Marshal(body)
s.assert.Nil(err, "no request created")
if err != nil {
return err
}
jsonBody = bytes.NewBuffer(jsonBodyArray)
}
}
req, err := http.NewRequest(method, url, jsonBody)
s.assert.Nil(err, "no request created")
if err != nil {
return err
}
if len(s.lastCookies) > 0 {
for _, c := range s.lastCookies {
req.AddCookie(c)
@ -114,14 +118,15 @@ func (s *testServer) Request(method, url string, body interface{}, expectCode in
// valid statusCode
s.assert.Equal(expectCode, w.Code, "expected http status code")
if expectCode != w.Code {
fmt.Printf("wrong status code, body:%v\n", w.Body)
return
return fmt.Errorf("wrong status code, body: %v", w.Body)
}
if jsonObj != nil {
// fetch JSON
err = json.NewDecoder(w.Body).Decode(jsonObj)
s.assert.Nil(err, "decode json")
if err != nil {
return err
}
}
result := w.Result()
@ -131,17 +136,18 @@ func (s *testServer) Request(method, url string, body interface{}, expectCode in
s.lastCookies = cookies
}
}
return nil
}
// Login to API by send request
func (s *testServer) Login(login Login) {
func (s *testServer) Login(login Login) error {
// POST: correct login
s.Request(http.MethodPost, "/api/v1/auth/login", &login, http.StatusOK, nil)
return s.Request(http.MethodPost, "/api/v1/auth/login", &login, http.StatusOK, nil)
}
// TestLogin to API by default login data
func (s *testServer) TestLogin() {
s.Login(Login{
func (s *testServer) TestLogin() error {
return s.Login(Login{
Username: "admin",
Password: "CHANGEME",
})