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("пустая версия витрины подписана горизонтом — подписывать нечем")
	}
}
