package dreamhost

import (
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

func TestDNSProvider_buildQuery(t *testing.T) {
	testCases := []struct {
		desc     string
		apiKey   string
		baseURL  string
		action   string
		domain   string
		txt      string
		expected string
	}{
		{
			desc:     "success",
			apiKey:   fakeAPIKey,
			action:   cmdAddRecord,
			domain:   "domain",
			txt:      "TXTtxtTXT",
			expected: "https://api.dreamhost.com?cmd=dns-add_record&comment=Managed%2BBy%2Blego&format=json&key=asdf1234&record=domain&type=TXT&value=TXTtxtTXT",
		},
		{
			desc:    "Invalid base URL",
			apiKey:  fakeAPIKey,
			baseURL: ":",
			action:  cmdAddRecord,
			domain:  "domain",
			txt:     "TXTtxtTXT",
		},
	}

	for _, test := range testCases {
		test := test
		t.Run(test.desc, func(t *testing.T) {
			t.Parallel()

			config := NewDefaultConfig()
			config.APIKey = test.apiKey
			if test.baseURL != "" {
				config.BaseURL = test.baseURL
			}

			provider, err := NewDNSProviderConfig(config)
			require.NoError(t, err)
			require.NotNil(t, provider)

			u, err := provider.buildQuery(test.action, test.domain, test.txt)

			if test.expected == "" {
				require.Error(t, err)
			} else {
				require.NoError(t, err)
				assert.Equal(t, test.expected, u.String())
			}
		})
	}
}