mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-31 15:10:42 +00:00
portfolio: Fix CryptoID balance issue and assertify tests (#1861)
* portfolio: Fix CryptoID balance issue and assertify tests * portfolio: Expand context usage, enhance tests and a few other minor improvements * portfolio: Further improvements and enhance common.IsValidCryptoAddress * config, portfolio: Use v6.DefaultConfig, switch to context.WithCancel
This commit is contained in:
@@ -107,7 +107,7 @@ type Config struct {
|
||||
Currency currency.Config `json:"currencyConfig"`
|
||||
Communications base.CommunicationsConfig `json:"communications"`
|
||||
RemoteControl RemoteControlConfig `json:"remoteControl"`
|
||||
Portfolio portfolio.Base `json:"portfolioAddresses"`
|
||||
Portfolio *portfolio.Base `json:"portfolioAddresses"`
|
||||
Exchanges []Exchange `json:"exchanges"`
|
||||
BankAccounts []banking.Account `json:"bankAccounts"`
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ func init() {
|
||||
// Note: Do not be tempted to use a constant for Duration. Whilst defaults are still written to config, we need to manage default upgrades discretely.
|
||||
var defaultFuturesTrackingSeekDuration = strconv.FormatInt(int64(time.Hour)*24*365, 10)
|
||||
|
||||
var defaultConfig = []byte(`{
|
||||
var defaultConfigV5 = []byte(`{
|
||||
"enabled": true,
|
||||
"verbose": false,
|
||||
"activelyTrackFuturesPositions": true,
|
||||
@@ -37,7 +37,7 @@ func (v *Version5) UpgradeConfig(_ context.Context, e []byte) ([]byte, error) {
|
||||
_, valueType, _, err := jsonparser.Get(e, "orderManager", "enabled")
|
||||
switch {
|
||||
case errors.Is(err, jsonparser.KeyPathNotFoundError), valueType == jsonparser.Null:
|
||||
return jsonparser.Set(e, defaultConfig, "orderManager")
|
||||
return jsonparser.Set(e, defaultConfigV5, "orderManager")
|
||||
case err != nil:
|
||||
return e, err
|
||||
}
|
||||
|
||||
34
config/versions/v6.go
Normal file
34
config/versions/v6.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package versions
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"github.com/buger/jsonparser"
|
||||
v6 "github.com/thrasher-corp/gocryptotrader/config/versions/v6"
|
||||
)
|
||||
|
||||
// Version6 implements ConfigVersion
|
||||
type Version6 struct{}
|
||||
|
||||
func init() {
|
||||
Manager.registerVersion(6, &Version6{})
|
||||
}
|
||||
|
||||
// UpgradeConfig checks and upgrades the portfolioAddresses.providers field
|
||||
func (v *Version6) UpgradeConfig(_ context.Context, e []byte) ([]byte, error) {
|
||||
_, valueType, _, err := jsonparser.Get(e, "portfolioAddresses", "providers")
|
||||
switch {
|
||||
case errors.Is(err, jsonparser.KeyPathNotFoundError), valueType == jsonparser.Null:
|
||||
return jsonparser.Set(e, v6.DefaultConfig, "portfolioAddresses", "providers")
|
||||
case err != nil:
|
||||
return e, err
|
||||
}
|
||||
return e, nil
|
||||
}
|
||||
|
||||
// DowngradeConfig removes the portfolioAddresses.providers field
|
||||
func (v *Version6) DowngradeConfig(_ context.Context, e []byte) ([]byte, error) {
|
||||
e = jsonparser.Delete(e, "portfolioAddresses", "providers")
|
||||
return e, nil
|
||||
}
|
||||
18
config/versions/v6/types.go
Normal file
18
config/versions/v6/types.go
Normal file
@@ -0,0 +1,18 @@
|
||||
package v6
|
||||
|
||||
// DefaultConfig is the default config used for the version 6 portfolio providers upgrade
|
||||
var DefaultConfig = []byte(`[
|
||||
{
|
||||
"name": "Ethplorer",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "XRPScan",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "CryptoID",
|
||||
"enabled": false,
|
||||
"apiKey": "Key"
|
||||
}
|
||||
]`)
|
||||
52
config/versions/v6_test.go
Normal file
52
config/versions/v6_test.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package versions
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/buger/jsonparser"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
v6 "github.com/thrasher-corp/gocryptotrader/config/versions/v6"
|
||||
)
|
||||
|
||||
var testData = []byte(`{
|
||||
"portfolioAddresses": {
|
||||
"addresses": [
|
||||
{
|
||||
"Address": "1JCe8z4jJVNXSjohjM4i9Hh813dLCNx2Sy",
|
||||
"CoinType": "BTC",
|
||||
"Balance": 0.00108832,
|
||||
"Description": "",
|
||||
"WhiteListed": false,
|
||||
"ColdStorage": false,
|
||||
"SupportedExchanges": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
}`)
|
||||
|
||||
func TestUpgrade(t *testing.T) {
|
||||
t.Parallel()
|
||||
r, err := new(Version6).UpgradeConfig(context.Background(), testData)
|
||||
require.NoError(t, err, "UpgradeConfig must not error")
|
||||
require.True(t, bytes.Contains(r, v6.DefaultConfig))
|
||||
|
||||
r2, err := new(Version6).UpgradeConfig(context.Background(), r)
|
||||
require.NoError(t, err, "UpgradeConfig must not error")
|
||||
assert.Equal(t, r, r2, "UpgradeConfig should not affect an already upgraded config")
|
||||
}
|
||||
|
||||
func TestDowngrade(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
r, err := new(Version6).UpgradeConfig(context.Background(), testData)
|
||||
require.NoError(t, err, "UpgradeConfig must not error")
|
||||
require.True(t, bytes.Contains(r, v6.DefaultConfig))
|
||||
|
||||
r, err = new(Version6).DowngradeConfig(context.Background(), r)
|
||||
require.NoError(t, err, "DowngradeConfig must not error")
|
||||
_, _, _, err = jsonparser.Get(r, "portfolioAddresses", "providers") //nolint:dogsled // Return values not needed
|
||||
assert.ErrorIs(t, err, jsonparser.KeyPathNotFoundError, "providers should be removed")
|
||||
}
|
||||
Reference in New Issue
Block a user