重构(计费): 会员档位 rank 解析改为可失败返回

runtime_profile_membership_plan_rank 返回 Option<u8>,目录缺行时返回 None

去掉 unwrap_or(0),不再把目录缺失伪装成 Normal 而误报 NotUpgrade

plan_rank_follows_catalog_order 测试断言同步改为 Some(..)

Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
2026-10-02 20:05:51 +08:00
parent 3eaae417ba
commit 047e6d72e4
@@ -173,10 +173,11 @@ pub fn resolve_runtime_profile_membership_plan_snapshot(
}
/// 升级比较基准:目录里的 `rank`(`Normal = 0`,越大越高)。
pub fn runtime_profile_membership_plan_rank(plan: RuntimeProfileMembershipPlan) -> u8 {
resolve_runtime_profile_membership_plan_row(plan)
.map(|row| row.rank)
.unwrap_or(0)
///
/// 返回 `Option` 是为了把「目录缺行」显式化:不再用 `unwrap_or(0)` 把缺失伪装成 `Normal`,
/// 否则缺失会被 `check_..._allowed` 误判成「目标不高于当前」→ 误报 `NotUpgrade`。
pub fn runtime_profile_membership_plan_rank(plan: RuntimeProfileMembershipPlan) -> Option<u8> {
resolve_runtime_profile_membership_plan_row(plan).map(|row| row.rank)
}
/// 只有在售档位可以下单:`Normal` 与下架档位都不允许购买。
@@ -371,15 +372,15 @@ mod tests {
fn plan_rank_follows_catalog_order() {
assert_eq!(
runtime_profile_membership_plan_rank(RuntimeProfileMembershipPlan::Normal),
0
Some(0)
);
assert_eq!(
runtime_profile_membership_plan_rank(RuntimeProfileMembershipPlan::Plus),
2
Some(2)
);
assert_eq!(
runtime_profile_membership_plan_rank(RuntimeProfileMembershipPlan::Max),
4
Some(4)
);
}