42 lines
1.2 KiB
Go
42 lines
1.2 KiB
Go
package middleware
|
|
|
|
import "bytes"
|
|
import "context"
|
|
import "net/http"
|
|
import "net/http/httptest"
|
|
import "strings"
|
|
import "testing"
|
|
|
|
import "codit/internal/models"
|
|
import "codit/internal/util"
|
|
|
|
func TestAccessLogWritesRecord(t *testing.T) {
|
|
var buf bytes.Buffer
|
|
var logger *util.Logger
|
|
var handler http.Handler
|
|
var req *http.Request
|
|
var recorder *httptest.ResponseRecorder
|
|
var user models.User
|
|
var ctx context.Context
|
|
logger = util.NewLogger("test", &buf, util.LOG_ALL)
|
|
defer logger.Close()
|
|
handler = AccessLog(logger, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusCreated)
|
|
}))
|
|
user = models.User{ID: "u1", Username: "alice"}
|
|
ctx = context.WithValue(context.Background(), userKey, user)
|
|
req = httptest.NewRequest(http.MethodPost, "/api/demo", nil).WithContext(ctx)
|
|
recorder = httptest.NewRecorder()
|
|
handler.ServeHTTP(recorder, req)
|
|
logger.Close()
|
|
if recorder.Code != http.StatusCreated {
|
|
t.Fatalf("unexpected status: %d", recorder.Code)
|
|
}
|
|
if !strings.Contains(buf.String(), "path=/api/demo") {
|
|
t.Fatalf("missing path in log: %s", buf.String())
|
|
}
|
|
if !strings.Contains(buf.String(), "user=alice") {
|
|
t.Fatalf("missing username in log: %s", buf.String())
|
|
}
|
|
}
|