package cvt

import (
	"testing"
	"time"

	ent "github.com/tidbcloud/devops/entity/kernelimage"
	"github.com/tidbcloud/devops/models/base"
	mod "github.com/tidbcloud/devops/models/kernelimage"
	"github.com/tidbcloud/devops/pkg/infra/utils/pointer"
	"github.com/tidbcloud/devops/pkg/infra/utils/test"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

func TestConverter(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "Kernel Image Converter Suite")
}

var _ = Describe("Kernel image converter", func() {
	It("round-trips release fields", func() {
		now := time.Now().UTC().Truncate(time.Second)
		operationInstanceID := base.ID(43)
		model := &mod.Release{
			Updatable:   base.Updatable{Base: base.Base{ID: 1, CreatedAt: now}, UpdatedAt: pointer.Pointer(now)},
			ArtifactUID: "kia_1", LocalDevOpsEnv: "dev", Version: "v26.3.99",
			Repo: "pingcap/tiflash", Branch: "release-nextgen-202603",
			CommitSHA: "ff685313539da0046e0951a02f8de2f0e2791602", GitTag: "v26.3.8-nextgen",
			SourceRepository: "registry.example/tiflash", SourceTag: "v26.3.8-nextgen",
			SourceDigest: "sha256:abc", Status: string(ent.ReleaseStatusAvailable),
			Masked: true, MaskReason: "test", SourceApplicant: "applicant@pingcap.com",
			SourceReleaseID:             "30082",
			SourceChangeID:              "62440",
			DeliveryOperationInstanceID: &operationInstanceID,
			FormalDeliveryUID:           "delivery-1", DeliveryBatchUID: "batch-1", LastErrorCode: "code",
			LastErrorMessage: "message", BuildFinishedAt: &now, AvailableAt: &now,
		}

		entity := m2e{}.Release(model)
		roundTrip := e2m{}.Release(entity)

		Expect(test.IsEqual(model, roundTrip)).To(Succeed())
	})

})
