package server

import (
	"testing"

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

func TestParseAccountContainer(t *testing.T) {
	bucketURL := "https://tidb.blob.core.windows.net/mycontainer/path/to/file?a=b&c=d"
	account, container, err := parseAccountContainer(bucketURL)
	require.NoError(t, err)
	require.Equal(t, "tidb", account)
	require.Equal(t, "mycontainer", container)
}

func TestBuildAZBlobContainerURL(t *testing.T) {
	require.Equal(
		t,
		"https://tidb.blob.core.windows.net/mycontainer?sp=acw&sig=foo",
		buildAZBlobContainerURL("tidb", "mycontainer", "sp=acw&sig=foo"),
	)
	require.Equal(
		t,
		"https://tidb.blob.core.windows.net/mycontainer",
		buildAZBlobContainerURL("tidb", "mycontainer", ""),
	)
}

func TestNewAZBlobHandler_ManagedIdentityRequiresClientID(t *testing.T) {
	t.Setenv("AZURE_CLIENT_ID", "")

	_, err := NewAZBlobHandler(Config{
		BucketURL: "https://tidb.blob.core.windows.net/mycontainer/path/to/file",
		Azure:     &Azure{},
	})
	require.EqualError(t, err, "AZURE_CLIENT_ID is required when using Azure managed identity auth")
}

func TestNewAZBlobHandler_NilAzureConfigFallsBackToManagedIdentity(t *testing.T) {
	t.Setenv("AZURE_CLIENT_ID", "")

	_, err := NewAZBlobHandler(Config{
		BucketURL: "https://tidb.blob.core.windows.net/mycontainer/path/to/file",
	})
	require.EqualError(t, err, "AZURE_CLIENT_ID is required when using Azure managed identity auth")
}
