Files
gocryptotrader/exchanges/margin/margin_test.go
dependabot[bot] 179519a3c3 golangci-lint: Bump to v2.0.2 and fix issues (#1871)
* build(deps): Bump golangci/golangci-lint-action from 6 to 7

Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 6 to 7.
- [Release notes](https://github.com/golangci/golangci-lint-action/releases)
- [Commits](https://github.com/golangci/golangci-lint-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: golangci/golangci-lint-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* golangci-lint: Bump to v2 and fix issues

* refactor: remove no longer need ifshort nolint directives, fix test grammar and improve for loop logic

* nits: update order pair handling in tests and improve string replacement logic

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>
2025-04-02 15:36:05 +11:00

126 lines
3.5 KiB
Go

package margin
import (
"fmt"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/encoding/json"
)
func TestValid(t *testing.T) {
t.Parallel()
require.True(t, Isolated.Valid())
require.True(t, Multi.Valid())
require.True(t, NoMargin.Valid())
require.True(t, SpotIsolated.Valid())
require.False(t, Unset.Valid())
require.False(t, Unknown.Valid())
require.False(t, Type(137).Valid())
}
func TestUnmarshalJSON(t *testing.T) {
t.Parallel()
for name, tc := range map[string]struct {
in string
want Type
err error
}{
"isolated": {`{"margin":"isolated"}`, Isolated, nil},
"cross": {`{"margin":"cross"}`, Multi, nil},
"cash": {`{"margin":"cash"}`, NoMargin, nil},
"spotIsolated": {`{"margin":"spot_isolated"}`, SpotIsolated, nil},
"invalid": {`{"margin":"hello moto"}`, Unknown, ErrInvalidMarginType},
"unset": {`{"margin":""}`, Unset, nil},
"": {`{"margin":""}`, Unset, nil},
} {
t.Run(name, func(t *testing.T) {
t.Parallel()
var alien struct {
M Type `json:"margin"`
}
err := json.Unmarshal([]byte(tc.in), &alien)
assert.ErrorIs(t, err, tc.err)
assert.Equal(t, tc.want, alien.M)
})
}
}
func TestMarshalJSON(t *testing.T) {
t.Parallel()
for _, tc := range []struct {
in Type
want string
}{
{Isolated, fmt.Sprintf(`%q`, isolatedStr)},
{Multi, fmt.Sprintf(`%q`, multiStr)},
{NoMargin, fmt.Sprintf(`%q`, cashStr)},
{SpotIsolated, fmt.Sprintf(`%q`, spotIsolatedStr)},
{Type(uint8(123)), fmt.Sprintf(`%q`, unknownStr)},
{Unset, fmt.Sprintf(`%q`, unsetStr)},
} {
t.Run(tc.want, func(t *testing.T) {
t.Parallel()
resp, err := json.Marshal(tc.in)
require.NoError(t, err)
assert.Equal(t, tc.want, string(resp))
})
}
}
func TestString(t *testing.T) {
t.Parallel()
assert.Equal(t, unknownStr, Unknown.String())
assert.Equal(t, isolatedStr, Isolated.String())
assert.Equal(t, multiStr, Multi.String())
assert.Equal(t, unsetStr, Unset.String())
assert.Equal(t, spotIsolatedStr, SpotIsolated.String())
assert.Equal(t, cashStr, NoMargin.String())
assert.Equal(t, unknownStr, Type(30).String())
assert.Empty(t, Unset.String())
}
func TestUpper(t *testing.T) {
t.Parallel()
assert.Equal(t, strings.ToUpper(unknownStr), Unknown.Upper())
assert.Equal(t, strings.ToUpper(isolatedStr), Isolated.Upper())
assert.Equal(t, strings.ToUpper(multiStr), Multi.Upper())
assert.Equal(t, strings.ToUpper(spotIsolatedStr), SpotIsolated.Upper())
assert.Equal(t, strings.ToUpper(cashStr), NoMargin.Upper())
assert.Equal(t, strings.ToUpper(unsetStr), Unset.Upper())
}
func TestIsValidString(t *testing.T) {
t.Parallel()
assert.False(t, IsValidString("lol"))
assert.True(t, IsValidString("spot_isolated"))
assert.True(t, IsValidString("cash"))
assert.True(t, IsValidString("isolated"))
assert.True(t, IsValidString("cross"))
assert.True(t, IsValidString("multi"))
assert.True(t, IsValidString(""))
assert.False(t, IsValidString("unknown"))
}
func TestStringToMarginType(t *testing.T) {
t.Parallel()
for label, v := range map[string]struct {
MarginType Type
Error error
}{
"lol": {Unknown, ErrInvalidMarginType},
"": {Unset, nil},
"cross": {Multi, nil},
"multi": {Multi, nil},
"isolated": {Isolated, nil},
"cash": {NoMargin, nil},
"spot_isolated": {SpotIsolated, nil},
} {
resp, err := StringToMarginType(label)
assert.ErrorIs(t, err, v.Error)
assert.Equal(t, v.MarginType.String(), resp.String())
}
}