43 lines
1.2 KiB
Go
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")
|
|
}
|
|
}
|