package service import ( "testing" "github.com/glebarez/sqlite" "github.com/stretchr/testify/require" "gorm.io/gorm" "wails-app/internal/dao" "wails-app/internal/global" ) func setupTicketServiceTest(t *testing.T) *TicketService { db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) require.NoError(t, err) global.GVA_DB = db require.NoError(t, db.AutoMigrate(&dao.VehicleRecord{}, &dao.DigitalTicket{})) return NewTicketService() } func TestMarkPaidAndExitedUsesTheActualPaymentEntry(t *testing.T) { svc := setupTicketServiceTest(t) record := &dao.VehicleRecord{PlateNumber: "TEST001"} require.NoError(t, global.GVA_DB.Create(record).Error) _, err := svc.Create("TEST001", "manual", record.ID) require.NoError(t, err) require.NoError(t, svc.MarkPaidAndExitedTx(global.GVA_DB, record.ID, "central_payment_machine", "pos", "ORDER-001", 10, 10)) ticket, err := svc.repo.GetByVehicleRecordID(record.ID) require.NoError(t, err) require.Equal(t, StateExited, ticket.State) require.Equal(t, "central_payment_machine", ticket.PaymentEntry) require.Equal(t, "pos", ticket.PaymentMethod) require.Equal(t, "ORDER-001", ticket.PaymentOrderNo) } func TestMarkPaidAndExitedRequiresATicket(t *testing.T) { svc := setupTicketServiceTest(t) record := &dao.VehicleRecord{PlateNumber: "TEST002"} require.NoError(t, global.GVA_DB.Create(record).Error) require.EqualError(t, svc.MarkPaidAndExitedTx(global.GVA_DB, record.ID, "counter", "cash", "", 0, 0), "车辆对应的数字票不存在") }