54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package handler
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
type fakeAuthenticator struct {
|
|
err error
|
|
}
|
|
|
|
func (f fakeAuthenticator) Authenticate(username, password string) error {
|
|
return f.err
|
|
}
|
|
|
|
func TestAuthHandlerRejectsInvalidJSON(t *testing.T) {
|
|
handler := NewAuthHandler(fakeAuthenticator{})
|
|
req := httptest.NewRequest(http.MethodPost, "/auth", bytes.NewBufferString("{"))
|
|
rec := httptest.NewRecorder()
|
|
|
|
handler.ServeHTTP(rec, req)
|
|
|
|
if rec.Code != http.StatusBadRequest {
|
|
t.Fatalf("expected 400, got %d", rec.Code)
|
|
}
|
|
}
|
|
|
|
func TestAuthHandlerReturnsUnauthorizedOnServiceFailure(t *testing.T) {
|
|
handler := NewAuthHandler(fakeAuthenticator{err: errors.New("invalid credentials")})
|
|
req := httptest.NewRequest(http.MethodPost, "/auth", bytes.NewBufferString(`{"username":"alice","password":"secret"}`))
|
|
rec := httptest.NewRecorder()
|
|
|
|
handler.ServeHTTP(rec, req)
|
|
|
|
if rec.Code != http.StatusUnauthorized {
|
|
t.Fatalf("expected 401, got %d", rec.Code)
|
|
}
|
|
}
|
|
|
|
func TestAuthHandlerReturnsOKOnSuccess(t *testing.T) {
|
|
handler := NewAuthHandler(fakeAuthenticator{})
|
|
req := httptest.NewRequest(http.MethodPost, "/auth", bytes.NewBufferString(`{"username":"alice","password":"secret"}`))
|
|
rec := httptest.NewRecorder()
|
|
|
|
handler.ServeHTTP(rec, req)
|
|
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("expected 200, got %d", rec.Code)
|
|
}
|
|
}
|