484 lines
14 KiB
Go
484 lines
14 KiB
Go
package manga_providers
|
|
|
|
import (
|
|
"fmt"
|
|
"slices"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestScanChapterFilename(t *testing.T) {
|
|
tests := []struct {
|
|
filename string
|
|
expectedChapter []string
|
|
expectedMangaTitle string
|
|
expectedChapterTitle string
|
|
expectedVolume []string
|
|
}{
|
|
{
|
|
filename: "1.cbz",
|
|
expectedChapter: []string{"1"},
|
|
expectedMangaTitle: "",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "2.5.pdf",
|
|
expectedChapter: []string{"2.5"},
|
|
expectedMangaTitle: "",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Chapter 5.5.pdf",
|
|
expectedChapter: []string{"5.5"},
|
|
expectedMangaTitle: "",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "ch 1.cbz",
|
|
expectedChapter: []string{"1"},
|
|
expectedMangaTitle: "",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "ch 1.5-2.cbz",
|
|
expectedChapter: []string{"1.5", "2"},
|
|
expectedMangaTitle: "",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Some title Chapter 1.cbz",
|
|
expectedChapter: []string{"1"},
|
|
expectedMangaTitle: "Some title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Chapter 23 The Fanatics.pdf",
|
|
expectedChapter: []string{"23"},
|
|
expectedMangaTitle: "The Fanatics",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "chapter_1.cbz",
|
|
expectedChapter: []string{"1"},
|
|
expectedMangaTitle: "",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "1 - Some title.cbz",
|
|
expectedChapter: []string{"1"},
|
|
expectedMangaTitle: "",
|
|
expectedChapterTitle: "Some title",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "30 - Some title.cbz",
|
|
expectedChapter: []string{"30"},
|
|
expectedMangaTitle: "",
|
|
expectedChapterTitle: "Some title",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "[Group] Manga Title - c001 [123456].cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "[Group] Manga Title - c12.5 [654321].cbz",
|
|
expectedChapter: []string{"12.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "[Group] Manga Title 05 - ch10.cbz",
|
|
expectedChapter: []string{"10"},
|
|
expectedMangaTitle: "Manga Title 05",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "[Group] Manga Title - ch10.cbz",
|
|
expectedChapter: []string{"10"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "[Group] Manga Title - ch_11.cbz",
|
|
expectedChapter: []string{"11"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "[Group] Manga Title - ch-12.cbz",
|
|
expectedChapter: []string{"12"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title v01 c001.cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{"01"},
|
|
},
|
|
{
|
|
filename: "Manga Title v01 c001.5.cbz",
|
|
expectedChapter: []string{"001.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{"01"},
|
|
},
|
|
{
|
|
filename: "Manga Title - 003.cbz",
|
|
expectedChapter: []string{"003"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 003.5.cbz",
|
|
expectedChapter: []string{"003.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 3.5 (Digital).cbz",
|
|
expectedChapter: []string{"3.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 10 (Digital) [Group].cbz",
|
|
expectedChapter: []string{"10"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - chp_15.cbz",
|
|
expectedChapter: []string{"15"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - chp-16.cbz",
|
|
expectedChapter: []string{"16"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - chp17.cbz",
|
|
expectedChapter: []string{"17"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - chp 18.cbz",
|
|
expectedChapter: []string{"18"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 001 (v2).cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 001v2.cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{"2"},
|
|
},
|
|
{
|
|
filename: "Manga Title - 001 [v2].cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 001 [Digital] [v2].cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 001-002.cbz",
|
|
expectedChapter: []string{"001", "002"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 001-001.5.cbz",
|
|
expectedChapter: []string{"001", "001.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 1-2.cbz",
|
|
expectedChapter: []string{"1", "2"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 1.5-2.cbz",
|
|
expectedChapter: []string{"1.5", "2"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 1 (Sample).cbz",
|
|
expectedChapter: []string{"1"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 1 (Preview).cbz",
|
|
expectedChapter: []string{"1"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 1 (Special Edition).cbz",
|
|
expectedChapter: []string{"1"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 1 (Digital) (Official).cbz",
|
|
expectedChapter: []string{"1"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 1.cbz",
|
|
expectedChapter: []string{"1"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 1.0.cbz",
|
|
expectedChapter: []string{"1.0"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 01.cbz",
|
|
expectedChapter: []string{"01"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 01.5.cbz",
|
|
expectedChapter: []string{"01.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 001.cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - 001.5.cbz",
|
|
expectedChapter: []string{"001.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - ch001.cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - ch001.5.cbz",
|
|
expectedChapter: []string{"001.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - ch_001.cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - ch_001.5.cbz",
|
|
expectedChapter: []string{"001.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - ch-001.cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - ch-001.5.cbz",
|
|
expectedChapter: []string{"001.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - chp001.cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - chp_001.cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - chp_001.5.cbz",
|
|
expectedChapter: []string{"001.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - chp-001.cbz",
|
|
expectedChapter: []string{"001"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
{
|
|
filename: "Manga Title - chp-001.5.cbz",
|
|
expectedChapter: []string{"001.5"},
|
|
expectedMangaTitle: "Manga Title",
|
|
expectedChapterTitle: "",
|
|
expectedVolume: []string{},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.filename, func(t *testing.T) {
|
|
res, ok := scanChapterFilename(tt.filename)
|
|
if !ok {
|
|
t.Errorf("Failed to scan chapter filename: %s", tt.filename)
|
|
}
|
|
require.Equalf(t, tt.expectedChapter, res.Chapter, "Expected chapter '%v' for '%s' but got '%v'", tt.expectedChapter, tt.filename, res.Chapter)
|
|
require.Equalf(t, tt.expectedMangaTitle, res.MangaTitle, "Expected manga title '%v' for '%s' but got '%v'", tt.expectedMangaTitle, tt.filename, res.MangaTitle)
|
|
require.Equalf(t, tt.expectedChapterTitle, res.ChapterTitle, "Expected chapter title '%v' for '%s' but got '%v'", tt.expectedChapterTitle, tt.filename, res.ChapterTitle)
|
|
require.Equalf(t, tt.expectedVolume, res.Volume, "Expected volume '%v' for '%s' but got '%v'", tt.expectedVolume, tt.filename, res.Volume)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestPageSorting(t *testing.T) {
|
|
tests := []struct {
|
|
expectedOrder []string
|
|
}{
|
|
{
|
|
expectedOrder: []string{"1149-000.jpg", "1149-001.jpg", "1149-002.jpg", "1149-019.jpg", "1149-019b.jpg", "1149-020.jpg"},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(fmt.Sprintf("%v", tt.expectedOrder), func(t *testing.T) {
|
|
newSlice := tt.expectedOrder
|
|
slices.SortFunc(newSlice, func(a, b string) int {
|
|
return strings.Compare(a, b)
|
|
})
|
|
for i, filename := range tt.expectedOrder {
|
|
require.Equalf(t, filename, newSlice[i], "Expected order '%v' for '%s' but got '%v'", tt.expectedOrder, tt.expectedOrder[i], filename)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParsePageFilename(t *testing.T) {
|
|
tests := []struct {
|
|
filename string
|
|
expected float64
|
|
}{
|
|
{
|
|
filename: "1.jpg",
|
|
expected: 1,
|
|
},
|
|
{
|
|
filename: "1.5.jpg",
|
|
expected: 1.5,
|
|
},
|
|
{
|
|
filename: "Page 001.jpg",
|
|
expected: 1,
|
|
},
|
|
{
|
|
filename: "1.55.jpg",
|
|
expected: 1.55,
|
|
},
|
|
{
|
|
filename: "2.5 -.jpg",
|
|
expected: 2.5,
|
|
},
|
|
{
|
|
filename: "page_27.jpg",
|
|
expected: 27,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.filename, func(t *testing.T) {
|
|
res, ok := parsePageFilename(tt.filename)
|
|
if !ok {
|
|
t.Errorf("Failed to parse page filename: %s", tt.filename)
|
|
}
|
|
require.Equalf(t, tt.expected, res.Number, "Expected number '%v' for '%s' but got '%v'", tt.expected, tt.filename, res.Number)
|
|
})
|
|
}
|
|
}
|