Files
overnight-trading-bot/internal/repository/mysql/rows_test.go
T
2026-06-08 15:47:00 +00:00

43 lines
1.2 KiB
Go

package mysql
import (
"errors"
"fmt"
"testing"
"time"
mysql "github.com/go-sql-driver/mysql"
"github.com/shopspring/decimal"
"overnight-trading-bot/internal/domain"
)
func TestMinuteCandleRowPreservesTimestamp(t *testing.T) {
ts := time.Date(2026, 6, 8, 15, 25, 30, 123000000, time.UTC)
row := minuteCandleRowFromDomain(domain.Candle{
InstrumentUID: "uid",
TradeDate: ts,
Open: decimal.NewFromInt(1),
})
if !row.TradeDate.Equal(ts) {
t.Fatalf("minute timestamp=%s, want %s", row.TradeDate, ts)
}
daily := candleRowFromDomain(domain.Candle{InstrumentUID: "uid", TradeDate: ts})
if daily.TradeDate.Equal(ts) || daily.TradeDate.Hour() != 0 || daily.TradeDate.Minute() != 0 {
t.Fatalf("daily timestamp was not truncated to date: %s", daily.TradeDate)
}
}
func TestIsMissingTableError(t *testing.T) {
if !isMissingTableError(&mysql.MySQLError{Number: 1146}) {
t.Fatal("expected MySQL 1146 to be treated as missing table")
}
if !isMissingTableError(fmt.Errorf("wrap: %w", &mysql.MySQLError{Number: 1146})) {
t.Fatal("expected wrapped MySQL 1146 to be treated as missing table")
}
if isMissingTableError(errors.New("not mysql")) {
t.Fatal("plain errors must not be treated as missing table")
}
}