完成UR46后端任务收口
This commit is contained in:
@@ -92,6 +92,38 @@ func TestCalculate(t *testing.T) {
|
||||
return []*model.PackageUsage{current, queued}
|
||||
}(), wantStatus: constants.PackageExpiryEstimateStatusInvalidData,
|
||||
},
|
||||
{
|
||||
name: "已过期退款软删除加油包均排除", usages: func() []*model.PackageUsage {
|
||||
expired := newUsage(1, constants.PackageUsageStatusExpired, 1)
|
||||
invalidated := newUsage(2, constants.PackageUsageStatusInvalidated, 2)
|
||||
refundID := uint(3)
|
||||
refunded := newUsage(3, constants.PackageUsageStatusActive, 3)
|
||||
refunded.RefundID = &refundID
|
||||
deleted := newUsage(4, constants.PackageUsageStatusActive, 4)
|
||||
deleted.DeletedAt = gorm.DeletedAt{Time: now, Valid: true}
|
||||
masterID := uint(1)
|
||||
addon := newUsage(5, constants.PackageUsageStatusActive, 5)
|
||||
addon.MasterUsageID = &masterID
|
||||
return []*model.PackageUsage{expired, invalidated, refunded, deleted, addon}
|
||||
}(), wantStatus: constants.PackageExpiryEstimateStatusNone,
|
||||
},
|
||||
{
|
||||
name: "多个当前套餐为异常数据", usages: func() []*model.PackageUsage {
|
||||
first := newUsage(1, constants.PackageUsageStatusActive, 1)
|
||||
first.ExpiresAt = ¤tExpiry
|
||||
second := newUsage(2, constants.PackageUsageStatusDepleted, 2)
|
||||
second.ExpiresAt = ¤tExpiry
|
||||
return []*model.PackageUsage{first, second}
|
||||
}(), wantStatus: constants.PackageExpiryEstimateStatusInvalidData,
|
||||
},
|
||||
{
|
||||
name: "已过期当前套餐返回负数自然日", usages: func() []*model.PackageUsage {
|
||||
expiry := time.Date(2026, 7, 20, 23, 59, 59, 0, location)
|
||||
u := newUsage(1, constants.PackageUsageStatusActive, 1)
|
||||
u.ExpiresAt = &expiry
|
||||
return []*model.PackageUsage{u}
|
||||
}(), wantStatus: constants.PackageExpiryEstimateStatusExact, wantDays: intPointer(-3),
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
@@ -158,6 +190,25 @@ func TestQueryResolveBatchUsesOneBatchLoad(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestQueryIndexesExplainAnalyze 验证开发 PostgreSQL 为两类资产队列查询选择 UR46 部分索引。
|
||||
func TestQueryIndexesExplainAnalyze(t *testing.T) {
|
||||
tx := testutil.NewPostgresTransaction(t)
|
||||
queries := []string{
|
||||
"EXPLAIN ANALYZE SELECT id FROM tb_package_usage WHERE iot_card_id = 970001 AND master_usage_id IS NULL AND refund_id IS NULL AND status IN (0, 1, 2) ORDER BY priority ASC, created_at ASC, id ASC",
|
||||
"EXPLAIN ANALYZE SELECT id FROM tb_package_usage WHERE device_id = 970001 AND master_usage_id IS NULL AND refund_id IS NULL AND status IN (0, 1, 2) ORDER BY priority ASC, created_at ASC, id ASC",
|
||||
}
|
||||
for _, query := range queries {
|
||||
var lines []string
|
||||
if err := tx.Raw(query).Scan(&lines).Error; err != nil {
|
||||
t.Fatalf("执行 EXPLAIN ANALYZE 失败:%v", err)
|
||||
}
|
||||
if len(lines) == 0 {
|
||||
t.Fatal("EXPLAIN ANALYZE 未返回执行计划")
|
||||
}
|
||||
t.Logf("%s", lines)
|
||||
}
|
||||
}
|
||||
|
||||
func modelBase(id uint, createdAt time.Time) gorm.Model {
|
||||
return gorm.Model{ID: id, CreatedAt: createdAt}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user