fix(mileage): bound daily date ranges
This commit is contained in:
@@ -419,6 +419,21 @@ func TestNormalizeMileageStatisticsWindow(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizeDailyMileageWindowBoundsOnlyDateFilteredQueries(t *testing.T) {
|
||||
now := time.Date(2026, 7, 14, 12, 0, 0, 0, time.Local)
|
||||
unfiltered, err := normalizeDailyMileageWindow(url.Values{"limit": {"20"}}, now)
|
||||
if err != nil || unfiltered.Get("dateFrom") != "" || unfiltered.Get("dateTo") != "" {
|
||||
t.Fatalf("unfiltered daily mileage must stay compatible: %v, err=%v", unfiltered, err)
|
||||
}
|
||||
toOnly, err := normalizeDailyMileageWindow(url.Values{"dateTo": {"2026-07-14"}}, now)
|
||||
if err != nil || toOnly.Get("dateFrom") != "2026-06-15" {
|
||||
t.Fatalf("dateTo-only daily mileage should receive a bounded default start: %v, err=%v", toOnly, err)
|
||||
}
|
||||
if _, err := normalizeDailyMileageWindow(url.Values{"dateFrom": {"2025-01-01"}, "dateTo": {"2026-07-14"}}, now); err == nil {
|
||||
t.Fatal("date-filtered daily mileage over 366 days must be rejected")
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizeMileageVINSelection(t *testing.T) {
|
||||
normalized, err := normalizeMileageVINSelection(url.Values{"vins": {" VIN001,VIN002,VIN001 "}})
|
||||
if err != nil || normalized.Get("vins") != "VIN001,VIN002" {
|
||||
|
||||
@@ -3177,6 +3177,10 @@ func (s *Service) DailyMileage(ctx context.Context, query url.Values) (Page[Dail
|
||||
if err != nil {
|
||||
return Page[DailyMileageRow]{}, err
|
||||
}
|
||||
resolvedQuery, err = normalizeDailyMileageWindow(resolvedQuery, time.Now())
|
||||
if err != nil {
|
||||
return Page[DailyMileageRow]{}, err
|
||||
}
|
||||
return s.store.DailyMileage(ctx, resolvedQuery)
|
||||
}
|
||||
|
||||
@@ -3243,6 +3247,13 @@ func normalizeMileageStatisticsWindow(query url.Values, now time.Time) (url.Valu
|
||||
return next, nil
|
||||
}
|
||||
|
||||
func normalizeDailyMileageWindow(query url.Values, now time.Time) (url.Values, error) {
|
||||
if strings.TrimSpace(query.Get("dateFrom")) == "" && strings.TrimSpace(query.Get("dateTo")) == "" {
|
||||
return cloneValues(query), nil
|
||||
}
|
||||
return normalizeMileageStatisticsWindow(query, now)
|
||||
}
|
||||
|
||||
func (s *Service) OnlineStatisticsSummary(ctx context.Context, query url.Values) (OnlineStatisticsSummary, error) {
|
||||
resolvedQuery, err := s.resolveVehicleQuery(ctx, query)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user