79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
package apitest
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.artlef.fr/bibliomane/internal/testutils"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestInviteUserHandler_OK(t *testing.T) {
|
|
userJson := `{
|
|
"username": "ferdinand"
|
|
}`
|
|
status, token := testInviteUserHandler(t, userJson)
|
|
assert.Equal(t, http.StatusOK, status)
|
|
assert.NotEmpty(t, token)
|
|
}
|
|
|
|
func TestInviteUserHandler_UsernameMissing(t *testing.T) {
|
|
userJson := `{
|
|
"gssgg": "d"
|
|
}`
|
|
status, _ := testInviteUserHandler(t, userJson)
|
|
assert.Equal(t, http.StatusBadRequest, status)
|
|
}
|
|
|
|
func TestInviteUserHandler_UsernameTooLong(t *testing.T) {
|
|
userJson := `{
|
|
"username": "thisusernameistoolong"
|
|
}`
|
|
status, _ := testInviteUserHandler(t, userJson)
|
|
assert.Equal(t, http.StatusBadRequest, status)
|
|
}
|
|
|
|
func TestInviteUserHandler_Forbidden(t *testing.T) {
|
|
userJson := `{
|
|
"username": "ferdinand"
|
|
}`
|
|
router := testutils.TestSetup()
|
|
w := httptest.NewRecorder()
|
|
|
|
token := testutils.ConnectDemoUser(router)
|
|
req, _ := http.NewRequest("POST", "/ws/admin/inviteuser",
|
|
strings.NewReader(userJson))
|
|
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token))
|
|
router.ServeHTTP(w, req)
|
|
assert.Equal(t, http.StatusForbidden, w.Code)
|
|
}
|
|
|
|
func testInviteUserHandler(t *testing.T, userJson string) (int, string) {
|
|
router := testutils.TestSetup()
|
|
w := httptest.NewRecorder()
|
|
|
|
token := testutils.ConnectAdminUser(router)
|
|
req, _ := http.NewRequest("POST", "/ws/admin/inviteuser",
|
|
strings.NewReader(userJson))
|
|
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token))
|
|
router.ServeHTTP(w, req)
|
|
|
|
if w.Code != http.StatusOK {
|
|
return w.Code, ""
|
|
}
|
|
var parsed struct {
|
|
ID uint `json:"id"`
|
|
Token string `json:"token"`
|
|
}
|
|
|
|
err := json.Unmarshal(w.Body.Bytes(), &parsed)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
return w.Code, parsed.Token
|
|
}
|