Files
unified-media-manager/internal/service/safety_test.go
2026-04-24 10:45:19 -07:00

93 lines
2.4 KiB
Go

package service
import "testing"
func TestSafetyCheck_Safe(t *testing.T) {
svc := NewSafetyService()
tests := []struct {
name string
title string
url string
}{
{"mkv file", "Movie.2024.1080p.BluRay.mkv", ""},
{"mp4 file", "Show.S01E01.720p.WEB.mp4", "http://example.com/Show.S01E01.720p.WEB.mp4"},
{"no extension", "Some-Release-Group", ""},
{"nzb file", "Movie.2024.1080p.nzb", "http://indexer.example.com/api?t=get&id=123"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := svc.Check(tt.title, tt.url)
if result != nil {
t.Errorf("expected nil (safe), got blocked: %s", result.Reason)
}
})
}
}
func TestSafetyCheck_DangerousTitle(t *testing.T) {
svc := NewSafetyService()
tests := []struct {
name string
title string
wantExt string
}{
{"exe in title", "Malware.2024.exe", ".exe"},
{"bat in title", "Suspicious.Release.bat", ".bat"},
{"scr in title", "Screensaver.scr", ".scr"},
{"cmd in title", "Malware.Release.cmd", ".cmd"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := svc.Check(tt.title, "")
if result == nil {
t.Fatal("expected block, got nil")
}
if !result.Blocked {
t.Error("expected Blocked=true")
}
if result.MatchedExtension != tt.wantExt {
t.Errorf("expected extension %s, got %s", tt.wantExt, result.MatchedExtension)
}
})
}
}
func TestSafetyCheck_DangerousURL(t *testing.T) {
svc := NewSafetyService()
result := svc.Check("normal-release", "http://example.com/file.bat")
if result == nil {
t.Fatal("expected block from URL extension, got nil")
}
if !result.Blocked {
t.Error("expected Blocked=true")
}
if result.MatchedExtension != ".bat" {
t.Errorf("expected .bat, got %s", result.MatchedExtension)
}
}
func TestSafetyCheck_BothSafe(t *testing.T) {
svc := NewSafetyService()
result := svc.Check("Movie.2024.1080p.mkv", "http://example.com/Movie.2024.1080p.mkv")
if result != nil {
t.Errorf("expected nil (both safe), got blocked: %s", result.Reason)
}
}
func TestSafetyCheck_ExtensionInMiddle(t *testing.T) {
svc := NewSafetyService()
// filepath.Ext returns the part after the LAST dot.
// "Movie.EXE-group.1080p.mkv" has .mkv as extension — should NOT be blocked
result := svc.Check("Movie.EXE-group.1080p.mkv", "")
if result != nil {
t.Errorf("expected nil (safe .mkv extension), got blocked: %s", result.Reason)
}
}