Добавил поиск метаданных по каталогам
This commit is contained in:
@@ -56,7 +56,7 @@ func TestRecognize_Movie(t *testing.T) {
|
||||
{"src":"The.Matrix.1999/sample.mkv","role":"sample","season":null,"episode":null}
|
||||
]}`
|
||||
f := &fakeLLM{responses: []string{resp}}
|
||||
r := New(f, Config{MaxRetries: 2}, testLogger())
|
||||
r := New(f, nil, Config{MaxRetries: 2}, testLogger())
|
||||
|
||||
res, err := r.Recognize(context.Background(), in)
|
||||
if err != nil {
|
||||
@@ -74,9 +74,10 @@ func TestRecognize_Movie(t *testing.T) {
|
||||
if len(res.Decision.Reasons) == 0 {
|
||||
t.Error("expected at least the no-DB-match reason")
|
||||
}
|
||||
// Чистая структура: единственная причина — отсутствие матча в базе.
|
||||
if len(res.Decision.Reasons) != 1 {
|
||||
t.Errorf("unexpected extra warnings: %v", res.Decision.Reasons)
|
||||
// Чистая структура + уверенность 0.9 ≥ порога: единственная причина —
|
||||
// отсутствие матча в базе.
|
||||
if len(res.Decision.Reasons) != 1 || !hasReason(res.Decision.Reasons, "метабазы отключены") {
|
||||
t.Errorf("unexpected reasons: %v", res.Decision.Reasons)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +97,7 @@ func TestRecognize_Series(t *testing.T) {
|
||||
{"src":"Avatar/03.mkv","role":"episode","season":2,"episode":3}
|
||||
]}`
|
||||
f := &fakeLLM{responses: []string{resp}}
|
||||
r := New(f, Config{}, testLogger())
|
||||
r := New(f, nil, Config{}, testLogger())
|
||||
|
||||
res, err := r.Recognize(context.Background(), in)
|
||||
if err != nil {
|
||||
@@ -105,9 +106,22 @@ func TestRecognize_Series(t *testing.T) {
|
||||
if res.Plan.Type != MediaSeries || len(res.Plan.Files) != 3 {
|
||||
t.Errorf("plan = %+v", res.Plan)
|
||||
}
|
||||
if len(res.Decision.Reasons) != 1 {
|
||||
t.Errorf("clean series should warn only about DB match, got: %v", res.Decision.Reasons)
|
||||
// Метабазы выключены → авто нет; причина про базу обязательна.
|
||||
if res.Decision.Auto {
|
||||
t.Error("auto must be false without metadata providers")
|
||||
}
|
||||
if !hasReason(res.Decision.Reasons, "метабазы отключены") {
|
||||
t.Errorf("expected metadata-off reason, got: %v", res.Decision.Reasons)
|
||||
}
|
||||
}
|
||||
|
||||
func hasReason(reasons []string, substr string) bool {
|
||||
for _, r := range reasons {
|
||||
if strings.Contains(r, substr) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func TestRecognize_RetriesOnBadSrcThenSucceeds(t *testing.T) {
|
||||
@@ -120,7 +134,7 @@ func TestRecognize_RetriesOnBadSrcThenSucceeds(t *testing.T) {
|
||||
good := `{"type":"movie","title":"Some Movie","year":2020,"files":[
|
||||
{"src":"movie/film.mkv","role":"main"}]}`
|
||||
f := &fakeLLM{responses: []string{bad, good}}
|
||||
r := New(f, Config{MaxRetries: 2}, testLogger())
|
||||
r := New(f, nil, Config{MaxRetries: 2}, testLogger())
|
||||
|
||||
res, err := r.Recognize(context.Background(), in)
|
||||
if err != nil {
|
||||
@@ -143,7 +157,7 @@ func TestRecognize_ExhaustedRetriesGoesToReview(t *testing.T) {
|
||||
in := Input{Name: "x", Files: []File{{Path: "a.mkv", Size: 1}}}
|
||||
bad := `not a json at all`
|
||||
f := &fakeLLM{responses: []string{bad}}
|
||||
r := New(f, Config{MaxRetries: 2}, testLogger())
|
||||
r := New(f, nil, Config{MaxRetries: 2}, testLogger())
|
||||
|
||||
res, err := r.Recognize(context.Background(), in)
|
||||
if err != nil {
|
||||
@@ -167,7 +181,7 @@ func TestRecognize_TransportErrorPropagates(t *testing.T) {
|
||||
in := Input{Name: "x", Files: []File{{Path: "a.mkv", Size: 1}}}
|
||||
wantErr := errors.New("connection refused")
|
||||
f := &fakeLLM{errs: []error{wantErr}}
|
||||
r := New(f, Config{MaxRetries: 2}, testLogger())
|
||||
r := New(f, nil, Config{MaxRetries: 2}, testLogger())
|
||||
|
||||
_, err := r.Recognize(context.Background(), in)
|
||||
if err == nil || !errors.Is(err, wantErr) {
|
||||
@@ -188,7 +202,7 @@ func TestRecognize_PromptCarriesSignals(t *testing.T) {
|
||||
resp := `{"type":"series","title":"Some Show","files":[
|
||||
{"src":"ep1.mkv","role":"episode","season":1,"episode":1}]}`
|
||||
f := &fakeLLM{responses: []string{resp}}
|
||||
r := New(f, Config{}, testLogger())
|
||||
r := New(f, nil, Config{}, testLogger())
|
||||
if _, err := r.Recognize(context.Background(), in); err != nil {
|
||||
t.Fatalf("Recognize: %v", err)
|
||||
}
|
||||
@@ -219,7 +233,7 @@ func TestRecognize_FileListTruncated(t *testing.T) {
|
||||
resp := `{"type":"series","title":"Big","files":[{"src":"` + pathOf(0) +
|
||||
`","role":"episode","season":1,"episode":1}]}`
|
||||
f := &fakeLLM{responses: []string{resp}}
|
||||
r := New(f, Config{MaxFiles: 100}, testLogger())
|
||||
r := New(f, nil, Config{MaxFiles: 100}, testLogger())
|
||||
if _, err := r.Recognize(context.Background(), in); err != nil {
|
||||
t.Fatalf("Recognize: %v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user