Files
amcs/internal/tools/common_test.go
Hein f41c512f36 test(tools): add unit tests for error handling functions
* Implement tests for error functions like errRequiredField, errInvalidField, and errEntityNotFound.
* Ensure proper metadata is returned for various error scenarios.
* Validate error handling in CRM, Files, and other tools.
* Introduce tests for parsing stored file IDs and UUIDs.
* Enhance coverage for helper functions related to project resolution and session management.
2026-03-31 15:10:07 +02:00

85 lines
3.4 KiB
Go

package tools
import (
"testing"
"git.warky.dev/wdevs/amcs/internal/mcperrors"
)
func TestErrRequiredFieldReturnsFieldMetadata(t *testing.T) {
rpcErr, data := requireRPCError(t, errRequiredField("name"))
if data.Type != mcperrors.TypeInvalidInput {
t.Fatalf("errRequiredField() type = %q, want %q", data.Type, mcperrors.TypeInvalidInput)
}
if data.Field != "name" {
t.Fatalf("errRequiredField() field = %q, want %q", data.Field, "name")
}
if data.Detail != "required" {
t.Fatalf("errRequiredField() detail = %q, want %q", data.Detail, "required")
}
if rpcErr.Message != "name is required" {
t.Fatalf("errRequiredField() message = %q, want %q", rpcErr.Message, "name is required")
}
}
func TestErrInvalidFieldReturnsFieldMetadata(t *testing.T) {
rpcErr, data := requireRPCError(t, errInvalidField("severity", "severity must be one of: low, medium, high, critical", "pass one of: low, medium, high, critical"))
if data.Field != "severity" {
t.Fatalf("errInvalidField() field = %q, want %q", data.Field, "severity")
}
if data.Detail != "invalid" {
t.Fatalf("errInvalidField() detail = %q, want %q", data.Detail, "invalid")
}
if data.Hint == "" {
t.Fatal("errInvalidField() hint = empty, want guidance")
}
if rpcErr.Message == "" {
t.Fatal("errInvalidField() message = empty, want non-empty")
}
}
func TestErrOneOfRequiredReturnsFieldsMetadata(t *testing.T) {
rpcErr, data := requireRPCError(t, errOneOfRequired("content_base64", "content_uri"))
if data.Detail != "one_of_required" {
t.Fatalf("errOneOfRequired() detail = %q, want %q", data.Detail, "one_of_required")
}
if len(data.Fields) != 2 || data.Fields[0] != "content_base64" || data.Fields[1] != "content_uri" {
t.Fatalf("errOneOfRequired() fields = %#v, want [content_base64 content_uri]", data.Fields)
}
if rpcErr.Message != "content_base64 or content_uri is required" {
t.Fatalf("errOneOfRequired() message = %q, want %q", rpcErr.Message, "content_base64 or content_uri is required")
}
}
func TestErrMutuallyExclusiveFieldsReturnsFieldsMetadata(t *testing.T) {
rpcErr, data := requireRPCError(t, errMutuallyExclusiveFields("content_uri", "content_base64"))
if data.Detail != "mutually_exclusive" {
t.Fatalf("errMutuallyExclusiveFields() detail = %q, want %q", data.Detail, "mutually_exclusive")
}
if len(data.Fields) != 2 || data.Fields[0] != "content_uri" || data.Fields[1] != "content_base64" {
t.Fatalf("errMutuallyExclusiveFields() fields = %#v, want [content_uri content_base64]", data.Fields)
}
if rpcErr.Message != "provide content_uri or content_base64, not both" {
t.Fatalf("errMutuallyExclusiveFields() message = %q, want %q", rpcErr.Message, "provide content_uri or content_base64, not both")
}
}
func TestErrEntityNotFoundReturnsEntityMetadata(t *testing.T) {
rpcErr, data := requireRPCError(t, errEntityNotFound("thought", "thought_id", "123"))
if rpcErr.Code != codeEntityNotFound {
t.Fatalf("errEntityNotFound() code = %d, want %d", rpcErr.Code, codeEntityNotFound)
}
if data.Type != mcperrors.TypeEntityNotFound {
t.Fatalf("errEntityNotFound() type = %q, want %q", data.Type, mcperrors.TypeEntityNotFound)
}
if data.Entity != "thought" {
t.Fatalf("errEntityNotFound() entity = %q, want %q", data.Entity, "thought")
}
if data.Field != "thought_id" {
t.Fatalf("errEntityNotFound() field = %q, want %q", data.Field, "thought_id")
}
if data.Value != "123" {
t.Fatalf("errEntityNotFound() value = %q, want %q", data.Value, "123")
}
}