package google import ( "bytes" "os" "strings" "testing" "github.com/karust/openserp/core" ) // TestParseHTMLFixtureExtractsRealFeatures guards the live AI Overview fixture. func TestParseHTMLFixtureExtractsRealFeatures(t *testing.T) { t.Parallel() f, err := os.Open("testdata/search_results.html") if err != nil { t.Fatalf("open fixture: %v", err) } defer f.Close() results, err := ParseHTML(f) if err != nil { t.Fatalf("ParseHTML() error = %v", err) } var summaries int for _, r := range results { for _, ft := range r.Features { if ft.Type != core.ResultTypeAISummary { continue } summaries++ if len(ft.Text) < 200 { t.Fatalf("ai_summary text looks truncated (%d chars): %q", len(ft.Text), ft.Text) } if strings.Contains(strings.ToLower(ft.Text), "недоступен") { t.Fatalf("ai_summary captured the 'not available' placeholder: %q", ft.Text) } if strings.Contains(ft.Text, "@keyframes") || strings.Contains(ft.Text, "} .") { t.Fatalf("ai_summary text contains CSS, not prose: %q", ft.Text) } if len(ft.Links) == 0 { t.Fatal("expected ai_summary to carry cited source links") } } } if summaries != 1 { t.Fatalf("expected exactly 1 ai_summary feature, got %d", summaries) } } func TestParseHTMLExtractsSerpFeatures(t *testing.T) { t.Parallel() html := `