package cluster

import (
	"testing"

	"github.com/pingcap/dbaas/central/db/entity"
	"github.com/stretchr/testify/assert"
	"github.com/tidbcloud/idl/pbgen/proto/core"
)

var (
	awsRegionUsWest1 = &core.Region{
		Name:              "us-west-1",
		DisplayName:       "us-west-1",
		CloudProviderName: "aws",
		Status:            core.Region_STATUS_ACTIVE,
		OpenedTenantIds:   nil,
	}
	gcpRegionUsWest1 = &core.Region{
		Name:              "us-west1",
		DisplayName:       "us-west1",
		CloudProviderName: "gcp",
		Status:            core.Region_STATUS_ACTIVE,
		OpenedTenantIds:   nil,
	}
	awsCloudProvider = &core.CloudProvider{
		Name:   "aws",
		Status: core.CloudProvider_STATUS_ACTIVE,
		Name2Region: map[string]*core.Region{
			awsRegionUsWest1.Name: awsRegionUsWest1,
		},
	}
	gcpCloudProvider = &core.CloudProvider{
		Name:   "gcp",
		Status: core.CloudProvider_STATUS_ACTIVE,
		Name2Region: map[string]*core.Region{
			gcpRegionUsWest1.Name: gcpRegionUsWest1,
		},
	}
)

func TestConvertCloudProviders(t *testing.T) {
	listCloudProvidersResp := &core.ListCloudProvidersResp{
		Name2CloudProvider: map[string]*core.CloudProvider{
			gcpCloudProvider.Name: gcpCloudProvider,
			awsCloudProvider.Name: awsCloudProvider,
		},
	}
	tenant := &entity.Tenant{}
	tenant.ID = 1

	cloudProviders := convertCloudProviders(1, listCloudProvidersResp, tenant)
	assert.NotNil(t, cloudProviders)
	assert.Equal(t, 2, len(cloudProviders.CloudProviders))
	// sort by cloud provider name
	assert.Equal(t, "aws", cloudProviders.CloudProviders[0].Name)
	assert.Equal(t, "gcp", cloudProviders.CloudProviders[1].Name)
}
