| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import unittest
- from unittest.mock import patch
- import automation
- class StripeAmountDecisionTests(unittest.TestCase):
- def test_trial_eligible_account_continues_paypal_when_amount_is_non_zero(self):
- decision = automation.decide_paypal_flow_for_amount("$20.00", trial_eligible=True)
- self.assertEqual(decision["mode"], "paid_retry")
- self.assertTrue(decision["continue_payment"])
- self.assertFalse(decision["is_free_trial"])
- def test_non_trial_account_skips_non_free_amount(self):
- decision = automation.decide_paypal_flow_for_amount("$20.00", trial_eligible=False)
- self.assertEqual(decision["mode"], "manual_payment_required")
- self.assertFalse(decision["continue_payment"])
- self.assertFalse(decision["is_free_trial"])
- def test_zero_amount_is_still_free_trial(self):
- decision = automation.decide_paypal_flow_for_amount("$0.00", trial_eligible=None)
- self.assertEqual(decision["mode"], "free_trial")
- self.assertTrue(decision["continue_payment"])
- self.assertTrue(decision["is_free_trial"])
- class PayPalSessionHandlingTests(unittest.TestCase):
- def test_does_not_clear_paypal_session_after_datadome_is_solved(self):
- class _FakePage:
- url = "https://www.paypal.com/pay?token=abc"
- def wait_for_load_state(self, *_args, **_kwargs):
- return None
- def wait_for_timeout(self, *_args, **_kwargs):
- return None
- ctx = automation.RunContext(token="tok", log=lambda *_: None)
- with patch("automation._detect_datadome_captcha", side_effect=["captcha", ""]), patch(
- "automation._wait_for_datadome_solved", return_value=True
- ), patch("automation._paypal_clear_session") as clear_session, patch(
- "automation._dump_page"
- ), patch("paypal_flow.ensure_checkoutweb", return_value="unknown"):
- with self.assertRaises(automation.PayPalPaymentFailed):
- automation._paypal_signup_and_pay(ctx, _FakePage())
- clear_session.assert_not_called()
- if __name__ == "__main__":
- unittest.main()
|