internal/adminapi/connector_event_diagnostic_handler_test.go
Rama main · réplica de lectura del repositorio original.
package adminapi
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/yeomyeonggeori/blueclaw/internal/connectors"
)
func TestConnectorEventDiagnosticHandlerListsFilteredEvents(t *testing.T) {
repository := &testConnectorEventDiagnosticRepository{
diagnostics: []connectors.EventDiagnostic{{
RawEventID: "mattermost:conversation-1:post-1",
Platform: "mattermost",
ConversationID: "conversation-1",
ExternalMessageID: "post-1",
ConnectorStatus: "succeeded",
AttemptCount: 1,
Result: json.RawMessage(`{"handled":true,"reason":"ignored"}`),
IngestedAt: time.Date(2026, 6, 7, 12, 0, 0, 0, time.UTC),
}},
}
handler := ConnectorEventDiagnosticHandler{Repository: repository}
request := httptest.NewRequest(http.MethodGet, "/admin/api/connector/events?platform=mattermost&messageID=post-1&limit=100", nil)
response := httptest.NewRecorder()
handler.HandleList(response, request)
if response.Code != http.StatusOK {
t.Fatalf("expected status 200, got %d body=%s", response.Code, response.Body.String())
}
if repository.filter.Platform != "mattermost" || repository.filter.MessageID != "post-1" || repository.filter.Limit != 50 {
t.Fatalf("unexpected filter: %+v", repository.filter)
}
var diagnostics []connectors.EventDiagnostic
if errorValue := json.Unmarshal(response.Body.Bytes(), &diagnostics); errorValue != nil {
t.Fatal(errorValue)
}
if len(diagnostics) != 1 || diagnostics[0].ConnectorStatus != "succeeded" {
t.Fatalf("unexpected diagnostics: %+v", diagnostics)
}
}
func TestConnectorEventDiagnosticHandlerRejectsMissingRepository(t *testing.T) {
handler := ConnectorEventDiagnosticHandler{}
request := httptest.NewRequest(http.MethodGet, "/admin/api/connector/events", nil)
response := httptest.NewRecorder()
handler.HandleList(response, request)
if response.Code != http.StatusServiceUnavailable {
t.Fatalf("expected status 503, got %d", response.Code)
}
}
type testConnectorEventDiagnosticRepository struct {
filter connectors.EventDiagnosticFilter
diagnostics []connectors.EventDiagnostic
}
func (repository *testConnectorEventDiagnosticRepository) ListConnectorEventDiagnostics(_ context.Context, filter connectors.EventDiagnosticFilter) ([]connectors.EventDiagnostic, error) {
repository.filter = filter
return repository.diagnostics, nil
}