| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package vehicle
- import (
- "testing"
- "time"
- "github.com/stretchr/testify/require"
- "wails-app/internal/dao"
- "wails-app/internal/global"
- "wails-app/internal/model/vehicle/request"
- parkingSessionService "wails-app/internal/modules/parking-session/service"
- )
- func setFullLotPolicies(t *testing.T, temporary, monthly, vip bool) {
- t.Helper()
- require.NoError(t, global.GVA_DB.Model(&dao.ParkingLot{}).Where("id = ?", 1).Updates(map[string]interface{}{
- "capacity": 0, "occupied": 0, "available": 0,
- "allow_temporary_when_full": temporary,
- "allow_monthly_when_full": monthly,
- "allow_vip_when_full": vip,
- }).Error)
- }
- func TestVehicleEntryRejectsTemporaryVehicleWhenLotIsFull(t *testing.T) {
- svc := setupVehiclePaymentTest(t)
- setFullLotPolicies(t, false, true, true)
- vehicleType := &dao.VehicleType{Name: "临时车", IsSystem: true}
- require.NoError(t, global.GVA_DB.Create(vehicleType).Error)
- require.NoError(t, global.GVA_DB.Create(&dao.Vehicle{PlateNumber: "TEMP-FULL", VehicleTypeID: vehicleType.ID}).Error)
- _, err := svc.VehicleEntry(request.VehicleEntry{PlateNumber: "TEMP-FULL", ParkingLotID: 1})
- require.ErrorIs(t, err, parkingSessionService.ErrParkingLotFull)
- var sessionCount, ticketCount int64
- require.NoError(t, global.GVA_DB.Model(&dao.VehicleRecord{}).Count(&sessionCount).Error)
- require.NoError(t, global.GVA_DB.Model(&dao.DigitalTicket{}).Count(&ticketCount).Error)
- require.Zero(t, sessionCount)
- require.Zero(t, ticketCount)
- }
- func TestVehicleEntryAllowsValidMonthlyVehicleWhenLotIsFull(t *testing.T) {
- svc := setupVehiclePaymentTest(t)
- setFullLotPolicies(t, false, true, false)
- vehicleType := &dao.VehicleType{Name: "月租车型"}
- require.NoError(t, global.GVA_DB.Create(vehicleType).Error)
- vehicle := &dao.Vehicle{PlateNumber: "MONTHLY-FULL", VehicleTypeID: vehicleType.ID}
- require.NoError(t, global.GVA_DB.Create(vehicle).Error)
- require.NoError(t, global.GVA_DB.Create(&dao.MonthlyCard{
- VehicleID: vehicle.ID, StartDate: time.Now().Add(-time.Hour), EndDate: time.Now().Add(time.Hour), PaymentStatus: "paid",
- }).Error)
- _, err := svc.VehicleEntry(request.VehicleEntry{PlateNumber: vehicle.PlateNumber, ParkingLotID: 1})
- require.NoError(t, err)
- var lot dao.ParkingLot
- require.NoError(t, global.GVA_DB.First(&lot, 1).Error)
- require.Equal(t, 1, lot.Occupied)
- require.Zero(t, lot.Available)
- }
- func TestVehicleEntryAllowsValidVIPVehicleWhenLotIsFull(t *testing.T) {
- svc := setupVehiclePaymentTest(t)
- setFullLotPolicies(t, false, false, true)
- owner := &dao.Owner{OwnerName: "VIP车主", IsVip: true, VipExpireTime: time.Now().Add(time.Hour)}
- require.NoError(t, global.GVA_DB.Create(owner).Error)
- vehicleType := &dao.VehicleType{Name: "VIP车型"}
- require.NoError(t, global.GVA_DB.Create(vehicleType).Error)
- vehicle := &dao.Vehicle{PlateNumber: "VIP-FULL", VehicleTypeID: vehicleType.ID, OwnerId: &owner.ID}
- require.NoError(t, global.GVA_DB.Create(vehicle).Error)
- _, err := svc.VehicleEntry(request.VehicleEntry{PlateNumber: vehicle.PlateNumber, ParkingLotID: 1})
- require.NoError(t, err)
- }
|