mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 23:16:45 +00:00
* Fixes issue with marshalling margin types * Update exchanges/order/order_test.go Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> * Update exchanges/margin/margin.go Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> * Update exchanges/order/order_test.go Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> * Update test name --------- Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com>
126 lines
3.5 KiB
Go
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.Equal(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())
|
|
}
|
|
}
|