package merrors import ( "errors" "testing" "github.com/stretchr/testify/require" ) func TestLedgerReasonRoundTrip(t *testing.T) { err := LedgerIdempotencyConflict("conflicting command") reason, ok := Reason(err) require.True(t, ok) require.Equal(t, ReasonLedgerIdempotencyConflict, reason) restored, ok := FromReason(reason, "conflicting command") require.True(t, ok) require.True(t, errors.Is(restored, ErrLedgerIdempotencyConflict)) require.True(t, errors.Is(restored, ErrDataConflict)) } func TestAccountNotEligibleReasonRoundTrip(t *testing.T) { err := AccountNotEligible("account is frozen") reason, ok := Reason(err) require.True(t, ok) require.Equal(t, ReasonAccountNotEligible, reason) require.True(t, errors.Is(err, ErrAccountNotEligible)) require.True(t, errors.Is(err, ErrFailedPrecondition)) restored, ok := FromReason(reason, "account is frozen") require.True(t, ok) require.True(t, errors.Is(restored, ErrAccountNotEligible)) require.True(t, errors.Is(restored, ErrFailedPrecondition)) } func TestLedgerAccessViolationReasonRoundTrip(t *testing.T) { err := LedgerAccessViolation("from_account: account does not belong to organization") reason, ok := Reason(err) require.True(t, ok) require.Equal(t, ReasonLedgerAccessViolation, reason) require.True(t, errors.Is(err, ErrLedgerAccessViolation)) require.True(t, errors.Is(err, ErrFailedPrecondition)) restored, ok := FromReason(reason, "from_account: account does not belong to organization") require.True(t, ok) require.True(t, errors.Is(restored, ErrLedgerAccessViolation)) require.True(t, errors.Is(restored, ErrFailedPrecondition)) }