package k8supgrade

import (
	"context"
	"testing"

	"github.com/onsi/gomega"
)

func TestSelectorFromTask(t *testing.T) {
	g := gomega.NewWithT(t)

	info := &K8sInfo{
		K8sName:   "k8s-1",
		TenantID:  "tenant-1",
		ProjectID: "project-1",
		TiDBClusters: []*TiDBClusterInfraInfo{
			{ID: "cluster-1"},
			{ID: "cluster-2"},
		},
		BusinessRegion: "APAC",
	}

	{
		sel, err := SelectorFromTask(&Task{SelectorType: SelectorTypeByTenantIDs, SelectorValue: `{"tenant_ids":["tenant-1"]}`})
		g.Expect(err).To(gomega.BeNil())
		g.Expect(sel.Matches(context.Background(), info)).To(gomega.BeTrue())
	}
	{
		sel, err := SelectorFromTask(&Task{SelectorType: SelectorTypeByProjectIDs, SelectorValue: `{"project_ids":["project-2"]}`})
		g.Expect(err).To(gomega.BeNil())
		g.Expect(sel.Matches(context.Background(), info)).To(gomega.BeFalse())
	}
	{
		sel, err := SelectorFromTask(&Task{SelectorType: SelectorTypeByTiDBClusterID, SelectorValue: `{"tidb_cluster_ids":["cluster-2"]}`})
		g.Expect(err).To(gomega.BeNil())
		g.Expect(sel.Matches(context.Background(), info)).To(gomega.BeTrue())
	}
	{
		sel, err := SelectorFromTask(&Task{SelectorType: SelectorTypeByK8sNames, SelectorValue: `{"k8s_names":["k8s-1"]}`})
		g.Expect(err).To(gomega.BeNil())
		g.Expect(sel.Matches(context.Background(), info)).To(gomega.BeTrue())
	}
	{
		sel, err := SelectorFromTask(&Task{SelectorType: SelectorTypeByRegion, SelectorValue: `{"region":"APAC"}`})
		g.Expect(err).To(gomega.BeNil())
		g.Expect(sel.Matches(context.Background(), info)).To(gomega.BeTrue())
	}
}

