| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import unittest
- from unittest.mock import patch
- import paypal_flow
- class _FakeInput:
- def __init__(self):
- self.filled = []
- self.first = self
- def fill(self, value):
- self.filled.append(value)
- class _FakePage:
- def __init__(self, url):
- self.url = url
- self.email_input = _FakeInput()
- def wait_for_load_state(self, *_args, **_kwargs):
- return None
- def wait_for_timeout(self, *_args, **_kwargs):
- return None
- def locator(self, selector):
- if "input#email" in selector:
- return self.email_input
- raise AssertionError(f"unexpected selector: {selector}")
- class EnsureCheckoutwebTests(unittest.TestCase):
- def test_pay_url_with_password_still_tries_next_first(self):
- page = _FakePage("https://www.paypal.com/pay?token=abc")
- with patch("paypal_flow.detect_landing_state", side_effect=[
- {
- "kind": "login_email_password",
- "email_count": 1,
- "password_count": 1,
- "url": page.url,
- },
- {
- "kind": "checkoutweb",
- "email_count": 0,
- "password_count": 0,
- "url": "https://www.paypal.com/checkoutweb/signup?token=abc",
- },
- ]), patch("paypal_flow.click_login_next", return_value=True) as click_next, patch(
- "paypal_flow.click_create_account", return_value=False
- ) as click_create:
- result = paypal_flow.ensure_checkoutweb(
- page,
- fallback_email="trial@example.com",
- log=lambda *_: None,
- )
- self.assertEqual(result, "login")
- self.assertEqual(page.email_input.filled, ["trial@example.com"])
- click_next.assert_called_once()
- click_create.assert_not_called()
- def test_pay_url_falls_back_to_create_account_when_next_does_not_enter_checkoutweb(self):
- page = _FakePage("https://www.paypal.com/pay?token=abc")
- with patch("paypal_flow.detect_landing_state", side_effect=[
- {
- "kind": "login_email_password",
- "email_count": 1,
- "password_count": 1,
- "url": page.url,
- },
- {
- "kind": "login_email_password",
- "email_count": 1,
- "password_count": 1,
- "url": page.url,
- },
- ]), patch("paypal_flow.click_login_next", return_value=False) as click_next, patch(
- "paypal_flow.click_create_account", return_value=True
- ) as click_create, patch("paypal_flow.wait_for_checkoutweb", return_value=True):
- result = paypal_flow.ensure_checkoutweb(
- page,
- fallback_email="trial@example.com",
- log=lambda *_: None,
- )
- self.assertEqual(result, "create")
- self.assertEqual(page.email_input.filled, ["trial@example.com"])
- click_next.assert_called_once()
- click_create.assert_called_once()
- if __name__ == "__main__":
- unittest.main()
|