package link import ( "strings" "testing" ) func TestValidateHTTPURL(t *testing.T) { tests := []struct { name string value string wantErr string }{ {name: "http", value: "http://reports.example.com/archive"}, {name: "https", value: "https://reports.example.com/archive"}, {name: "missing host", value: "https:///archive", wantErr: "must include a host"}, {name: "unsupported scheme", value: "ftp://reports.example.com/archive", wantErr: "must use http or https"}, {name: "query string", value: "https://reports.example.com/archive?preview=1", wantErr: "must not include a query string"}, {name: "fragment", value: "https://reports.example.com/archive#top", wantErr: "must not include a fragment"}, {name: "parse failure", value: "http://[::1", wantErr: "must be a valid URL"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { err := ValidateHTTPURL(tt.value) if tt.wantErr == "" { if err != nil { t.Fatalf("ValidateHTTPURL() error = %v", err) } return } if err == nil { t.Fatal("ValidateHTTPURL() error = nil, want error") } if !strings.Contains(err.Error(), tt.wantErr) { t.Fatalf("ValidateHTTPURL() error = %q, want %q", err, tt.wantErr) } }) } }