[PM 20321] Payment is never optional when trial length is zero #15268
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🎟️ Tracking
https://bitwarden.atlassian.net/browse/PM-20321
📔 Objective
This PR ensures that when the payment optional feature flag is enabled and a zero-day trial is specified (i.e., trialLength = 0 in the /trial/send-verification-email request), the system does not skip the payment step during the trial signup flow.
Background
Previously, enabling the payment-optional feature could allow users to bypass payment setup during the trial flow. However, when the trial length is explicitly set to 0 days, the expectation is that the user must provide a payment method upfront to proceed. Skipping payment in this case would lead to invalid or unintended behavior.
What this PR changes
Introduces logic to prevent skipping the payment step when:
The payment-optional feature flag is on, AND
The trial length is set to 0.
Ensures users are prompted for payment when no trial period is granted, regardless of the feature flag.
📸 Screenshots
Screen.Recording.2025-06-20.at.13.03.29.mov
⏰ Reminders before review
🦮 Reviewer guidelines
:+1:
) or similar for great changes:memo:
) or ℹ️ (:information_source:
) for notes or general info:question:
) for questions:thinking:
) or 💭 (:thought_balloon:
) for more open inquiry that's not quite a confirmed issue and could potentially benefit from discussion:art:
) for suggestions / improvements:x:
) or:warning:
) for more significant problems or concerns needing attention:seedling:
) or ♻️ (:recycle:
) for future improvements or indications of technical debt:pick:
) for minor or nitpick changes