package infraapi

import (
	"context"
	"testing"

	"github.com/pingcap/errors"
	"github.com/stretchr/testify/assert"
	apierrors "k8s.io/apimachinery/pkg/api/errors"
	"sigs.k8s.io/controller-runtime/pkg/client/fake"
)

func TestRestore(t *testing.T) {
	var (
		client = fake.NewFakeClientWithScheme(scheme)
		api    = &API{
			projectName: "test",
			client:      client,
		}
		ctx         = context.Background()
		tenantID    = uint64(123)
		projectID   = uint64(456)
		clusterID   = uint64(789)
		clusterName = "cluster-1"
		backupName  = "backup-1"
		restoreName = "restore-1"
	)

	// no restores exist
	got, err := api.GetRestore(ctx, projectID, restoreName)
	assert.True(t, apierrors.IsNotFound(errors.Cause(err)))
	assert.Nil(t, got)

	// create 1 restore
	err = api.CreateRestoreIgnoreExists(ctx, tenantID, projectID, clusterID, clusterName, backupName, restoreName)
	assert.Nil(t, err)

	// got the restore
	got, err = api.GetRestore(ctx, projectID, restoreName)
	assert.Nil(t, err)
	assert.Equal(t, got.Name, restoreName)

	// delete the restore
	err = api.DeleteRestoreIgnoreNotFound(ctx, projectID, restoreName)
	assert.Nil(t, err)

	// no restores exist
	got, err = api.GetRestore(ctx, projectID, restoreName)
	assert.True(t, apierrors.IsNotFound(errors.Cause(err)))
	assert.Nil(t, got)
}
