package fleetstatus

import "testing"

func TestTableNames(t *testing.T) {
	if (FleetStatus{}).TableName() != "fleet_statuses" {
		t.Error("FleetStatus table name")
	}
	if (MaintenanceSchedule{}).TableName() != "maintenance_schedules" {
		t.Error("MaintenanceSchedule table name")
	}
	if (FleetStatusFile{}).TableName() != "fleet_status_files" {
		t.Error("FleetStatusFile table name")
	}
	if (FleetStatusServiceLog{}).TableName() != "fleet_status_service_logs" {
		t.Error("FleetStatusServiceLog table name")
	}
}

func TestFleetStatusBeforeCreate(t *testing.T) {
	f := &FleetStatus{}
	if err := f.BeforeCreate(nil); err != nil {
		t.Fatalf("err: %v", err)
	}
	if len(f.ID) == 0 {
		t.Fatal("ID should be set")
	}
	if f.Status != StatusActive {
		t.Fatalf("Status default = %q, want %q", f.Status, StatusActive)
	}
	// existing ID + status preserved
	f2 := &FleetStatus{Status: "serviced"}
	_ = f2.BeforeCreate(nil)
	if f2.Status != "serviced" {
		t.Fatal("BeforeCreate must not overwrite an existing status")
	}
}

func TestChildBeforeCreate(t *testing.T) {
	m := &MaintenanceSchedule{}
	_ = m.BeforeCreate(nil)
	if len(m.ID) == 0 {
		t.Error("MaintenanceSchedule ID not set")
	}
	fsf := &FleetStatusFile{}
	_ = fsf.BeforeCreate(nil)
	if len(fsf.ID) == 0 {
		t.Error("FleetStatusFile ID not set")
	}
	sl := &FleetStatusServiceLog{}
	_ = sl.BeforeCreate(nil)
	if len(sl.ID) == 0 {
		t.Error("FleetStatusServiceLog ID not set")
	}
}

func TestIsValidFileCategory(t *testing.T) {
	for _, c := range []string{FileCategoryWB, FileCategoryBFI} {
		if !IsValidFileCategory(c) {
			t.Fatalf("%q should be valid", c)
		}
	}
	for _, c := range []string{"WB", "", "nope"} {
		if IsValidFileCategory(c) {
			t.Fatalf("%q should be invalid", c)
		}
	}
}
