package server

import (
	"context"
	"testing"

	"github.com/stretchr/testify/require"
	apiv1 "github.com/tidbcloud/cluster-service-ng/api/cluster-service-ng/v1beta"
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/status"
)

func TestServerImpl_CreateClassicRestoreRejectsIncompleteSourceRoleCredentials(t *testing.T) {
	tests := []struct {
		name             string
		sourceRoleARN    string
		sourceExternalID string
	}{
		{
			name:          "missing external ID",
			sourceRoleARN: "arn:aws:iam::123456789012:role/source-backup",
		},
		{
			name:             "missing role ARN",
			sourceExternalID: "external-id",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			server := &serverImpl{}
			input := &CreateClassicRestoreInput{
				CreateClassicRestoreRequest: &apiv1.CreateClassicRestoreRequest{
					SourceRoleArn:        tt.sourceRoleARN,
					SourceRoleExternalId: tt.sourceExternalID,
				},
			}

			err := server.CreateClassicRestore(context.Background(), input)

			require.Equal(t, codes.InvalidArgument, status.Code(err))
			require.Equal(t, "source role ARN and external ID must be provided together", status.Convert(err).Message())
		})
	}
}
