package duckduckgo import ( "testing" ) func TestConfig_ToSearchURL_Default(t *testing.T) { c := Config{SafeSearch: SafeSearchOff} u := c.ToSearchURL("test query") if u.Host != "duckduckgo.com" { t.Errorf("Host = %q, want %q", u.Host, "duckduckgo.com") } if u.Query().Get("q") != "test query" { t.Errorf("q = %q, want %q", u.Query().Get("q"), "test query") } if u.Query().Get("kp") != "-2" { t.Errorf("kp = %q, want %q", u.Query().Get("kp"), "-2") } } func TestConfig_ToSearchURL_SafeSearchOn(t *testing.T) { c := Config{SafeSearch: SafeSearchOn} u := c.ToSearchURL("test") if u.Query().Get("kp") != "1" { t.Errorf("kp = %q, want %q", u.Query().Get("kp"), "1") } } func TestConfig_ToSearchURL_SafeSearchModerate(t *testing.T) { c := Config{SafeSearch: SafeSearchModerate} u := c.ToSearchURL("test") if u.Query().Get("kp") != "-1" { t.Errorf("kp = %q, want %q", u.Query().Get("kp"), "-1") } } func TestConfig_ToSearchURL_SafeSearchOff(t *testing.T) { c := Config{SafeSearch: SafeSearchOff} u := c.ToSearchURL("test") if u.Query().Get("kp") != "-2" { t.Errorf("kp = %q, want %q", u.Query().Get("kp"), "-2") } } func TestConfig_ToSearchURL_WithRegion(t *testing.T) { c := Config{SafeSearch: SafeSearchOff, Region: "us-en"} u := c.ToSearchURL("test") if u.Query().Get("kl") != "us-en" { t.Errorf("kl = %q, want %q", u.Query().Get("kl"), "us-en") } } func TestConfig_ToSearchURL_WithQuery(t *testing.T) { c := Config{SafeSearch: SafeSearchOff} u := c.ToSearchURL("golang testing") if u.Query().Get("q") != "golang testing" { t.Errorf("q = %q, want %q", u.Query().Get("q"), "golang testing") } } func TestConfig_Validate_DefaultsSafeSearch(t *testing.T) { c := Config{SafeSearch: 0} c = c.validate() if c.SafeSearch != SafeSearchOff { t.Errorf("validate() SafeSearch = %d, want %d (SafeSearchOff)", c.SafeSearch, SafeSearchOff) } } func TestConfig_ToSearchURL_NoRegion(t *testing.T) { c := Config{SafeSearch: SafeSearchOff} u := c.ToSearchURL("test") if u.Query().Get("kl") != "" { t.Errorf("kl should be empty when no region, got %q", u.Query().Get("kl")) } } func TestConfig_ToSearchURL_Scheme(t *testing.T) { c := Config{SafeSearch: SafeSearchOff} u := c.ToSearchURL("test") if u.Scheme != "https" { t.Errorf("Scheme = %q, want %q", u.Scheme, "https") } } func TestConfig_ToSearchURL_SpecialChars(t *testing.T) { c := Config{SafeSearch: SafeSearchOff} u := c.ToSearchURL("go lang & testing") if u.Query().Get("q") != "go lang & testing" { t.Errorf("q = %q, want %q", u.Query().Get("q"), "go lang & testing") } } func TestResult_ZeroValue(t *testing.T) { var r Result if r.URL != "" || r.Title != "" || r.Description != "" { t.Error("zero-value Result should have empty fields") } } func TestDefaultConfig_SafeSearch(t *testing.T) { if DefaultConfig.SafeSearch != SafeSearchOff { t.Errorf("DefaultConfig.SafeSearch = %d, want %d", DefaultConfig.SafeSearch, SafeSearchOff) } }