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 }