1
1
Files
audio-catalyst/internal/domain/services/audiobook_service_test.go
Dmitriy Fofanov 72a66f1664 Добавить тесты репозитория файловой системы и реализовать функциональность журналирования файлов.
- Реализовать тесты для поиска MP3-файлов и переименования/организации папок книг в репозитории файловой системы.
- Создать FileLogger для записи сообщений в файл с поддержкой различных уровней журналирования и управления размером файлов.
- Разработать репозиторий RuTracker для обработки поиска торрентов, получения метаданных и загрузки торрент-файлов.
- Добавить тесты для нормализации URL в репозиторий RuTracker.
- Реализовать адаптер логгера TUI для отображения логов в терминальном интерфейсе и, при необходимости, для записи логов в базовый логгер.
- Создать менеджер TUI для управления пользовательским интерфейсом приложения, включая главное меню, экран обработки, настройки и отображение результатов.
2025-09-29 20:40:05 +03:00

67 lines
2.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package services
import (
"os"
"path/filepath"
"testing"
)
func TestCreateChaptersAndDurations(t *testing.T) {
dir := t.TempDir()
files := []string{"02.mp3", "01.mp3"}
var paths []string
// создаём разные размеры для разной длительности
for i, f := range files {
p := filepath.Join(dir, f)
data := make([]byte, (i+1)*1024*1024) // 1MB, 2MB
if err := os.WriteFile(p, data, 0644); err != nil {
t.Fatalf("write: %v", err)
}
paths = append(paths, p)
}
svc := NewAudioBookService()
chapters := svc.CreateChapters(paths)
if len(chapters) != 2 {
t.Fatalf("ожидалось 2 главы, получено %d", len(chapters))
}
// порядок по имени: 01.mp3, 02.mp3
if chapters[0].Title != "01" || chapters[1].Title != "02" {
t.Errorf("неверные названия глав: %+v", chapters)
}
if !(chapters[0].Duration > 40 && chapters[1].Duration > chapters[0].Duration) {
t.Errorf("неверные длительности: %+v", chapters)
}
if !(chapters[0].Start == 0 && chapters[0].End < chapters[1].Start) {
t.Errorf("неверные интервалы: %+v", chapters)
}
}
func TestExtractChapterTitlePatterns(t *testing.T) {
svc := NewAudioBookService()
cases := map[string]string{
"01 - Введение": "01 - Введение",
"001_Первая_глава": "001 - Первая_глава",
"Chapter 05 - Название": "05 - Название",
"Глава 3 - Важная информация": "3 - Важная информация",
"Часть 10": "10",
"простоеазвание": "простоеазвание",
"15": "15",
}
for in, exp := range cases {
got := svc.extractChapterTitle(in)
if got != exp {
t.Errorf("%q => %q, ожидалось %q", in, got, exp)
}
}
}
func TestCleanTitle(t *testing.T) {
svc := NewAudioBookService()
in := "Автор - Книга [MP3, 96 kbps] (2025)"
got := svc.CleanTitle(in)
if got != "Автор - Книга" {
t.Errorf("получено %q", got)
}
}