Ctrl K
ComunidadGuías…

internal/repository/clickhouse/detailed_analytics_timezone_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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)")
}