- адреса приложения переехали в своё пространство `/app/`, опрос готовности убран целиком: рубеж и причину остановки владелец узнаёт карточкой записи, текст — отдельным адресом названного вида - заведена единая точка отображения доменной ошибки и слой, приводящий к той же форме отказы библиотеки: тело несёт машиночитаемый код рядом с сообщением - у записи появились имя файла отправителя, длительность и размер своими колонками, а у ленты владельца — свой индекс: без него страница сканировала весь архив сервиса
62 lines
2.1 KiB
Go
62 lines
2.1 KiB
Go
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: "/app/audiorecords/abc123def456ghi",
|
|
want: "/app/audiorecords/abc123def456ghi",
|
|
},
|
|
{
|
|
name: "приём не трогается",
|
|
path: "/app/audiorecords",
|
|
want: "/app/audiorecords",
|
|
},
|
|
{
|
|
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", "идентификатор записи остаётся: по нему прослеживается путь")
|
|
}
|