2026-05-13 16:07:25 +08:00

49 lines
1.7 KiB
Go

package coinledger
import "testing"
func TestNormalizeListQueryCapsPageSize(t *testing.T) {
query := normalizeListQuery(listQuery{Page: -1, PageSize: 1000, UserKeyword: " 10001 "})
if query.Page != 1 || query.PageSize != 100 || query.UserKeyword != "10001" {
t.Fatalf("normalized query mismatch: %+v", query)
}
}
func TestCoinLedgerWhereUsesTimeWindowAndUserFilter(t *testing.T) {
query := listQuery{StartAtMS: 100, EndAtMS: 200}
where, args := coinLedgerWhere("lalu", query, []int64{11, 22})
if want := "WHERE e.app_code = ? AND e.asset_type = ? AND e.created_at_ms >= ? AND e.created_at_ms < ? AND e.user_id IN (?,?)"; where != want {
t.Fatalf("where mismatch:\nwant %s\n got %s", want, where)
}
if len(args) != 6 || args[0] != "lalu" || args[1] != coinAssetType || args[2] != int64(100) || args[3] != int64(200) || args[4] != int64(11) || args[5] != int64(22) {
t.Fatalf("args mismatch: %#v", args)
}
}
func TestDirectionAndAmountForDelta(t *testing.T) {
if directionForDelta(-9) != directionOut || absInt64(-9) != 9 {
t.Fatalf("expense projection mismatch")
}
if directionForDelta(12) != directionIn || absInt64(12) != 12 {
t.Fatalf("income projection mismatch")
}
}
func TestParseMetadataJSON(t *testing.T) {
metadata, err := parseMetadataJSON(`{"gift_name":"Rose","gift_count":2,"target_user_id":1002}`)
if err != nil {
t.Fatalf("parse metadata failed: %v", err)
}
if metadata["gift_name"] != "Rose" || metadata["gift_count"] != float64(2) || metadata["target_user_id"] != float64(1002) {
t.Fatalf("metadata mismatch: %#v", metadata)
}
empty, err := parseMetadataJSON("null")
if err != nil {
t.Fatalf("parse empty metadata failed: %v", err)
}
if len(empty) != 0 {
t.Fatalf("empty metadata mismatch: %#v", empty)
}
}