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 := `
AI Overview
Google AI summary text.
Source

Organic result

Snippet
` results, err := ParseHTML(bytes.NewReader([]byte(html))) if err != nil { t.Fatalf("ParseHTML() error = %v", err) } assertFeatureType(t, results, core.ResultTypeAISummary) assertFeatureType(t, results, core.ResultTypePeopleAlsoAsk) } func TestParseHTMLOrganicOnlyHasNoSerpFeatures(t *testing.T) { t.Parallel() html := `

Organic result

Snippet
` results, err := ParseHTML(bytes.NewReader([]byte(html))) if err != nil { t.Fatalf("ParseHTML() error = %v", err) } assertNoFeatures(t, results) } func assertFeatureType(t *testing.T, results []core.SearchResult, want core.ResultType) { t.Helper() for _, result := range results { for _, feature := range result.Features { if feature.Type == want { return } } } t.Fatalf("expected feature type %q in %#v", want, results) } func assertNoFeatures(t *testing.T, results []core.SearchResult) { t.Helper() for _, result := range results { if len(result.Features) > 0 { t.Fatalf("expected no features, got %#v", result.Features) } } }