mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 23:16:45 +00:00
codebase: Replace !errors.Is(err, target) with testify (#1931)
* tests: Replace !errors.Is(err, target) with testify equivalents * codebase: Manual !errors.Is(err, target) replacements * typo: Replace errMisMatchedEvent with errMismatchedEvent * tests: Enhance error messages for better output * tests: Refactor error assertions in various test cases to use require and improve clarity * misc linter: Fix assert should wording * tests: Simplify assertions in TestCreateSignals for clarity and conciseness * tests: Enhance assertion message in TestCreateSignals
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package orderbook
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"math"
|
||||
"strings"
|
||||
"testing"
|
||||
@@ -31,9 +30,7 @@ func TestWhaleBomb(t *testing.T) {
|
||||
b := testSetup()
|
||||
|
||||
_, err := b.WhaleBomb(-1, true)
|
||||
if !errors.Is(err, errPriceTargetInvalid) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errPriceTargetInvalid)
|
||||
}
|
||||
require.ErrorIs(t, err, errPriceTargetInvalid)
|
||||
|
||||
result, err := b.WhaleBomb(7001, true) // <- This price should not be wiped out on the book.
|
||||
require.NoError(t, err)
|
||||
@@ -100,14 +97,10 @@ func TestWhaleBomb(t *testing.T) {
|
||||
}
|
||||
|
||||
_, err = b.WhaleBomb(6000, true)
|
||||
if !errors.Is(err, errCannotShiftPrice) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errCannotShiftPrice)
|
||||
}
|
||||
require.ErrorIs(t, err, errCannotShiftPrice)
|
||||
|
||||
_, err = b.WhaleBomb(-1, false)
|
||||
if !errors.Is(err, errPriceTargetInvalid) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errPriceTargetInvalid)
|
||||
}
|
||||
require.ErrorIs(t, err, errPriceTargetInvalid)
|
||||
|
||||
result, err = b.WhaleBomb(6998, false) // <- This price should not be wiped out on the book.
|
||||
require.NoError(t, err)
|
||||
@@ -174,9 +167,7 @@ func TestWhaleBomb(t *testing.T) {
|
||||
}
|
||||
|
||||
_, err = b.WhaleBomb(7500, false)
|
||||
if !errors.Is(err, errCannotShiftPrice) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errCannotShiftPrice)
|
||||
}
|
||||
require.ErrorIs(t, err, errCannotShiftPrice)
|
||||
}
|
||||
|
||||
func TestSimulateOrder(t *testing.T) {
|
||||
@@ -185,14 +176,10 @@ func TestSimulateOrder(t *testing.T) {
|
||||
|
||||
// Invalid
|
||||
_, err := b.SimulateOrder(-8000, true)
|
||||
if !errors.Is(err, errQuoteAmountInvalid) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errQuoteAmountInvalid)
|
||||
}
|
||||
require.ErrorIs(t, err, errQuoteAmountInvalid)
|
||||
|
||||
_, err = (&Base{}).SimulateOrder(1337, true)
|
||||
if !errors.Is(err, errNoLiquidity) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errNoLiquidity)
|
||||
}
|
||||
require.ErrorIs(t, err, errNoLiquidity)
|
||||
|
||||
// Full liquidity used
|
||||
result, err := b.SimulateOrder(21002, true)
|
||||
@@ -327,14 +314,10 @@ func TestSimulateOrder(t *testing.T) {
|
||||
// Invalid
|
||||
|
||||
_, err = (&Base{}).SimulateOrder(-1, false)
|
||||
if !errors.Is(err, errBaseAmountInvalid) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errBaseAmountInvalid)
|
||||
}
|
||||
require.ErrorIs(t, err, errBaseAmountInvalid)
|
||||
|
||||
_, err = (&Base{}).SimulateOrder(2, false)
|
||||
if !errors.Is(err, errNoLiquidity) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errNoLiquidity)
|
||||
}
|
||||
require.ErrorIs(t, err, errNoLiquidity)
|
||||
|
||||
// Full liquidity used
|
||||
result, err = b.SimulateOrder(3, false)
|
||||
@@ -466,48 +449,34 @@ func TestSimulateOrder(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetAveragePrice(t *testing.T) {
|
||||
var b Base
|
||||
b.Exchange = "Binance"
|
||||
cp, err := currency.NewPairFromString("ETH-USDT")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
b := Base{
|
||||
Exchange: "Binance",
|
||||
Pair: currency.NewBTCUSD(),
|
||||
}
|
||||
b.Pair = cp
|
||||
b.Bids = []Tranche{}
|
||||
_, err = b.GetAveragePrice(false, 5)
|
||||
if errors.Is(errNotEnoughLiquidity, err) {
|
||||
t.Error("expected: %w, received %w", errNotEnoughLiquidity, err)
|
||||
}
|
||||
b = Base{}
|
||||
b.Pair = cp
|
||||
b.Asks = []Tranche{
|
||||
{Amount: 5, Price: 1},
|
||||
{Amount: 5, Price: 2},
|
||||
{Amount: 5, Price: 3},
|
||||
{Amount: 5, Price: 4},
|
||||
_, err := b.GetAveragePrice(false, 5)
|
||||
assert.ErrorIs(t, err, errNotEnoughLiquidity)
|
||||
|
||||
b = Base{
|
||||
Asks: []Tranche{
|
||||
{Amount: 5, Price: 1},
|
||||
{Amount: 5, Price: 2},
|
||||
{Amount: 5, Price: 3},
|
||||
{Amount: 5, Price: 4},
|
||||
},
|
||||
}
|
||||
_, err = b.GetAveragePrice(true, -2)
|
||||
if !errors.Is(err, errAmountInvalid) {
|
||||
t.Errorf("expected: %v, received %v", errAmountInvalid, err)
|
||||
}
|
||||
assert.ErrorIs(t, err, errAmountInvalid)
|
||||
|
||||
avgPrice, err := b.GetAveragePrice(true, 15)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if avgPrice != 2 {
|
||||
t.Errorf("avg price calculation failed: expected 2, received %f", avgPrice)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 2.0, avgPrice)
|
||||
|
||||
avgPrice, err = b.GetAveragePrice(true, 18)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if math.Round(avgPrice*1000)/1000 != 2.333 {
|
||||
t.Errorf("avg price calculation failed: expected 2.333, received %f", math.Round(avgPrice*1000)/1000)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 2.333, math.Round(avgPrice*1000)/1000)
|
||||
|
||||
_, err = b.GetAveragePrice(true, 25)
|
||||
if !errors.Is(err, errNotEnoughLiquidity) {
|
||||
t.Errorf("expected: %v, received %v", errNotEnoughLiquidity, err)
|
||||
}
|
||||
assert.ErrorIs(t, err, errNotEnoughLiquidity)
|
||||
}
|
||||
|
||||
func TestFindNominalAmount(t *testing.T) {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package orderbook
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"log"
|
||||
"math/rand"
|
||||
"os"
|
||||
@@ -62,77 +61,55 @@ func TestVerify(t *testing.T) {
|
||||
|
||||
b.Asks = []Tranche{{ID: 1337, Price: 99, Amount: 1}, {ID: 1337, Price: 100, Amount: 1}}
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errIDDuplication) {
|
||||
t.Fatalf("expecting %s error but received %v", errIDDuplication, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errIDDuplication)
|
||||
|
||||
b.Asks = []Tranche{{Price: 100, Amount: 1}, {Price: 100, Amount: 1}}
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errDuplication) {
|
||||
t.Fatalf("expecting %s error but received %v", errDuplication, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errDuplication)
|
||||
|
||||
b.Asks = []Tranche{{Price: 100, Amount: 1}, {Price: 99, Amount: 1}}
|
||||
b.IsFundingRate = true
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errPeriodUnset) {
|
||||
t.Fatalf("expecting %s error but received %v", errPeriodUnset, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errPeriodUnset)
|
||||
|
||||
b.IsFundingRate = false
|
||||
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errPriceOutOfOrder) {
|
||||
t.Fatalf("expecting %s error but received %v", errPriceOutOfOrder, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errPriceOutOfOrder)
|
||||
|
||||
b.Asks = []Tranche{{Price: 100, Amount: 1}, {Price: 100, Amount: 0}}
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errAmountInvalid) {
|
||||
t.Fatalf("expecting %s error but received %v", errAmountInvalid, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errAmountInvalid)
|
||||
|
||||
b.Asks = []Tranche{{Price: 100, Amount: 1}, {Price: 0, Amount: 100}}
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errPriceNotSet) {
|
||||
t.Fatalf("expecting %s error but received %v", errPriceNotSet, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errPriceNotSet)
|
||||
|
||||
b.Bids = []Tranche{{ID: 1337, Price: 100, Amount: 1}, {ID: 1337, Price: 99, Amount: 1}}
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errIDDuplication) {
|
||||
t.Fatalf("expecting %s error but received %v", errIDDuplication, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errIDDuplication)
|
||||
|
||||
b.Bids = []Tranche{{Price: 100, Amount: 1}, {Price: 100, Amount: 1}}
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errDuplication) {
|
||||
t.Fatalf("expecting %s error but received %v", errDuplication, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errDuplication)
|
||||
|
||||
b.Bids = []Tranche{{Price: 99, Amount: 1}, {Price: 100, Amount: 1}}
|
||||
b.IsFundingRate = true
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errPeriodUnset) {
|
||||
t.Fatalf("expecting %s error but received %v", errPeriodUnset, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errPeriodUnset)
|
||||
|
||||
b.IsFundingRate = false
|
||||
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errPriceOutOfOrder) {
|
||||
t.Fatalf("expecting %s error but received %v", errPriceOutOfOrder, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errPriceOutOfOrder)
|
||||
|
||||
b.Bids = []Tranche{{Price: 100, Amount: 1}, {Price: 100, Amount: 0}}
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errAmountInvalid) {
|
||||
t.Fatalf("expecting %s error but received %v", errAmountInvalid, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errAmountInvalid)
|
||||
|
||||
b.Bids = []Tranche{{Price: 100, Amount: 1}, {Price: 0, Amount: 100}}
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errPriceNotSet) {
|
||||
t.Fatalf("expecting %s error but received %v", errPriceNotSet, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errPriceNotSet)
|
||||
}
|
||||
|
||||
func TestCalculateTotalBids(t *testing.T) {
|
||||
@@ -539,9 +516,7 @@ func TestSorting(t *testing.T) {
|
||||
|
||||
b.Asks = deployUnorderedSlice()
|
||||
err := b.Verify()
|
||||
if !errors.Is(err, errPriceOutOfOrder) {
|
||||
t.Fatalf("error expected %v received %v", errPriceOutOfOrder, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errPriceOutOfOrder)
|
||||
|
||||
b.Asks.SortAsks()
|
||||
err = b.Verify()
|
||||
@@ -551,9 +526,7 @@ func TestSorting(t *testing.T) {
|
||||
|
||||
b.Bids = deployUnorderedSlice()
|
||||
err = b.Verify()
|
||||
if !errors.Is(err, errPriceOutOfOrder) {
|
||||
t.Fatalf("error expected %v received %v", errPriceOutOfOrder, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errPriceOutOfOrder)
|
||||
|
||||
b.Bids.SortBids()
|
||||
err = b.Verify()
|
||||
@@ -677,19 +650,14 @@ func TestCheckAlignment(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
err = checkAlignment(itemWithFunding, false, true, false, false, dsc, "Bitfinex")
|
||||
if !errors.Is(err, errPriceNotSet) {
|
||||
t.Fatalf("received: %v but expected: %v", err, errPriceNotSet)
|
||||
}
|
||||
require.ErrorIs(t, err, errPriceNotSet)
|
||||
|
||||
err = checkAlignment(itemWithFunding, true, true, false, false, dsc, "Binance")
|
||||
if !errors.Is(err, errPriceNotSet) {
|
||||
t.Fatalf("received: %v but expected: %v", err, errPriceNotSet)
|
||||
}
|
||||
require.ErrorIs(t, err, errPriceNotSet)
|
||||
|
||||
itemWithFunding[0].Price = 1337
|
||||
err = checkAlignment(itemWithFunding, true, true, false, true, dsc, "Binance")
|
||||
if !errors.Is(err, errChecksumStringNotSet) {
|
||||
t.Fatalf("received: %v but expected: %v", err, errChecksumStringNotSet)
|
||||
}
|
||||
require.ErrorIs(t, err, errChecksumStringNotSet)
|
||||
|
||||
itemWithFunding[0].StrAmount = "1337.0000000"
|
||||
itemWithFunding[0].StrPrice = "1337.0000000"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package orderbook
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -320,9 +319,7 @@ func TestUpdateByID(t *testing.T) {
|
||||
err = a.updateByID(Tranches{
|
||||
{Price: 11, Amount: 1, ID: 1337},
|
||||
})
|
||||
if !errors.Is(err, errIDCannotBeMatched) {
|
||||
t.Fatalf("expecting %s but received %v", errIDCannotBeMatched, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errIDCannotBeMatched)
|
||||
|
||||
err = a.updateByID(Tranches{ // Simulate Bitmex updating
|
||||
{Price: 0, Amount: 1337, ID: 3},
|
||||
@@ -402,9 +399,7 @@ func TestDeleteByID(t *testing.T) {
|
||||
|
||||
// Intentional error
|
||||
err = a.deleteByID(Tranches{{Price: 11, Amount: 1, ID: 1337}}, false)
|
||||
if !errors.Is(err, errIDCannotBeMatched) {
|
||||
t.Fatalf("expecting %s but received %v", errIDCannotBeMatched, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errIDCannotBeMatched)
|
||||
|
||||
// Error bypass
|
||||
err = a.deleteByID(Tranches{{Price: 11, Amount: 1, ID: 1337}}, true)
|
||||
@@ -1001,9 +996,7 @@ func TestInsertUpdatesBid(t *testing.T) {
|
||||
{Price: 3, Amount: 1, ID: 3},
|
||||
{Price: 1, Amount: 1, ID: 1},
|
||||
})
|
||||
if !errors.Is(err, errCollisionDetected) {
|
||||
t.Fatalf("expected error %s but received %v", errCollisionDetected, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errCollisionDetected)
|
||||
|
||||
Check(t, b, 6, 36, 6)
|
||||
|
||||
@@ -1063,9 +1056,7 @@ func TestInsertUpdatesAsk(t *testing.T) {
|
||||
{Price: 3, Amount: 1, ID: 3},
|
||||
{Price: 1, Amount: 1, ID: 1},
|
||||
})
|
||||
if !errors.Is(err, errCollisionDetected) {
|
||||
t.Fatalf("expected error %s but received %v", errCollisionDetected, err)
|
||||
}
|
||||
require.ErrorIs(t, err, errCollisionDetected)
|
||||
|
||||
Check(t, a, 6, 36, 6)
|
||||
|
||||
@@ -1260,9 +1251,7 @@ func TestGetMovementByBaseAmount(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
movement, err := depth.bidTranches.getMovementByBase(tt.BaseAmount, tt.ReferencePrice, false)
|
||||
if !errors.Is(err, tt.ExpectedError) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, tt.ExpectedError)
|
||||
}
|
||||
require.ErrorIs(t, err, tt.ExpectedError)
|
||||
|
||||
if movement == nil {
|
||||
return
|
||||
@@ -1501,9 +1490,8 @@ func TestGetBaseAmountFromImpact(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
base, err := depth.bidTranches.hitBidsByImpactSlippage(tt.ImpactSlippage, tt.ReferencePrice)
|
||||
if !errors.Is(err, tt.ExpectedError) {
|
||||
t.Fatalf("%s received: '%v' but expected: '%v'", tt.Name, err, tt.ExpectedError)
|
||||
}
|
||||
require.ErrorIs(t, err, tt.ExpectedError)
|
||||
|
||||
if !base.IsEqual(tt.ExpectedShift) {
|
||||
t.Fatalf("%s quote received: '%+v' but expected: '%+v'",
|
||||
tt.Name, base, tt.ExpectedShift)
|
||||
@@ -1586,9 +1574,7 @@ func TestGetMovementByQuoteAmount(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
movement, err := depth.askTranches.getMovementByQuotation(tt.QuoteAmount, tt.ReferencePrice, false)
|
||||
if !errors.Is(err, tt.ExpectedError) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, tt.ExpectedError)
|
||||
}
|
||||
require.ErrorIs(t, err, tt.ExpectedError)
|
||||
|
||||
if movement == nil {
|
||||
return
|
||||
@@ -1817,16 +1803,13 @@ func TestGetQuoteAmountFromImpact(t *testing.T) {
|
||||
func TestGetHeadPrice(t *testing.T) {
|
||||
t.Parallel()
|
||||
depth := NewDepth(id)
|
||||
if _, err := depth.bidTranches.getHeadPriceNoLock(); !errors.Is(err, errNoLiquidity) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errNoLiquidity)
|
||||
}
|
||||
if _, err := depth.askTranches.getHeadPriceNoLock(); !errors.Is(err, errNoLiquidity) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errNoLiquidity)
|
||||
}
|
||||
err := depth.LoadSnapshot(bid, ask, 0, time.Now(), time.Now(), true)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to load snapshot: %s", err)
|
||||
}
|
||||
_, err := depth.bidTranches.getHeadPriceNoLock()
|
||||
require.ErrorIs(t, err, errNoLiquidity)
|
||||
_, err = depth.askTranches.getHeadPriceNoLock()
|
||||
require.ErrorIs(t, err, errNoLiquidity)
|
||||
|
||||
err = depth.LoadSnapshot(bid, ask, 0, time.Now(), time.Now(), true)
|
||||
require.NoError(t, err, "LoadSnapshot must not error")
|
||||
|
||||
val, err := depth.bidTranches.getHeadPriceNoLock()
|
||||
require.NoError(t, err)
|
||||
|
||||
Reference in New Issue
Block a user