Files
healthlog/internal/catalog/version_internal_test.go
T
av 29ca8d415c httpapi: точки метрики за период отдаются одним запросом
- `GET /api/v1/metrics/{name}?from&to&layer` — ряд точек за период; конверт
  объявляет слой, измеренный род, его применимость к отданному ряду и границу
  окна измерения, а сам ряд собирается из одного слоя, выбранного по охвату
  точек внутри периода
- use-case вынесен в `internal/points`, чтение — одним входом `store.ReadSeries`
  под одной транзакцией; правило выбора слоя остаётся в домене и приходит в
  хранилище колбэком
- `writeJSON` перестал экранировать HTML-символы и перестал глушить отказ
  записи: дословность содержимого точки иначе не удерживается, а оборванное
  тело уходило под видом успешного `200`
2026-08-04 18:46:45 +03:00

31 lines
1.7 KiB
Go

package catalog
import (
"testing"
"time"
)
// Ответ каталога есть функция снимка И горизонта измерения: метка из будущего,
// лежащая в витрине, въезжает в окно сама, с ходом часов и без единого коммита.
// Построено враждебным проходом: та же версия витрины, `cumulative` против
// `unknown`. Значит горизонт обязан входить в метку — иначе клиент с
// `If-None-Match` получит `304` на изменившийся ответ.
func TestГоризонтВходитВВерсиюОтвета(t *testing.T) {
t.Parallel()
at := time.Date(2026, 6, 1, 10, 30, 0, 0, time.UTC)
if Stamp("v", at) == Stamp("v", at.Add(2*time.Hour)) {
t.Error("версия не изменилась при сдвиге горизонта на два часа")
}
// Огрубление до часа точное, а не приблизительное: `hour_utc` объектов лежит
// ровно на часах, поэтому отбор меняется ровно при переходе через час.
// Внутри часа метка обязана стоять — иначе она дребезжала бы ежесекундно.
if Stamp("v", at) != Stamp("v", at.Add(20*time.Minute)) {
t.Error("версия сдвинулась внутри одного часа — метка дребезжит на месте")
}
if Stamp("", at) != "" {
t.Error("пустая версия витрины подписана горизонтом — подписывать нечем")
}
}