package collectors

import (
	"testing"

	dto "github.com/prometheus/client_model/go"
	"github.com/prometheus/client_golang/prometheus"
	"github.com/tidbcloud/infra-provider/regional-server/api/v1alpha1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func TestCollectMaintenancePendingMetrics(t *testing.T) {
	ch := make(chan prometheus.Metric, 4)
	uo := &v1alpha1.UpgradeOperation{
		ObjectMeta: metav1.ObjectMeta{
			Name:      "uo-1",
			Namespace: "ns-1",
			Labels: map[string]string{
				v1alpha1.TagTenantKey:  "tenant-1",
				v1alpha1.TagProjectKey: "project-1",
			},
			Annotations: map[string]string{
				"maintenance.pingcap.com/request-step-2": `{"spec":{"cluster_id":"42","time":"1"}}`,
			},
		},
		Spec: v1alpha1.UpgradeOperationSpec{
			MaintenancePolicyMode: v1alpha1.MaintenancePolicyModeClusterMaintenance,
		},
	}
	(&upgradeOperation{}).collectMaintenanceStuckMetrics(ch, uo)
	close(ch)

	var count int
	for m := range ch {
		count++
		var d dto.Metric
		if err := m.Write(&d); err != nil {
			t.Fatal(err)
		}
	}
	if count != 1 {
		t.Fatalf("expected 1 pending metric, got %d", count)
	}
}
