package common

import (
	"testing"

	"github.com/onsi/gomega"

	_const "github.com/pingcap-inc/clinic/pkg/const"
	"github.com/pingcap-inc/clinic/pkg/db"
)

func Test_ConverToTaskType(t *testing.T) {
	g := gomega.NewWithT(t)
	for i := 0; i < 100; i++ {
		dtype := ConverToTaskType(APIDataType(i))

		if i < 7 && i > 0 {
			g.Expect(dtype.Validate()).To(gomega.BeTrue())
		} else {
			g.Expect(dtype.Validate()).To(gomega.BeFalse())
		}

		if i == 3 {
			g.Expect(dtype).To(gomega.Equal(_const.LogTask))
		}
	}
}

func TestHash(t *testing.T) {
	c1 := Comparison{
		Args: db.ComparisonArg{
			PackageID1: []string{"123", "12345"},
			StartTime1: 234234,
			EndTime1:   3322,
			PackageID2: []string{"xdfs", "werwe"},
			StartTime2: 79999,
			EndTime2:   90000,
		},
	}
	c2 := Comparison{
		Args: db.ComparisonArg{
			PackageID1: []string{"123", "12345", "dsdf"},
			StartTime1: 234234,
			EndTime1:   3322,
			PackageID2: []string{"xdfs", "werwe"},
			StartTime2: 79999,
			EndTime2:   90000,
		},
	}
	c3 := Comparison{
		Args: db.ComparisonArg{
			PackageID1: []string{"123", "12345"},
			StartTime1: 123,
			EndTime1:   3322,
			PackageID2: []string{"xdfs", "werwe"},
			StartTime2: 79999,
			EndTime2:   90000,
		},
	}
	res1, err := Hash(c1.Args)
	if err != nil {
		t.Error("compute md5 failed", err)
		return
	}
	res2, err := Hash(c2.Args)
	if err != nil {
		t.Error("compute md5 failed", err)
		return
	}
	res3, err := Hash(c3.Args)
	if err != nil {
		t.Error("compute md5 failed", err)
		return
	}
	if res1 != res2 {
		t.Error("different md5")
	}
	if res1 == res3 {
		t.Error("same md5")
	}
}
