b5e50d1ee5
- loadSubscribePromoMap 返回 map[subscribeID]map[quantity]*SubscribePromo 二级映射 - 候选查询按 subscribe_id、quantity、priority DESC 排序,一次取出所有 quantity 档位 - 下单路径 QueryEligibleRules 将 quantity 条件移至 JOIN,精确匹配 - 永久订阅(expire_time=0)用 CASE WHEN 排序兜底,不再误判为回归促销 - 新增 promoEligibility、model、subscribe promo 单元测试 Co-authored-by: multica-agent <github@multica.ai>
47 lines
1012 B
Go
47 lines
1012 B
Go
package common
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestEvaluateInactiveUserExpire(t *testing.T) {
|
|
now := time.Date(2026, 5, 27, 8, 0, 0, 0, time.UTC)
|
|
params := promoRuleParams{InactiveMonths: 3}
|
|
|
|
tests := []struct {
|
|
name string
|
|
lastExpire time.Time
|
|
want bool
|
|
}{
|
|
{
|
|
name: "permanent subscription is not inactive",
|
|
lastExpire: time.UnixMilli(0),
|
|
want: false,
|
|
},
|
|
{
|
|
name: "active subscription is not inactive",
|
|
lastExpire: now.Add(time.Hour),
|
|
want: false,
|
|
},
|
|
{
|
|
name: "expire at threshold is inactive",
|
|
lastExpire: now.AddDate(0, -3, 0),
|
|
want: true,
|
|
},
|
|
{
|
|
name: "expire before threshold is inactive",
|
|
lastExpire: now.AddDate(0, -3, -1),
|
|
want: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := evaluateInactiveUserExpire(tt.lastExpire, params, now); got != tt.want {
|
|
t.Fatalf("evaluateInactiveUserExpire() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|