show-ingestion/main_test.go

111 lines
2.9 KiB
Go

package main_test
import (
"context"
"io/ioutil"
"os"
"path"
"slices"
"testing"
main "gitea/show-ingestion"
)
func TestRun(t *testing.T) {
cases := map[string]struct {
given []string
patterns []string
overrides map[string]string
want []string
}{
"empty": {},
"fallback survivor": {
given: []string{
"Survivor.AU.S12E11.1080p.HEVC.x265-MeGusta[EZTVx.to].mkv",
"Survivor.AU.S12E11.720p.HEVC.x265-MeGusta[EZTVx.to].mkv",
"Survivor.AU.S12E12.720p.HEVC.x265-MeGusta[EZTVx.to].mkv",
},
patterns: []string{
".urvivor.[Aa][Uu].*[sS](?P<season>[0-9]+)[eE](?P<episode>[0-9]*).*1080.*MeGusta",
".urvivor.[Aa][Uu].*[sS](?P<season>[0-9]+)[eE](?P<episode>[0-9]*).*720.*MeGusta",
},
overrides: map[string]string{
"title": "Australian_Survivor",
},
want: []string{
"Australian_Survivor_S12E11.mkv",
"Australian_Survivor_S12E12.mkv",
},
},
"easy w group": {
given: []string{
"[SubsPlease] Tokidoki Bosotto Russia-go de Dereru Tonari no Alya-san - 01 (720p) [A12844D5].mkv",
"[SubsPlease] Tokidoki Bosotto Russia-go de Dereru Tonari no Alya-san - 02 (720p) [2608F490].mkv",
},
want: []string{
"Tokidoki_Bosotto_Russia-go_de_Dereru_Tonari_no_Alya-san_S01E01.mkv",
"Tokidoki_Bosotto_Russia-go_de_Dereru_Tonari_no_Alya-san_S01E02.mkv",
},
},
}
for name, d := range cases {
c := d
t.Run(name, func(t *testing.T) {
ind := t.TempDir()
for _, f := range c.given {
ioutil.WriteFile(path.Join(ind, f), []byte{}, os.ModePerm)
}
outd := t.TempDir()
if err := main.Run(context.Background(), outd, ind, c.patterns, c.overrides); err != nil {
t.Fatal(err)
}
for _, f := range c.want {
if stat, err := os.Stat(path.Join(outd, f)); os.IsNotExist(err) {
t.Errorf("expected %s", f)
} else if !stat.Mode().IsRegular() {
t.Errorf("%s not a regular file: %v", f, stat.Mode())
}
}
if entries, err := os.ReadDir(outd); err != nil {
t.Error("failed to list outdir: %w", err)
} else {
for _, entry := range entries {
if !slices.Contains(c.want, path.Base(entry.Name())) {
t.Errorf("unexpected %s", entry.Name())
}
if stat, err := entry.Info(); err != nil {
t.Errorf("cant read info of %s: %v", entry.Name(), err)
} else if !stat.Mode().IsRegular() {
t.Errorf("non-regular file %s in out: %v", entry.Name(), stat.Mode())
}
}
}
if entries, err := os.ReadDir(outd); err != nil {
t.Error("failed to list outdir: %w", err)
} else {
for _, entry := range entries {
if !slices.Contains(c.want, path.Base(entry.Name())) {
t.Errorf("unexpected %s", entry.Name())
}
}
}
if entries, err := os.ReadDir(ind); err != nil {
t.Error("failed to list indir: %w", err)
} else {
for _, entry := range entries {
inf := path.Join(ind, entry.Name())
if _, err := os.Stat(inf); err != nil {
t.Errorf("%s no longer in ind: %v", inf, err)
}
}
}
})
}
}