| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package vehicle
- import (
- "testing"
- "time"
- "github.com/glebarez/sqlite"
- "github.com/stretchr/testify/require"
- "gorm.io/gorm"
- "wails-app/internal/dao"
- "wails-app/internal/global"
- )
- func setupShortlistTestDB(t *testing.T) *gorm.DB {
- t.Helper()
- db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{DisableForeignKeyConstraintWhenMigrating: true})
- require.NoError(t, err)
- require.NoError(t, db.AutoMigrate(&dao.Vehicle{}, &dao.Shortlist{}))
- global.GVA_DB = db
- t.Cleanup(func() { global.GVA_DB = nil })
- return db
- }
- func TestCheckVehicleShortlistExpiration(t *testing.T) {
- db := setupShortlistTestDB(t)
- vehicle := dao.Vehicle{PlateNumber: "TEST001", RFIDTag: "RFID001", VehicleTypeID: 1}
- require.NoError(t, db.Create(&vehicle).Error)
- service := &ShortlistService{}
- tests := []struct {
- name string
- listType string
- expiresAt *time.Time
- wantBlack bool
- wantWhite bool
- }{
- {name: "永久白名单", listType: "白名单", wantWhite: true},
- {name: "有效白名单", listType: "白名单", expiresAt: timePtr(time.Now().Add(time.Hour)), wantWhite: true},
- {name: "到期白名单", listType: "白名单", expiresAt: timePtr(time.Now()), wantWhite: false},
- {name: "过期白名单", listType: "白名单", expiresAt: timePtr(time.Now().Add(-time.Hour)), wantWhite: false},
- {name: "有效黑名单", listType: "黑名单", expiresAt: timePtr(time.Now().Add(time.Hour)), wantBlack: true},
- {name: "过期黑名单", listType: "黑名单", expiresAt: timePtr(time.Now().Add(-time.Hour)), wantBlack: false},
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- require.NoError(t, db.Unscoped().Where("1 = 1").Delete(&dao.Shortlist{}).Error)
- require.NoError(t, db.Create(&dao.Shortlist{
- VehicleId: int(vehicle.ID), ListType: tt.listType, ExpirationTime: tt.expiresAt,
- }).Error)
- isBlack, isWhite := service.CheckVehicleShortlist(vehicle.PlateNumber, "")
- require.Equal(t, tt.wantBlack, isBlack)
- require.Equal(t, tt.wantWhite, isWhite)
- })
- }
- }
- func TestCheckVehicleShortlistBlackTakesPrecedence(t *testing.T) {
- db := setupShortlistTestDB(t)
- vehicle := dao.Vehicle{PlateNumber: "TEST002", RFIDTag: "RFID002", VehicleTypeID: 1}
- require.NoError(t, db.Create(&vehicle).Error)
- expiresAt := time.Now().Add(time.Hour)
- require.NoError(t, db.Create(&[]dao.Shortlist{
- {VehicleId: int(vehicle.ID), ListType: "白名单", ExpirationTime: &expiresAt},
- {VehicleId: int(vehicle.ID), ListType: "黑名单", ExpirationTime: &expiresAt},
- }).Error)
- isBlack, isWhite := (&ShortlistService{}).CheckVehicleShortlist("", vehicle.RFIDTag)
- require.True(t, isBlack)
- require.False(t, isWhite)
- }
- func timePtr(value time.Time) *time.Time {
- return &value
- }
|