package regionalexecutor

import "testing"

func TestBuildURL(t *testing.T) {
	tests := []struct {
		name        string
		executorURL string
		endpoint    string
		want        string
		wantErr     bool
	}{
		{
			name:        "adds regional prefix when base url has no path",
			executorURL: "https://executor.example.com",
			endpoint:    "/api/v1/metrics-key/create",
			want:        "https://executor.example.com/metrics-integration-regional/api/v1/metrics-key/create",
		},
		{
			name:        "does not duplicate regional prefix",
			executorURL: "https://executor.example.com/metrics-integration-regional",
			endpoint:    "/api/v1/metrics-key/create",
			want:        "https://executor.example.com/metrics-integration-regional/api/v1/metrics-key/create",
		},
		{
			name:        "handles trailing slash on base url",
			executorURL: "https://executor.example.com/metrics-integration-regional/",
			endpoint:    "/api/v1/apply",
			want:        "https://executor.example.com/metrics-integration-regional/api/v1/apply",
		},
		{
			name:        "rejects empty url",
			executorURL: " ",
			endpoint:    "/api/v1/apply",
			wantErr:     true,
		},
		{
			name:        "rejects unsupported scheme",
			executorURL: "ftp://executor.example.com",
			endpoint:    "/api/v1/apply",
			wantErr:     true,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got, err := BuildURL(tt.executorURL, tt.endpoint)
			if (err != nil) != tt.wantErr {
				t.Fatalf("BuildURL() error = %v, wantErr %v", err, tt.wantErr)
			}
			if err != nil {
				return
			}
			if got != tt.want {
				t.Fatalf("BuildURL() got %q, want %q", got, tt.want)
			}
		})
	}
}
