package vo

import (
	"testing"

	. "github.com/onsi/gomega"
	"github.com/tidbcloud/serverless-service/internal/domain/constant"
)

func Test_SkuNameBuilder_Build(t *testing.T) {
	g := NewGomegaWithT(t)
	b := &SkuNameBuilder{
		CloudProvider: "aws",
		Region:        "us-west-2",
	}

	testCases := []struct {
		skuType  constant.SkuType
		expected string
	}{
		{
			skuType:  constant.SkuTypeRowStorage,
			expected: "serverless-row-storage:aws:us-west-2:starter",
		}, {
			skuType:  constant.SkuTypeColumnStorage,
			expected: "serverless-column-storage:aws:us-west-2:starter",
		}, {
			skuType:  constant.SkuTypeRequestUnit,
			expected: "serverless-request-unit:aws:us-west-2:starter",
		}, {
			skuType:  constant.SkuTypeRequestCapacityUnit,
			expected: "serverless-request-capacity-unit:aws:us-west-2:essential",
		}, {
			skuType:  constant.SkuType("unknown"),
			expected: "",
		},
	}

	for _, tc := range testCases {
		if tc.expected == "" {
			g.Expect(func() {
				b.Build(tc.skuType)
			}).To(PanicWith("invalid sku type: unknown"))
		} else {
			g.Expect(b.Build(tc.skuType)).To(Equal(tc.expected))
		}
	}

	g.Expect(func() {
		(*SkuNameBuilder)(nil).Build(constant.SkuTypeRowStorage)
	}).To(Panic())
}
