package action

import (
	"errors"
	"testing"

	"github.com/stretchr/testify/mock"
	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/cluster-service-ng/domain/workflow"
	clusterconfigmocks "github.com/tidbcloud/cluster-service-ng/pkg/clusterconfig/mocks"
	"github.com/tidbcloud/cluster-service-ng/pkg/runtime/actions"
)

func TestDeleteTiDBClusterMetaAction(t *testing.T) {
	t.Run("success", func(t *testing.T) {
		clusterConfigClient := clusterconfigmocks.NewClient(t)
		clusterConfigClient.EXPECT().
			DeleteTiDBClusterMeta(mock.Anything, "cluster-1").
			Return(nil)

		action := NewDeleteTiDBClusterMetaAction(clusterConfigClient)
		err := action.Invoke(actions.ActionArgs{
			workflow.TiDBClusterIdKey: actions.ActionArgString("cluster-1"),
		})

		require.NoError(t, err)
	})

	t.Run("missing cluster id", func(t *testing.T) {
		clusterConfigClient := clusterconfigmocks.NewClient(t)
		action := NewDeleteTiDBClusterMetaAction(clusterConfigClient)

		err := action.Invoke(actions.ActionArgs{})

		require.Error(t, err)
		require.Contains(t, err.Error(), "failed to get tidb cluster id")
	})

	t.Run("delete cluster meta failed", func(t *testing.T) {
		clusterConfigClient := clusterconfigmocks.NewClient(t)
		clusterConfigClient.EXPECT().
			DeleteTiDBClusterMeta(mock.Anything, "cluster-1").
			Return(errors.New("config center error"))

		action := NewDeleteTiDBClusterMetaAction(clusterConfigClient)
		err := action.Invoke(actions.ActionArgs{
			workflow.TiDBClusterIdKey: actions.ActionArgString("cluster-1"),
		})

		require.Error(t, err)
		require.Contains(t, err.Error(), "failed to delete tidb cluster meta")
	})
}
