40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|