Ctrl K
ComunidadGuías…

internal/adminapi/held_call_redemption_handler_test.go

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

Archivo original ↗Preguntar a KiBot
package adminapi

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

	"github.com/yeomyeonggeori/blueprotocol/agentcontract"
	"github.com/yeomyeonggeori/blueprotocol/holdrecord"
)

func postRedemption(handler HeldCallRedemptionHandler, body string) *httptest.ResponseRecorder {
	responseRecorder := httptest.NewRecorder()
	handler.HandleRedeemHeldCall(responseRecorder, httptest.NewRequest(http.MethodPost, "/admin/api/held-call/redeem", bytes.NewBufferString(body)))
	return responseRecorder
}

func TestAHeldCallIsRedeemedOnceOverHTTPAndRefusedWithTheReasonAfter(t *testing.T) {
	taskRunService, _ := approvalTestTaskRunService(t)
	taskRun := taskRunService.CreateTaskRun("person-1", "conversation-1", "박예시에게 보내줘")
	holdID := holdrecord.Open(taskRunService, taskRun.TaskRunID, agentcontract.HeldCall{ToolName: "message_send", ToolInput: json.RawMessage(`{"message":"안녕하세요"}`)}, nil).ID
	holdrecord.Decide(taskRunService, taskRun.TaskRunID, holdID, holdrecord.DecisionApprove, "chat_reply")
	handler := HeldCallRedemptionHandler{TaskRunService: taskRunService}
	body := `{"taskRunID":"` + taskRun.TaskRunID + `","holdID":"` + holdID + `","requesterPersonID":"person-1","toolName":"message_send","toolInput":{"message":"안녕하세요"}}`

	if responseRecorder := postRedemption(handler, body); responseRecorder.Code != http.StatusOK {
		t.Fatalf("the approved call answered %d %s", responseRecorder.Code, responseRecorder.Body.String())
	}
	responseRecorder := postRedemption(handler, body)
	if responseRecorder.Code != http.StatusConflict || !strings.Contains(responseRecorder.Body.String(), "already carried out") {
		t.Fatalf("a second redemption answered %d %s", responseRecorder.Code, responseRecorder.Body.String())
	}
	if responseRecorder := postRedemption(handler, `not json`); responseRecorder.Code != http.StatusBadRequest {
		t.Fatalf("a malformed redemption answered %d", responseRecorder.Code)
	}
}