Files
promptkit/internal/usecase/prepared_notification_test.go

43 lines
1.6 KiB
Go
Raw Normal View History

package usecase
import (
"context"
"errors"
"testing"
"time"
"go.maximumdirect.net/promptkit/internal/domain"
)
func TestPreparedNotificationChecksContextBeforeInvocation(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
cancel()
called := false
_, err := (&Runner{}).executePreparedRun(ctx, &domain.PreparedRun{}, func(context.Context, *domain.PreparedRun) { called = true }, false, nil, "", 0, "", time.Time{}, nil)
if called || !errors.Is(err, context.Canceled) || !errors.Is(err, ErrLLMGenerate) {
t.Fatalf("called=%v error=%v", called, err)
}
}
func TestPreparedNotificationPanicClearsClaimedPayload(t *testing.T) {
runner := NewRunner(&fakePromptRepo{def: promptDef(domain.FormatText, domain.ValidationNone, 0)},
&fakeExecutionProfileRepo{profiles: map[string]*domain.ExecutionProfile{"exec": defaultExecutionProfile()}},
defaultArtifactReader(), defaultRenderer(), &fakeLLM{resp: &domain.GenerateResponse{Content: "ok"}}, nil, nil)
handle, err := runner.PrepareExecution(context.Background(), domain.RunRequest{PromptID: "p", ProfileID: "exec", Inputs: singleInputRef(), OnPrepared: func(context.Context, *domain.PreparedRun) { panic("notification") }})
if err != nil {
t.Fatal(err)
}
payload := handle.payload
func() {
defer func() {
if recover() == nil {
t.Error("expected panic")
}
}()
_, _ = runner.RunPrepared(context.Background(), handle)
}()
if payload.prepared != nil || payload.onPrepared != nil || payload.directKey != "" || handle.payload != nil {
t.Fatal("claimed payload retained private state")
}
}