installerbuilder/internal/errors/error_test.go

92 lines
2.3 KiB
Go

// Package errors 提供错误处理框架
package errors
import (
"errors"
"testing"
"github.com/stretchr/testify/assert"
)
func TestBuildError_Error(t *testing.T) {
// 测试没有底层错误的情况
err := NewBuildError(
ErrConfigParse,
"ConfigParser",
"Failed to parse config file",
nil,
map[string]interface{}{"file": "config.yaml"},
)
assert.Equal(t, "[CONFIG_PARSE_ERROR] ConfigParser: Failed to parse config file", err.Error())
assert.Equal(t, ErrConfigParse, err.Code())
assert.Equal(t, "ConfigParser", err.Component())
assert.Equal(t, "config.yaml", err.Details()["file"])
// 测试有底层错误的情况
cause := errors.New("file not found")
err = NewBuildError(
ErrConfigParse,
"ConfigParser",
"Failed to parse config file",
cause,
map[string]interface{}{"file": "config.yaml"},
)
assert.Contains(t, err.Error(), "caused by: file not found")
assert.Equal(t, cause, err.Unwrap())
}
func TestWrap(t *testing.T) {
cause := errors.New("original error")
wrapped := Wrap(cause, "context message")
assert.Contains(t, wrapped.Error(), "context message")
assert.Contains(t, wrapped.Error(), "original error")
assert.True(t, errors.Is(wrapped, cause))
}
func TestWrapWithCode(t *testing.T) {
cause := errors.New("original error")
wrapped := WrapWithCode(
cause,
ErrConfigParse,
"ConfigParser",
"Failed to parse config",
map[string]interface{}{"file": "config.yaml"},
)
assert.Equal(t, ErrConfigParse, wrapped.Code())
assert.Equal(t, "ConfigParser", wrapped.Component())
assert.Contains(t, wrapped.Error(), "Failed to parse config")
assert.Equal(t, "config.yaml", wrapped.Details()["file"])
}
func TestIsCode(t *testing.T) {
err := NewBuildError(
ErrConfigParse,
"ConfigParser",
"Failed to parse config file",
nil,
nil,
)
assert.True(t, IsCode(err, ErrConfigParse))
assert.False(t, IsCode(err, ErrBuildFailed))
assert.False(t, IsCode(errors.New("regular error"), ErrConfigParse))
}
func TestFormatErrorList(t *testing.T) {
errs := []error{
errors.New("error 1"),
errors.New("error 2"),
errors.New("error 3"),
}
formatted := FormatErrorList(errs)
assert.Contains(t, formatted, "error 1")
assert.Contains(t, formatted, "error 2")
assert.Contains(t, formatted, "error 3")
assert.Contains(t, formatted, "\n")
}