/
codespawn
/
tgstream
Обзор
Документация
Войти
/
codespawn
/
tgstream
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
16
CI/CD
Аналитика
Безопасность
master
internal/adapter/httpserver/name_test.go
59 строк
2 KB
codespawn
Запрос на слияние 'feat/websource-edge-docs' (
#3
) из feat/websource-edge-docs в master
16 июл 2026, 07:24
Верифицирован
16 июл 2026, 07:24
fb8bdd6
Код
Авторство
О чём код?
package httpserver import ( "strings" "testing" ) func TestNormalizeName(t *testing.T) { // normalizeName теперь только trimit — больше не режет '@' и не lowercase'ит // (это портило mixed-case id произвольных источников). cases := []struct { name, in, want string }{ {"spaces", " hacker-news ", "hacker-news"}, {"mixed_case_preserved", "MyBlog", "MyBlog"}, {"at_preserved", "@durov", "@durov"}, // '@' больше не вырезается {"already_canonical", "hacker-news", "hacker-news"}, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { if got := normalizeName(c.in); got != c.want { t.Errorf("normalizeName(%q) = %q, want %q", c.in, got, c.want) } }) } } func TestValidateName(t *testing.T) { valid := []string{ "durov", // classic "hacker-news", // hyphen "my_blog", // underscore "demo", // short (длина 1+ теперь валидна) "a", // min boundary (1 символ) "MixedCase", // mixed-case strings.Repeat("a", 64), // max boundary } for _, n := range valid { if err := validateName(n); err != nil { t.Errorf("validateName(%q): want nil, got %v", n, err) } } invalid := []string{ "", // empty strings.Repeat("a", 65), // too long (65) "Дуров", // cyrillic "du.rov", // dot "du rov", // space "du/rov", // slash (path-traversal protection) "@durov", // '@' больше не в разрешённом наборе "sub:variant", // colon } for _, n := range invalid { if err := validateName(n); err == nil { t.Errorf("validateName(%q): want error, got nil", n) } } }