test_automation.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import unittest
  2. from unittest.mock import patch
  3. import automation
  4. class StripeAmountDecisionTests(unittest.TestCase):
  5. def test_trial_eligible_account_continues_paypal_when_amount_is_non_zero(self):
  6. decision = automation.decide_paypal_flow_for_amount("$20.00", trial_eligible=True)
  7. self.assertEqual(decision["mode"], "paid_retry")
  8. self.assertTrue(decision["continue_payment"])
  9. self.assertFalse(decision["is_free_trial"])
  10. def test_non_trial_account_skips_non_free_amount(self):
  11. decision = automation.decide_paypal_flow_for_amount("$20.00", trial_eligible=False)
  12. self.assertEqual(decision["mode"], "manual_payment_required")
  13. self.assertFalse(decision["continue_payment"])
  14. self.assertFalse(decision["is_free_trial"])
  15. def test_zero_amount_is_still_free_trial(self):
  16. decision = automation.decide_paypal_flow_for_amount("$0.00", trial_eligible=None)
  17. self.assertEqual(decision["mode"], "free_trial")
  18. self.assertTrue(decision["continue_payment"])
  19. self.assertTrue(decision["is_free_trial"])
  20. class PayPalSessionHandlingTests(unittest.TestCase):
  21. def test_does_not_clear_paypal_session_after_datadome_is_solved(self):
  22. class _FakePage:
  23. url = "https://www.paypal.com/pay?token=abc"
  24. def wait_for_load_state(self, *_args, **_kwargs):
  25. return None
  26. def wait_for_timeout(self, *_args, **_kwargs):
  27. return None
  28. ctx = automation.RunContext(token="tok", log=lambda *_: None)
  29. with patch("automation._detect_datadome_captcha", side_effect=["captcha", ""]), patch(
  30. "automation._wait_for_datadome_solved", return_value=True
  31. ), patch("automation._paypal_clear_session") as clear_session, patch(
  32. "automation._dump_page"
  33. ), patch("paypal_flow.ensure_checkoutweb", return_value="unknown"):
  34. with self.assertRaises(automation.PayPalPaymentFailed):
  35. automation._paypal_signup_and_pay(ctx, _FakePage())
  36. clear_session.assert_not_called()
  37. if __name__ == "__main__":
  38. unittest.main()