package parser import ( "testing" "git.mchus.pro/mchus/logpile/internal/models" ) type stubParser struct { name string vendor string confidence int priority int hasPrio bool } func (s stubParser) Name() string { return s.name } func (s stubParser) Vendor() string { return s.vendor } func (s stubParser) Version() string { return "1.0" } func (s stubParser) Detect([]ExtractedFile) int { return s.confidence } func (s stubParser) Parse([]ExtractedFile) (*models.AnalysisResult, error) { return &models.AnalysisResult{}, nil } type stubPrioParser struct{ stubParser } func (s stubPrioParser) DetectPriority() int { return s.priority } func TestDetectFormat_PriorityBreaksConfidenceTie(t *testing.T) { broad := stubParser{name: "broad", vendor: "test_broad", confidence: 100} specific := stubPrioParser{stubParser{name: "specific", vendor: "test_specific", confidence: 100}} specific.priority = 10 saved := registry registry = map[string]VendorParser{"a": broad, "b": specific} defer func() { registry = saved }() got, err := DetectFormat(nil) if err != nil { t.Fatal(err) } if got.Name() != "specific" { t.Fatalf("chosen %q, want the higher-priority parser on a confidence tie", got.Name()) } } func TestDetectFormat_HigherConfidenceStillWinsOverPriority(t *testing.T) { broad := stubParser{name: "broad", vendor: "test_broad", confidence: 100} specific := stubPrioParser{stubParser{name: "specific", vendor: "test_specific", confidence: 40}} specific.priority = 10 saved := registry registry = map[string]VendorParser{"a": broad, "b": specific} defer func() { registry = saved }() got, _ := DetectFormat(nil) if got.Name() != "broad" { t.Fatalf("chosen %q, want higher-confidence parser", got.Name()) } }