shortlist_test.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package vehicle
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/glebarez/sqlite"
  6. "github.com/stretchr/testify/require"
  7. "gorm.io/gorm"
  8. "wails-app/internal/dao"
  9. "wails-app/internal/global"
  10. )
  11. func setupShortlistTestDB(t *testing.T) *gorm.DB {
  12. t.Helper()
  13. db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{DisableForeignKeyConstraintWhenMigrating: true})
  14. require.NoError(t, err)
  15. require.NoError(t, db.AutoMigrate(&dao.Vehicle{}, &dao.Shortlist{}))
  16. global.GVA_DB = db
  17. t.Cleanup(func() { global.GVA_DB = nil })
  18. return db
  19. }
  20. func TestCheckVehicleShortlistExpiration(t *testing.T) {
  21. db := setupShortlistTestDB(t)
  22. vehicle := dao.Vehicle{PlateNumber: "TEST001", RFIDTag: "RFID001", VehicleTypeID: 1}
  23. require.NoError(t, db.Create(&vehicle).Error)
  24. service := &ShortlistService{}
  25. tests := []struct {
  26. name string
  27. listType string
  28. expiresAt *time.Time
  29. wantBlack bool
  30. wantWhite bool
  31. }{
  32. {name: "永久白名单", listType: "白名单", wantWhite: true},
  33. {name: "有效白名单", listType: "白名单", expiresAt: timePtr(time.Now().Add(time.Hour)), wantWhite: true},
  34. {name: "到期白名单", listType: "白名单", expiresAt: timePtr(time.Now()), wantWhite: false},
  35. {name: "过期白名单", listType: "白名单", expiresAt: timePtr(time.Now().Add(-time.Hour)), wantWhite: false},
  36. {name: "有效黑名单", listType: "黑名单", expiresAt: timePtr(time.Now().Add(time.Hour)), wantBlack: true},
  37. {name: "过期黑名单", listType: "黑名单", expiresAt: timePtr(time.Now().Add(-time.Hour)), wantBlack: false},
  38. }
  39. for _, tt := range tests {
  40. t.Run(tt.name, func(t *testing.T) {
  41. require.NoError(t, db.Unscoped().Where("1 = 1").Delete(&dao.Shortlist{}).Error)
  42. require.NoError(t, db.Create(&dao.Shortlist{
  43. VehicleId: int(vehicle.ID), ListType: tt.listType, ExpirationTime: tt.expiresAt,
  44. }).Error)
  45. isBlack, isWhite := service.CheckVehicleShortlist(vehicle.PlateNumber, "")
  46. require.Equal(t, tt.wantBlack, isBlack)
  47. require.Equal(t, tt.wantWhite, isWhite)
  48. })
  49. }
  50. }
  51. func TestCheckVehicleShortlistBlackTakesPrecedence(t *testing.T) {
  52. db := setupShortlistTestDB(t)
  53. vehicle := dao.Vehicle{PlateNumber: "TEST002", RFIDTag: "RFID002", VehicleTypeID: 1}
  54. require.NoError(t, db.Create(&vehicle).Error)
  55. expiresAt := time.Now().Add(time.Hour)
  56. require.NoError(t, db.Create(&[]dao.Shortlist{
  57. {VehicleId: int(vehicle.ID), ListType: "白名单", ExpirationTime: &expiresAt},
  58. {VehicleId: int(vehicle.ID), ListType: "黑名单", ExpirationTime: &expiresAt},
  59. }).Error)
  60. isBlack, isWhite := (&ShortlistService{}).CheckVehicleShortlist("", vehicle.RFIDTag)
  61. require.True(t, isBlack)
  62. require.False(t, isWhite)
  63. }
  64. func timePtr(value time.Time) *time.Time {
  65. return &value
  66. }