fix(会员计价): 升级报价先做领域校验再做数值校验
- quote_runtime_profile_membership_upgrade 先跑账期变更 / 档位合法性校验,再跑期号与窗口数值校验,使年付转月付等高期号场景返回 CycleKindChangeUnsupported 而非 InvalidQuoteInput。 - 补充年付转月付的回归断言,覆盖目标账期 period 数小于当前期号的拒绝路径。
This commit is contained in:
@@ -161,8 +161,8 @@ fn validate_runtime_profile_membership_upgrade_quote_input(
|
||||
pub fn quote_runtime_profile_membership_upgrade(
|
||||
input: RuntimeProfileMembershipUpgradeQuoteInput,
|
||||
) -> Result<RuntimeProfileMembershipUpgradeQuote, RuntimeProfileMembershipUpgradeRejection> {
|
||||
validate_runtime_profile_membership_upgrade_quote_input(&input)?;
|
||||
check_runtime_profile_membership_upgrade_allowed(&input.current, &input.target)?;
|
||||
validate_runtime_profile_membership_upgrade_quote_input(&input)?;
|
||||
|
||||
let current = input.current;
|
||||
let target = input.target;
|
||||
@@ -506,6 +506,22 @@ mod tests {
|
||||
}),
|
||||
Err(RuntimeProfileMembershipUpgradeRejection::CycleKindChangeUnsupported)
|
||||
);
|
||||
// 中文注释:年付转月付时 `cycle_index = 3` 超过月付的 1 期;领域校验必须先于数值校验,
|
||||
// 否则会被误判成 InvalidQuoteInput,破坏「账期变更不支持」这一对外契约。
|
||||
assert_eq!(
|
||||
quote_runtime_profile_membership_upgrade(RuntimeProfileMembershipUpgradeQuoteInput {
|
||||
current: snapshot(
|
||||
RuntimeProfileMembershipPlan::Plus,
|
||||
RuntimeProfileMembershipCycleKind::Yearly,
|
||||
),
|
||||
target: snapshot(
|
||||
RuntimeProfileMembershipPlan::Pro,
|
||||
RuntimeProfileMembershipCycleKind::Monthly,
|
||||
),
|
||||
..base_input()
|
||||
}),
|
||||
Err(RuntimeProfileMembershipUpgradeRejection::CycleKindChangeUnsupported)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user