package repository import ( "testing" "time" "github.com/glebarez/sqlite" "github.com/stretchr/testify/require" "gorm.io/gorm" "wails-app/internal/dao" "wails-app/internal/global" ) func TestGetByVehicleIDReturnsOnlyUnexpiredPaidCard(t *testing.T) { db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{DisableForeignKeyConstraintWhenMigrating: true}) require.NoError(t, err) require.NoError(t, db.AutoMigrate(&dao.Vehicle{}, &dao.MonthlyCard{})) global.GVA_DB = db t.Cleanup(func() { global.GVA_DB = nil }) vehicle := dao.Vehicle{PlateNumber: "MONTHLY001", VehicleTypeID: 1} require.NoError(t, db.Create(&vehicle).Error) now := time.Now() require.NoError(t, db.Create(&[]dao.MonthlyCard{ {VehicleID: vehicle.ID, StartDate: now.AddDate(0, -2, 0), EndDate: now.Add(-time.Hour), PaymentStatus: "paid"}, {VehicleID: vehicle.ID, StartDate: now.AddDate(0, -1, 0), EndDate: now.Add(time.Hour), PaymentStatus: "refunded"}, {VehicleID: vehicle.ID, StartDate: now, EndDate: now.Add(2 * time.Hour), PaymentStatus: "paid"}, }).Error) card, err := (&MonthlyCardRepository{}).GetByVehicleID(vehicle.ID) require.NoError(t, err) require.NotNil(t, card) require.True(t, card.EndDate.After(now.Add(time.Hour))) } func TestGetByVehicleIDRejectsExpiredCard(t *testing.T) { db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{DisableForeignKeyConstraintWhenMigrating: true}) require.NoError(t, err) require.NoError(t, db.AutoMigrate(&dao.Vehicle{}, &dao.MonthlyCard{})) global.GVA_DB = db t.Cleanup(func() { global.GVA_DB = nil }) vehicle := dao.Vehicle{PlateNumber: "MONTHLY002", VehicleTypeID: 1} require.NoError(t, db.Create(&vehicle).Error) now := time.Now() require.NoError(t, db.Create(&dao.MonthlyCard{ VehicleID: vehicle.ID, StartDate: now.AddDate(0, -1, 0), EndDate: now, PaymentStatus: "paid", }).Error) card, err := (&MonthlyCardRepository{}).GetByVehicleID(vehicle.ID) require.ErrorIs(t, err, gorm.ErrRecordNotFound) require.Nil(t, card) }