Files
radio-go/internal/infra/m3u_test.go
T
2026-09-30 21:59:32 +02:00

36 lines
969 B
Go

package infra
import (
"strings"
"testing"
"radio-go/internal/domain"
)
func TestWriteM3U(t *testing.T) {
pl := []domain.Track{
{ID: "a", Title: "Alpha", Duration: 123.7},
{ID: "b", Title: "", Style: "beta style", Duration: 45},
}
got := WriteM3U("My Station", pl)
want := "#EXTM3U\n" +
"#EXTINF:123,My Station - Alpha\na.mp3\n" +
"#EXTINF:45,My Station - beta style\nb.mp3\n"
if got != want {
t.Fatalf("m3u mismatch:\n got:\n%s\nwant:\n%s", got, want)
}
}
func TestM3ULineSafe(t *testing.T) {
pl := []domain.Track{{ID: "x", Title: "evil\n#EXTINF:99,hack", Duration: 1}}
got := WriteM3U("st", pl)
lines := strings.Split(strings.TrimSpace(got), "\n")
// header + 1 extinf + 1 file = 3 lines; the injected newline must be neutralized
if len(lines) != 3 {
t.Fatalf("newline injection not sanitized: %q", got)
}
if strings.Contains(lines[1], "\n") || strings.Count(got, "#EXTINF") != 1 {
t.Fatalf("injected EXTINF survived: %q", got)
}
}