93 lines
2.4 KiB
Go
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)
|
|
}
|
|
}
|