package models

import (
	"testing"
	"time"
)

func TestConnectorQueueGeneratedModelsExposeSystemTables(t *testing.T) {
	dependencyKind := "identity_convergence"
	dependencyRecordID := "00Q000000000002AAA"
	dependencyProbeAfter := time.Unix(3, 0)
	workItem := SystemConnectorWorkItem{
		WorkID:               "work-1",
		EventID:              "event-1",
		InstalledPackID:      "pack-1",
		WorkType:             "event",
		QueueClass:           "default",
		State:                "pending",
		RunAfter:             time.Unix(1, 0),
		Generation:           7,
		OwnershipEpoch:       11,
		FailureCount:         2,
		LaneOrdinal:          13,
		DependencyKind:       &dependencyKind,
		DependencyRecordID:   &dependencyRecordID,
		DependencyProbeAfter: &dependencyProbeAfter,
	}
	if got := workItem.GetTableName(); got != "_System_ConnectorWorkItem" {
		t.Fatalf("SystemConnectorWorkItem.GetTableName() = %q", got)
	}
	if workItem.Generation != 7 {
		t.Fatalf("SystemConnectorWorkItem.Generation = %d", workItem.Generation)
	}
	if workItem.OwnershipEpoch != 11 || workItem.FailureCount != 2 {
		t.Fatalf("SystemConnectorWorkItem ownership/failure = %d/%d, want 11/2", workItem.OwnershipEpoch, workItem.FailureCount)
	}
	if workItem.LaneOrdinal != 13 {
		t.Fatalf("SystemConnectorWorkItem.LaneOrdinal = %d, want 13", workItem.LaneOrdinal)
	}
	if workItem.DependencyKind == nil || workItem.DependencyRecordID == nil || workItem.DependencyProbeAfter == nil {
		t.Fatalf("SystemConnectorWorkItem dependency projection = %#v", workItem)
	}

	lease := SystemConnectorSchedulerLease{
		InstalledPackID: "pack-1",
		Generation:      7,
		OwnerID:         "owner-1",
		FencingToken:    "token-1",
		LeaseUntil:      time.Unix(2, 0),
		RenewedAt:       time.Unix(1, 0),
	}
	if got := lease.GetTableName(); got != "_System_ConnectorSchedulerLease" {
		t.Fatalf("SystemConnectorSchedulerLease.GetTableName() = %q", got)
	}
	if lease.Generation != 7 {
		t.Fatalf("SystemConnectorSchedulerLease.Generation = %d", lease.Generation)
	}
}
