sys_dashboard_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package system
  2. import (
  3. "fmt"
  4. "testing"
  5. "time"
  6. "github.com/glebarez/sqlite"
  7. "github.com/stretchr/testify/require"
  8. "gorm.io/gorm"
  9. "wails-app/internal/dao"
  10. "wails-app/internal/global"
  11. )
  12. func setupDashboardTest(t *testing.T) {
  13. t.Helper()
  14. dsn := fmt.Sprintf("file:dashboard-%d?mode=memory&cache=shared", time.Now().UnixNano())
  15. db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{})
  16. require.NoError(t, err)
  17. sqlDB, err := db.DB()
  18. require.NoError(t, err)
  19. t.Cleanup(func() {
  20. _ = sqlDB.Close()
  21. if global.GVA_DB == db {
  22. global.GVA_DB = nil
  23. }
  24. })
  25. global.GVA_DB = db
  26. require.NoError(t, db.AutoMigrate(
  27. &dao.ParkingLot{}, &dao.VehicleRecord{}, &dao.PaymentRecord{}, &dao.Channel{}, &dao.UHFReader{},
  28. ))
  29. }
  30. func TestDashboardUsesActiveParkingLotOccupancy(t *testing.T) {
  31. setupDashboardTest(t)
  32. activeLot := &dao.ParkingLot{LotCode: "ACTIVE", LotName: "有效停车场", Capacity: 80, Occupied: 1, Available: 79}
  33. require.NoError(t, global.GVA_DB.Create(activeLot).Error)
  34. deletedLot := &dao.ParkingLot{LotCode: "DELETED", LotName: "已删除停车场", Capacity: 20, Occupied: 5, Available: 15}
  35. require.NoError(t, global.GVA_DB.Create(deletedLot).Error)
  36. require.NoError(t, global.GVA_DB.Delete(deletedLot).Error)
  37. require.NoError(t, global.GVA_DB.Create(&dao.VehicleRecord{
  38. PlateNumber: "ORPHAN", ParkingLotID: deletedLot.ID, EntryTime: time.Now(), PaymentStatus: "unpaid",
  39. }).Error)
  40. data, err := (&DashboardService{}).GetMonitorData()
  41. require.NoError(t, err)
  42. require.EqualValues(t, 80, data.TotalSpaces)
  43. require.EqualValues(t, 1, data.UsedSpaces)
  44. require.EqualValues(t, 1, data.InPark)
  45. }