package neorpc

import (
	"errors"
	"fmt"
	"io/fs"
	"testing"

	"github.com/stretchr/testify/require"
)

func TestError_ErrorsAs(t *testing.T) {
	err := NewInternalServerError("some error")
	wrapped := fmt.Errorf("some meaningful error: %w", err)

	// Check that Error can be used as a target for errors.As:
	var actual *Error
	require.True(t, errors.As(wrapped, &actual))
	require.Equal(t, "Internal error (-32603) - some error", actual.Error())

	var bad *fs.PathError
	require.False(t, errors.As(wrapped, &bad))
}

func TestError_ErrorsIs(t *testing.T) {
	err := NewInternalServerError("some error")
	wrapped := fmt.Errorf("some meaningful error: %w", err)

	// Check that Error can be recognized via errors.Is:
	ref := NewInternalServerError("another server error")
	require.True(t, errors.Is(wrapped, ref))

	// Invalid target type:
	require.False(t, errors.Is(wrapped, NewInvalidParamsError("invalid params")))
}