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.
This commit is contained in:
84
internal/tools/common_test.go
Normal file
84
internal/tools/common_test.go
Normal file
@@ -0,0 +1,84 @@
|
||||
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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user