package main
import (
"io"
"net/http"
"net/http/httptest"
"net/url"
"testing"
)
func TestSyncRejection(t *testing.T) {
server := httptest.NewServer(endpoint{"my.site/part"})
defer server.Close()
tests := []struct {
name string
source string
target string
expect string
}{
{"invalid source", "https||:example.org/somewhere", "my.site/part/target", errSrcInvalid},
{"empty source", "http://", "https://my.site/part/target", errSrcInvalid},
{"target no accepted", "https://example.org/somewhere", "wrong.site/tgt", errTgtNotAccepted},
{"wrong source scheme", "ftp://example.org/somewhere", "http://my.site/part/tgt", errInvalidScheme},
{"wrong target scheme", "http://example.org/somewhere", "ssh://my.site/part/tgt", errInvalidScheme},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
client := http.DefaultClient
r, err := client.PostForm(server.URL, url.Values{
"source": []string{tc.source},
"target": []string{tc.target},
})
if err != nil {
t.Fatal(err)
}
if r.StatusCode != 400 {
t.Fatalf("want 400, got %v", r.Status)
}
bb, _ := io.ReadAll(r.Body)
if string(bb) != tc.expect {
t.Fatalf("want %s, got %s", tc.expect, string(bb))
}
})
}
}