1package component
2
3import "testing"
4
5func TestNormalizeGhostSuggestion_PrefersHostOnlyForRedirectURL(t *testing.T) {
6 full, suffix := normalizeGhostSuggestion(
7 "google",
8 "google.com/url?q=https://dashboard.stripe.com/auth_challenge/email_link/abc",
9 ".com/url?q=https://dashboard.stripe.com/auth_challenge/email_link/abc",
10 )
11 if full != "google.com" {
12 t.Fatalf("expected host-only completion, got %q", full)
13 }
14 if suffix != ".com" {
15 t.Fatalf("expected .com suffix, got %q", suffix)
16 }
17}
18
19func TestNormalizeGhostSuggestion_KeepsFallbackWhenInputLooksLikePath(t *testing.T) {
20 fallback := "/url?q=https://x"
21 full, suffix := normalizeGhostSuggestion("google.com/u", "google.com/url?q=https://x", fallback)
22 if full != "google.com/url?q=https://x" {
23 t.Fatalf("expected full URL fallback, got %q", full)
24 }
25 if suffix != fallback {
26 t.Fatalf("expected fallback suffix, got %q", suffix)
27 }
28}
29
30func TestExtractHostForCompletion(t *testing.T) {
31 got := extractHostForCompletion("https://WWW.Google.com/url?q=abc")
32 if got != "www.google.com" {
33 t.Fatalf("expected normalized host, got %q", got)
34 }
35}
36
37func TestGhostCompletionInput(t *testing.T) {
38 tests := []struct {
39 name string
40 entryText string
41 wantPrefix string
42 wantTrimmed string
43 wantOK bool
44 }{
45 {name: "no leading whitespace", entryText: "goo", wantPrefix: "", wantTrimmed: "goo", wantOK: true},
46 {name: "leading space", entryText: " goo", wantPrefix: " ", wantTrimmed: "goo", wantOK: true},
47 {name: "leading tab", entryText: "\tgoo", wantPrefix: "\t", wantTrimmed: "goo", wantOK: true},
48 {name: "only whitespace", entryText: " \t", wantPrefix: " \t", wantTrimmed: "", wantOK: false},
49 }
50
51 for _, tt := range tests {
52 t.Run(tt.name, func(t *testing.T) {
53 gotPrefix, gotTrimmed, gotOK := ghostCompletionInput(tt.entryText)
54 if gotPrefix != tt.wantPrefix {
55 t.Fatalf("ghostCompletionInput(%q) prefix = %q, want %q", tt.entryText, gotPrefix, tt.wantPrefix)
56 }
57 if gotTrimmed != tt.wantTrimmed {
58 t.Fatalf("ghostCompletionInput(%q) trimmed = %q, want %q", tt.entryText, gotTrimmed, tt.wantTrimmed)
59 }
60 if gotOK != tt.wantOK {
61 t.Fatalf("ghostCompletionInput(%q) ok = %v, want %v", tt.entryText, gotOK, tt.wantOK)
62 }
63 })
64 }
65}