repo_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package repository
  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 TestGetByVehicleIDReturnsOnlyUnexpiredPaidCard(t *testing.T) {
  12. db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{DisableForeignKeyConstraintWhenMigrating: true})
  13. require.NoError(t, err)
  14. require.NoError(t, db.AutoMigrate(&dao.Vehicle{}, &dao.MonthlyCard{}))
  15. global.GVA_DB = db
  16. t.Cleanup(func() { global.GVA_DB = nil })
  17. vehicle := dao.Vehicle{PlateNumber: "MONTHLY001", VehicleTypeID: 1}
  18. require.NoError(t, db.Create(&vehicle).Error)
  19. now := time.Now()
  20. require.NoError(t, db.Create(&[]dao.MonthlyCard{
  21. {VehicleID: vehicle.ID, StartDate: now.AddDate(0, -2, 0), EndDate: now.Add(-time.Hour), PaymentStatus: "paid"},
  22. {VehicleID: vehicle.ID, StartDate: now.AddDate(0, -1, 0), EndDate: now.Add(time.Hour), PaymentStatus: "refunded"},
  23. {VehicleID: vehicle.ID, StartDate: now, EndDate: now.Add(2 * time.Hour), PaymentStatus: "paid"},
  24. }).Error)
  25. card, err := (&MonthlyCardRepository{}).GetByVehicleID(vehicle.ID)
  26. require.NoError(t, err)
  27. require.NotNil(t, card)
  28. require.True(t, card.EndDate.After(now.Add(time.Hour)))
  29. }
  30. func TestGetByVehicleIDRejectsExpiredCard(t *testing.T) {
  31. db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{DisableForeignKeyConstraintWhenMigrating: true})
  32. require.NoError(t, err)
  33. require.NoError(t, db.AutoMigrate(&dao.Vehicle{}, &dao.MonthlyCard{}))
  34. global.GVA_DB = db
  35. t.Cleanup(func() { global.GVA_DB = nil })
  36. vehicle := dao.Vehicle{PlateNumber: "MONTHLY002", VehicleTypeID: 1}
  37. require.NoError(t, db.Create(&vehicle).Error)
  38. now := time.Now()
  39. require.NoError(t, db.Create(&dao.MonthlyCard{
  40. VehicleID: vehicle.ID, StartDate: now.AddDate(0, -1, 0), EndDate: now, PaymentStatus: "paid",
  41. }).Error)
  42. card, err := (&MonthlyCardRepository{}).GetByVehicleID(vehicle.ID)
  43. require.ErrorIs(t, err, gorm.ErrRecordNotFound)
  44. require.Nil(t, card)
  45. }