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:
Adrian Gallagher
2025-06-10 16:29:57 +10:00
committed by GitHub
parent 122ab2f849
commit 19b8957f3f
109 changed files with 2485 additions and 5670 deletions

View File

@@ -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) {

View File

@@ -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"

View File

@@ -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)