Files
mailgoserver/internal/webui/logs_test.go
T

63 lines
1.9 KiB
Go

package webui
import (
"net/http"
"net/http/httptest"
"strings"
"testing"
)
func TestAuthCategoryMatches(t *testing.T) {
cases := []struct {
authType, category string
want bool
}{
{"admin_login", "admin", true},
{"admin_mfa", "admin", true},
{"webmail_login", "admin", false},
{"webmail_login", "webmail", true},
{"mailbox_mfa", "webmail", true},
{"sender", "webmail", false},
{"sender", "mailserver", true},
{"mailbox", "mailserver", true},
{"sender_validation", "mailserver", true},
{"mailbox_validation", "mailserver", true},
{"ip", "mailserver", true},
{"imap_login", "mailserver", true},
{"admin_login", "mailserver", false},
{"anything", "", true},
{"anything", "all", true},
}
for _, c := range cases {
if got := authCategoryMatches(c.authType, c.category); got != c.want {
t.Errorf("authCategoryMatches(%q, %q) = %v, want %v", c.authType, c.category, got, c.want)
}
}
}
// TestLogsAuthCategoryFilterEndToEnd confirms the ?auth_category= query param actually
// filters the rendered auth-log rows, not just the pure bucketing function above.
func TestLogsAuthCategoryFilterEndToEnd(t *testing.T) {
app := newTestApp(t)
mux := app.Mux()
cookie := loginSession(t, app)
app.DB.LogAuthAttempt("admin_login", "someadmin", "203.0.113.1", false, "bad password")
app.DB.LogAuthAttempt("sender", "someone@example.com", "203.0.113.2", false, "bad password")
req := httptest.NewRequest(http.MethodGet, Prefix+"/logs?type=auth&auth_category=mailserver", nil)
req.AddCookie(cookie)
rec := httptest.NewRecorder()
mux.ServeHTTP(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("status=%d", rec.Code)
}
body := rec.Body.String()
if !strings.Contains(body, "someone@example.com") {
t.Error("mailserver category should include the sender auth failure")
}
if strings.Contains(body, "someadmin") {
t.Error("mailserver category should exclude the admin_login failure")
}
}