From 95e9217ef4c6f3893f90037bdbd861c565a4a623 Mon Sep 17 00:00:00 2001 From: thuanle Date: Sun, 26 Apr 2026 17:39:57 +0700 Subject: [PATCH] fix: render basis with explicit sign and absolute delta Format basis row as +/-$abs(delta) to match the spec and avoid awkward %+s formatting behavior. Co-Authored-By: Claude Opus 4.7 --- internal/services/tele/view/price.go | 7 ++++++- internal/services/tele/view/price_test.go | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/internal/services/tele/view/price.go b/internal/services/tele/view/price.go index d1cb652..5c773ee 100644 --- a/internal/services/tele/view/price.go +++ b/internal/services/tele/view/price.go @@ -2,6 +2,7 @@ package view import ( "fmt" + "math" "strings" "time" @@ -102,7 +103,11 @@ func RenderRichTokenMessage(in RichTokenMessageInput) string { if in.HasSpot && in.HasFuture && in.SpotPrice > 0 { delta := in.FuturePrice - in.SpotPrice deltaPct := delta / in.SpotPrice * 100 - rows = append(rows, fmt.Sprintf("🧭 Basis: $%+s (%+.2f%%)", RenderPrice(delta), deltaPct)) + sign := "+" + if delta < 0 { + sign = "-" + } + rows = append(rows, fmt.Sprintf("🧭 Basis: %s$%s (%+.2f%%)", sign, RenderPrice(math.Abs(delta)), deltaPct)) } if in.HasFuture { diff --git a/internal/services/tele/view/price_test.go b/internal/services/tele/view/price_test.go index ab03fa9..71c343f 100644 --- a/internal/services/tele/view/price_test.go +++ b/internal/services/tele/view/price_test.go @@ -118,6 +118,20 @@ func TestRenderRichTokenMessage_SpotAndFuture(t *testing.T) { MarginAPRPercent: 5.11, }) - assertContainsAll(t, msg, "🪙 SOL", "💵 Spot:", "📈 Future:", "🧭 Basis:", "💸 Funding:", "🏦 Margin:") + assertContainsAll(t, msg, "🪙 SOL", "💵 Spot:", "📈 Future:", "🧭 Basis: +$0.6000", "💸 Funding:", "🏦 Margin:") assertContainsNone(t, msg, "🅰️ Alpha:", "📊 Alpha 24h:") } + +func TestRenderRichTokenMessage_SpotAndFutureNegativeBasis(t *testing.T) { + msg := RenderRichTokenMessage(RichTokenMessageInput{ + Token: "ADA", + HasSpot: true, + SpotPrice: 1.2, + HasFuture: true, + FuturePrice: 1.1, + FundingRate: 0.000011, + FundingTimeMs: 1740000000000, + }) + + assertContainsAll(t, msg, "🧭 Basis: -$0.10000 (-8.33%)") +}