76 lines
2.2 KiB
Go
76 lines
2.2 KiB
Go
package promptkit
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/promptkit/internal/llm"
|
|
"gitea.maximumdirect.net/eric/promptkit/internal/usecase"
|
|
)
|
|
|
|
func TestMapPublicErrorPreservesGenerationCancellation(t *testing.T) {
|
|
internalErr := fmt.Errorf("%w: %w", usecase.ErrLLMGenerate, context.Canceled)
|
|
|
|
err := mapPublicError(internalErr)
|
|
if !errors.Is(err, ErrLLMGenerate) {
|
|
t.Fatalf("mapped error=%v, want ErrLLMGenerate", err)
|
|
}
|
|
if !errors.Is(err, context.Canceled) {
|
|
t.Fatalf("mapped error=%v, want context.Canceled", err)
|
|
}
|
|
}
|
|
|
|
func TestMapPublicErrorTranslatesCapacityError(t *testing.T) {
|
|
internalErr := &usecase.CapacityError{BackendID: "limited"}
|
|
|
|
err := mapPublicError(internalErr)
|
|
var publicErr *CapacityError
|
|
if !errors.As(err, &publicErr) || publicErr == nil {
|
|
t.Fatalf("mapped error=%v, want public CapacityError", err)
|
|
}
|
|
if publicErr.BackendID != "limited" {
|
|
t.Fatalf("mapped backend ID=%q, want limited", publicErr.BackendID)
|
|
}
|
|
if !errors.Is(err, ErrCapacityExceeded) {
|
|
t.Fatalf("mapped error=%v, want ErrCapacityExceeded", err)
|
|
}
|
|
if errors.Is(err, ErrInvalidRequest) || errors.Is(err, ErrLLMGenerate) {
|
|
t.Fatalf("mapped capacity error has an unrelated category: %v", err)
|
|
}
|
|
var leakedInternalErr *usecase.CapacityError
|
|
if errors.As(err, &leakedInternalErr) {
|
|
t.Fatalf("mapped error exposes internal CapacityError: %v", err)
|
|
}
|
|
|
|
internalErr.BackendID = "changed"
|
|
if publicErr.BackendID != "limited" {
|
|
t.Fatalf("mapped backend ID changed with source error: %q", publicErr.BackendID)
|
|
}
|
|
}
|
|
|
|
func TestMapPublicErrorPreservesValidationAroundGenerationError(t *testing.T) {
|
|
internalErr := fmt.Errorf(
|
|
"%w: %w",
|
|
usecase.ErrValidation,
|
|
&llm.ProviderHTTPError{},
|
|
)
|
|
|
|
err := mapPublicError(internalErr)
|
|
if !errors.Is(err, ErrValidation) {
|
|
t.Fatalf("mapped error=%v, want ErrValidation", err)
|
|
}
|
|
if !errors.Is(err, ErrLLMGenerate) {
|
|
t.Fatalf("mapped error=%v, want ErrLLMGenerate", err)
|
|
}
|
|
var generationErr *GenerationError
|
|
if !errors.As(err, &generationErr) || generationErr == nil {
|
|
t.Fatalf("mapped error=%v, want GenerationError", err)
|
|
}
|
|
var leakedInternalErr *llm.ProviderHTTPError
|
|
if errors.As(err, &leakedInternalErr) {
|
|
t.Fatalf("mapped error exposes internal ProviderHTTPError: %v", err)
|
|
}
|
|
}
|