Ctrl K
ComunidadGuías…

internal/adminapi/task_search_handler_test.go

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

Archivo original ↗Preguntar a KiBot
package adminapi

import (
	"encoding/json"
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/yeomyeonggeori/blueclaw/internal/sessionquery"
	"github.com/yeomyeonggeori/blueclaw/internal/task"
)

type searchLedgerStub struct{}

func (searchLedgerStub) ListTaskRunByPersonID(personID string) []task.TaskRun {
	if personID != "person-1" {
		return nil
	}
	return []task.TaskRun{{TaskRunID: "run-1", Status: task.TaskStatusCompleted, Prompt: "회의록 보내줘"}}
}

func (searchLedgerStub) ListTaskEvent(string) []task.TaskEvent { return nil }

func TestSearchingWithoutAPersonIsABadRequestRatherThanEveryonesLedger(t *testing.T) {
	handler := TaskSearchHandler{SessionQuery: sessionquery.New(searchLedgerStub{})}
	recorder := httptest.NewRecorder()

	handler.HandleSearchTaskRuns(recorder, httptest.NewRequest(http.MethodGet, "/admin/api/run/search?q=회의록", nil))

	if recorder.Code != http.StatusBadRequest {
		t.Fatalf("an operator who forgets the person must be told, never quietly served everything: %d %s", recorder.Code, recorder.Body.String())
	}
}

func TestSearchingReturnsTheBoundedResultAsJSON(t *testing.T) {
	handler := TaskSearchHandler{SessionQuery: sessionquery.New(searchLedgerStub{})}
	recorder := httptest.NewRecorder()

	handler.HandleSearchTaskRuns(recorder, httptest.NewRequest(http.MethodGet, "/admin/api/run/search?personID=person-1&q=회의록", nil))

	if recorder.Code != http.StatusOK {
		t.Fatalf("expected the search to answer: %d %s", recorder.Code, recorder.Body.String())
	}
	result := sessionquery.Result{}
	if errorValue := json.Unmarshal(recorder.Body.Bytes(), &result); errorValue != nil {
		t.Fatalf("the answer has to be readable: %v", errorValue)
	}
	if len(result.Matches) != 1 || result.Matches[0].TaskRunID != "run-1" || result.IsTruncated {
		t.Fatalf("expected one untruncated match, got %+v", result)
	}
}