package classifier import "testing" func TestGating_Stage1_DefinitePost(t *testing.T) { tests := []struct { name string headline string lede string }{ {"head of state", "President signs new climate bill", "The president signed legislation today."}, {"international body", "WHO declares new pandemic phase", "The World Health Organization announced a new phase."}, {"casualties", "12 killed in factory explosion", "Authorities report 12 dead after an explosion."}, {"disaster", "Earthquake strikes northern Japan", "A major earthquake hit the region early Tuesday."}, {"conflict", "Airstrike hits hospital in conflict zone", "An airstrike damaged a hospital."}, {"crisis", "Economic crisis deepens in Argentina", "The ongoing crisis has intensified."}, {"financial scale", "EU approves $50bn climate fund", "The European Union approved funding."}, {"assassination", "Assassination attempt on opposition leader", "An armed assailant attacked the leader."}, {"NATO", "NATO expands eastern flank deployment", "Alliance members agreed to new deployments."}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, reason := RunGating(tt.headline, tt.lede) if result != GatingPost { t.Errorf("expected GatingPost, got %d (reason: %s)", result, reason) } }) } } func TestGating_Stage2_DefiniteDiscard(t *testing.T) { tests := []struct { name string headline string lede string }{ {"local government", "City council approves new parking meters", "The council voted 5-3 in favor."}, {"sports scores", "Lakers defeat Celtics 112-98 in regular season", "Final score 112-98."}, {"celebrity gossip", "Celebrity couple spotted on red carpet at Cannes", "The pair arrived together."}, {"routine earnings", "Regional bank reports Q2 results slightly above estimates", "Quarterly earnings were released."}, {"entertainment", "Pop star announces new album release date", "Fans have been waiting since 2023."}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, reason := RunGating(tt.headline, tt.lede) if result != GatingDiscard { t.Errorf("expected GatingDiscard, got %d (reason: %s)", result, reason) } }) } } func TestGating_Stage3_Ambiguous(t *testing.T) { tests := []struct { name string headline string lede string }{ {"tech product", "Apple unveils new MacBook Pro with M5 chip", "The new laptops feature significant performance gains."}, {"policy nuanced", "Government considers new data privacy framework", "Ministers met to discuss potential changes."}, {"science", "Researchers discover high-temperature superconductor", "A team at MIT published findings in Nature."}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, reason := RunGating(tt.headline, tt.lede) if result != GatingAmbiguous { t.Errorf("expected GatingAmbiguous, got %d (reason: %s)", result, reason) } }) } }