package main import ( "testing" "github.com/stretchr/testify/assert" ) // Имя файла в хранилище в журнал не идёт: оно последняя часть ссылки // `/api/files/...`, и строка журнала вместе с идентификатором записи собрала бы // ссылку целиком. Инвариант проекта, critical. func TestJournalRouteHidesStoredFileName(t *testing.T) { cases := []struct { name string path string want string }{ { name: "ссылка на файл теряет имя", path: "/api/files/files/abc123def456ghi/9f1c-3b2a.mp3", want: "/api/files/files/abc123def456ghi/<имя>", }, { name: "маршрут остаётся различимым", path: "/api/files/files/abc123def456ghi/запись.ogg", want: "/api/files/files/abc123def456ghi/<имя>", }, { name: "прочие пути не трогаются", path: "/api/status/abc123def456ghi", want: "/api/status/abc123def456ghi", }, { name: "приём не трогается", path: "/api/audio", want: "/api/audio", }, { name: "сам префикс без имени не портится", path: "/api/files/", want: "/api/files/", }, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { assert.Equal(t, c.want, journalRoute(c.path)) }) } } // Отдельно и прямо: имени в готовой строке нет. Проверка судит результат, а не // устройство — переписанная реализация обязана остаться зелёной. func TestJournalRouteDropsNameEntirely(t *testing.T) { const stored = "0f7b8dd3-d1cc-424c.mp3" route := journalRoute("/api/files/files/rec0000000000000/" + stored) assert.NotContains(t, route, stored, "имя файла в хранилище не доезжает до журнала") assert.Contains(t, route, "rec0000000000000", "идентификатор записи остаётся: по нему прослеживается путь") }