package regionaction

import (
	"reflect"
	"testing"

	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
	regionalv1 "github.com/tidbcloud/infra-provider/api/tidbcloud/regional-server/v1"
)

func Test_generateUpgradeSteps(t *testing.T) {
	tests := []struct {
		name           string
		currentVersion string
		desiredVersion string
		want           []*regionalv1.UpgradeStep
	}{
		{
			name:           "current version is greater than desired version",
			currentVersion: "1.32",
			desiredVersion: "1.31",
			want:           nil,
		},
		{
			name:           "current version is same as desired version",
			currentVersion: "1.32",
			desiredVersion: "1.32",
			want:           nil,
		},
		{
			name:           "happy path 1",
			currentVersion: "1.30",
			desiredVersion: "1.31",
			want: []*regionalv1.UpgradeStep{
				{
					Target:  string(cloudv1.ControlPlane),
					Version: "1.31",
				},
			},
		},
		{
			name:           "happy path 2",
			currentVersion: "1.30",
			desiredVersion: "1.32",
			want: []*regionalv1.UpgradeStep{
				{
					Target:  string(cloudv1.ControlPlane),
					Version: "1.31",
				},
				{
					Target:  string(cloudv1.ControlPlane),
					Version: "1.32",
				},
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := generateUpgradeSteps(tt.currentVersion, tt.desiredVersion)
			if !reflect.DeepEqual(got, tt.want) {
				t.Errorf("generateUpgradeSteps() got = %v, want %v", got, tt.want)
			}
		})
	}
}
