package app import ( "net/http/httptest" "reflect" "strings" "testing" ) func TestAuditFiltersFromRequest(t *testing.T) { t.Parallel() request := httptest.NewRequest( "GET", "/portal?audit_range=7d&audit_event=package_downloaded&audit_customer=Acme&audit_actor=taiadmin&audit_hostname=pve01&audit_package=sentinelone-linux&audit_ip=10.10.1.25&audit_details=install-rmm", nil, ) filters := auditFiltersFromRequest(request) expected := auditFilters{ TimeRange: "7d", EventType: "package_downloaded", CustomerLabel: "Acme", Actor: "taiadmin", Hostname: "pve01", PackageSlug: "sentinelone-linux", SourceIP: "10.10.1.25", Details: "install-rmm", } if !reflect.DeepEqual(filters, expected) { t.Fatalf("filters = %#v, want %#v", filters, expected) } } func TestAuditFiltersDefaultToThirtyDays(t *testing.T) { t.Parallel() request := httptest.NewRequest("GET", "/portal?audit_range=invalid", nil) if filters := auditFiltersFromRequest(request); filters.TimeRange != "30d" { t.Fatalf("time range = %q, want 30d", filters.TimeRange) } } func TestHasAuditQuery(t *testing.T) { t.Parallel() if !hasAuditQuery(httptest.NewRequest("GET", "/portal?audit_hostname=pve01", nil)) { t.Fatal("expected audit query to be detected") } if hasAuditQuery(httptest.NewRequest("GET", "/portal?notice=updated", nil)) { t.Fatal("non-audit query must stay on the Codes view") } } func TestAuditQueryUsesPlaceholders(t *testing.T) { t.Parallel() filters := auditFilters{ TimeRange: "all", EventType: "package_downloaded", CustomerLabel: "Acme", Actor: "taiadmin", Hostname: "pve01", PackageSlug: "sentinelone-linux", SourceIP: "10.10.1.25", Details: "install-rmm", } query, arguments := auditQuery(filters, 250) if strings.Contains(query, filters.CustomerLabel) || strings.Contains(query, filters.Actor) || strings.Contains(query, filters.Hostname) { t.Fatal("filter values must not be interpolated into the SQL query") } if strings.Contains(query, "INTERVAL") { t.Fatal("all-time query must not include a time restriction") } if !strings.HasSuffix(query, "ORDER BY ae.created_at DESC LIMIT ?") { t.Fatalf("query has unexpected limit: %s", query) } expectedArguments := []any{ "package_downloaded", "Acme", "taiadmin", "pve01", "sentinelone-linux", "10.10.1.25", "install-rmm", 250, } if !reflect.DeepEqual(arguments, expectedArguments) { t.Fatalf("arguments = %#v, want %#v", arguments, expectedArguments) } }