package web

import (
	"io/fs"
	"testing"
)

// Стык вшивания с раздачей проверяется здесь, и только здесь: проверки самой
// раздачи получают файловую систему параметром и подставляют свою, поэтому
// расхождение объявленной раскладки с настоящей им недоступно по построению.
//
// Раскладка объявлена дважды — выходным каталогом сборщика и `distDir` здесь, —
// и связаны они только совпадением строк. Разойдясь, они дают `503` на каждом
// пути показа при зелёном наборе проверок.
func TestDistMatchesEmbeddedLayout(t *testing.T) {
	dist, built := Dist()

	if dist == nil {
		t.Fatal("вшитое поддерево недоступно: distDir разошёлся с директивой go:embed")
	}

	_, err := fs.Stat(dist, "index.html")

	// Оба исхода законны и различаются одним: собрано приложение или нет.
	// Незаконно третье — «собрано, но `Dist` этого не видит».
	if built && err != nil {
		t.Fatalf("приложение объявлено собранным, а разметки в поддереве нет: %v", err)
	}

	if !built && err == nil {
		t.Fatal("разметка есть, а приложение объявлено несобранным")
	}

	if !built {
		t.Skip("приложение не собрано: прогон без шага сборки, проверять нечего")
	}
}

// Метка пустого каталога вшивается вместе с прочим: без неё каталога не было бы
// в git, и сборка Go отказывала бы у всякого, кто приложение ни разу не собирал.
// Приставка `all:` заведена ровно ради неё.
func TestMarkerIsEmbedded(t *testing.T) {
	if _, err := fs.Stat(embedded, "embed/.gitkeep"); err != nil {
		t.Fatalf("метка пустого каталога не вшита: %v", err)
	}
}
