package staffing import ( "testing" "github.com/shopspring/decimal" "github.com/missionworkforce/missionmatch/internal/modules/matching/engine" ) func sc(total string, provenance string, completeness string) ScoredCandidate { return ScoredCandidate{ Total: dec(total), Band: engine.BandGreen, Provenance: provenance, Completeness: dec(completeness), } } func TestConfidenceBounds(t *testing.T) { cfg := DefaultConfig() hi := Confidence(cfg, sc("100", "continuous_vetting", "1")) if !hi.Equal(decimal.NewFromInt(1)) { t.Fatalf("max inputs must give confidence 1, got %s", hi) } lo := Confidence(cfg, sc("0", "self_reported", "0")) if lo.LessThan(decimal.Zero) || lo.GreaterThan(decimal.NewFromInt(1)) { t.Fatalf("confidence must be in [0,1], got %s", lo) } // 0.6*0 + 0.25*0.4 + 0.15*0 = 0.1 if !lo.Equal(dec("0.1")) { t.Fatalf("floor confidence = %s, want 0.1", lo) } } func TestConfidenceMonotonicInProvenance(t *testing.T) { cfg := DefaultConfig() weak := Confidence(cfg, sc("80", "self_reported", "0.5")) strong := Confidence(cfg, sc("80", "sponsor_verified", "0.5")) if !strong.GreaterThan(weak) { t.Fatalf("stronger provenance must raise confidence: self_reported=%s sponsor_verified=%s", weak, strong) } } func TestConfidenceMonotonicInFit(t *testing.T) { cfg := DefaultConfig() low := Confidence(cfg, sc("60", "document", "0.5")) high := Confidence(cfg, sc("95", "document", "0.5")) if !high.GreaterThan(low) { t.Fatalf("higher engine total must raise confidence: 60=%s 95=%s", low, high) } } func TestConfidenceUnknownProvenanceIsConservative(t *testing.T) { cfg := DefaultConfig() unknown := Confidence(cfg, sc("80", "", "0.5")) doc := Confidence(cfg, sc("80", "document", "0.5")) if !unknown.LessThan(doc) { t.Fatalf("an unknown provenance must score below an established one: unknown=%s document=%s", unknown, doc) } }