package eks

import (
	"testing"

	"github.com/stretchr/testify/assert"

	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
)

func Test_categorizeEndpoints(t *testing.T) {
	type args struct {
		conns map[string]*cloudv1.AWSPrivateLinkServiceConnection
	}
	tests := []struct {
		name         string
		args         args
		wantToReject []string
		wantToAccept []string
	}{
		{
			name:         "empty",
			args:         args{},
			wantToReject: nil,
			wantToAccept: nil,
		},
		{
			name: "all cases",
			args: args{
				conns: map[string]*cloudv1.AWSPrivateLinkServiceConnection{
					"vpce-active": {
						Endpoint: "vpce-active",
						Phase:    cloudv1.PrivateLinkServiceConnectionPhaseActive,
						Message:  "",
					},
					"vpce-pending": {
						Endpoint: "vpce-pending",
						Phase:    cloudv1.PrivateLinkServiceConnectionPhasePending,
						Message:  "",
					},
					"vpce-failed": {
						Endpoint: "vpce-failed",
						Phase:    cloudv1.PrivateLinkServiceConnectionPhaseFailed,
						Message:  "",
					},
					"vpce-failed-notfound": {
						Endpoint: "vpce-failed-notfound",
						Phase:    cloudv1.PrivateLinkServiceConnectionPhaseFailed,
						Message:  awsEndpointNotFoundErrorCode,
					},
					"vpce-deleting": {
						Endpoint: "vpce-deleting",
						Phase:    cloudv1.PrivateLinkServiceConnectionPhaseDeleting,
						Message:  "",
					},
				},
			},
			wantToReject: []string{"vpce-deleting"},
			wantToAccept: []string{"vpce-pending", "vpce-failed"},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			gotToReject, gotToAccept := categorizeEndpoints(tt.args.conns)
			assert.ElementsMatchf(t, tt.wantToReject, gotToReject, "categorizeEndpoints(%v)", tt.args.conns)
			assert.ElementsMatchf(t, tt.wantToAccept, gotToAccept, "categorizeEndpoints(%v)", tt.args.conns)
		})
	}
}
