package system import ( "fmt" "testing" "time" "github.com/glebarez/sqlite" "github.com/stretchr/testify/require" "gorm.io/gorm" "wails-app/internal/dao" "wails-app/internal/global" ) func setupDashboardTest(t *testing.T) { t.Helper() dsn := fmt.Sprintf("file:dashboard-%d?mode=memory&cache=shared", time.Now().UnixNano()) db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{}) require.NoError(t, err) sqlDB, err := db.DB() require.NoError(t, err) t.Cleanup(func() { _ = sqlDB.Close() if global.GVA_DB == db { global.GVA_DB = nil } }) global.GVA_DB = db require.NoError(t, db.AutoMigrate( &dao.ParkingLot{}, &dao.VehicleRecord{}, &dao.PaymentRecord{}, &dao.Channel{}, &dao.UHFReader{}, )) } func TestDashboardUsesActiveParkingLotOccupancy(t *testing.T) { setupDashboardTest(t) activeLot := &dao.ParkingLot{LotCode: "ACTIVE", LotName: "有效停车场", Capacity: 80, Occupied: 1, Available: 79} require.NoError(t, global.GVA_DB.Create(activeLot).Error) deletedLot := &dao.ParkingLot{LotCode: "DELETED", LotName: "已删除停车场", Capacity: 20, Occupied: 5, Available: 15} require.NoError(t, global.GVA_DB.Create(deletedLot).Error) require.NoError(t, global.GVA_DB.Delete(deletedLot).Error) require.NoError(t, global.GVA_DB.Create(&dao.VehicleRecord{ PlateNumber: "ORPHAN", ParkingLotID: deletedLot.ID, EntryTime: time.Now(), PaymentStatus: "unpaid", }).Error) data, err := (&DashboardService{}).GetMonitorData() require.NoError(t, err) require.EqualValues(t, 80, data.TotalSpaces) require.EqualValues(t, 1, data.UsedSpaces) require.EqualValues(t, 1, data.InPark) }