internal/repository/clickhouse/detailed_analytics_timezone_test.go
Rama main · réplica de lectura del repositorio original.
package clickhouse
import (
"strings"
"testing"
"time"
"github.com/flexprice/flexprice/internal/domain/events"
"github.com/flexprice/flexprice/internal/types"
"github.com/stretchr/testify/assert"
)
func detailedTZParams(tz string) *events.MeterUsageDetailedAnalyticsParams {
return &events.MeterUsageDetailedAnalyticsParams{
TenantID: "t1",
EnvironmentID: "e1",
ExternalCustomerID: "cust-1",
StartTime: time.Date(2026, 6, 20, 0, 0, 0, 0, time.UTC),
EndTime: time.Date(2026, 6, 24, 0, 0, 0, 0, time.UTC),
WindowSize: types.WindowSizeDay,
AggregationTypes: []types.AggregationType{types.AggregationSum},
Timezone: tz,
}
}
// The detailed-analytics time-series buckets in params.Timezone (auto-derived
// server-side from the customer). A non-UTC tz must localize the window; an empty
// tz must bucket in UTC.
func TestBuildDetailedPointsQuery_Timezone(t *testing.T) {
qb := NewMeterUsageQueryBuilder()
ist, _ := qb.BuildDetailedPointsQuery(detailedTZParams("Asia/Kolkata"), nil)
assert.Contains(t, ist, "toStartOfDay(timestamp, 'Asia/Kolkata')",
"non-UTC customer timezone must localize the day bucket")
utc, _ := qb.BuildDetailedPointsQuery(detailedTZParams(""), nil)
assert.NotContains(t, utc, "Asia/Kolkata", "empty tz must not localize")
assert.True(t, strings.Contains(utc, "toStartOfDay"), "empty tz must still bucket by day (UTC)")
}