Ctrl K
ComunidadGuías…

internal/adminapi/connector_event_diagnostic_handler_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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
}