You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.4 KiB
59 lines
2.4 KiB
from unittest.mock import MagicMock, patch
|
|
|
|
from playwright.sync_api import TimeoutError
|
|
|
|
from platforms.threads import auth
|
|
from platforms.threads.auth import _is_logged_in_threads_url
|
|
|
|
|
|
def test_logged_in_threads_url_accepts_current_threads_com_home():
|
|
assert _is_logged_in_threads_url("https://www.threads.com/") is True
|
|
assert _is_logged_in_threads_url("https://www.threads.com/?hl=en") is True
|
|
|
|
|
|
def test_logged_in_threads_url_accepts_legacy_threads_net_home():
|
|
assert _is_logged_in_threads_url("https://www.threads.net/") is True
|
|
|
|
|
|
def test_logged_in_threads_url_rejects_login_page_and_other_hosts():
|
|
assert _is_logged_in_threads_url("https://www.threads.com/login") is False
|
|
assert _is_logged_in_threads_url("https://www.threads.net/login") is False
|
|
assert _is_logged_in_threads_url("https://example.com/") is False
|
|
|
|
|
|
def test_logged_in_threads_url_rejects_checkpoint_and_challenge_paths():
|
|
assert _is_logged_in_threads_url("https://www.threads.com/challenge/") is False
|
|
assert _is_logged_in_threads_url("https://www.threads.net/checkpoint/") is False
|
|
assert _is_logged_in_threads_url("https://www.threads.com/consent/") is False
|
|
|
|
|
|
def test_logged_in_threads_url_requires_https():
|
|
assert _is_logged_in_threads_url("http://www.threads.com/") is False
|
|
|
|
|
|
def test_login_to_threads_retries_with_enter_when_button_click_times_out(tmp_path):
|
|
username_input = MagicMock()
|
|
password_input = MagicMock()
|
|
login_button = MagicMock()
|
|
login_button.click.side_effect = TimeoutError("button click timed out")
|
|
role_result = MagicMock()
|
|
role_result.first = login_button
|
|
|
|
page = MagicMock()
|
|
page.locator.side_effect = lambda selector: username_input if "username" in selector else password_input
|
|
page.get_by_role.return_value = role_result
|
|
|
|
context = MagicMock()
|
|
context.cookies.return_value = [{"name": "sessionid", "value": "ok"}]
|
|
|
|
cookie_path = tmp_path / "cookie-threads.json"
|
|
|
|
with patch.object(auth.settings, "config", {"threads": {"creds": {"username": "demo", "password": "secret"}}}), \
|
|
patch.object(auth, "THREADS_COOKIE_FILE", str(cookie_path)):
|
|
auth.login_to_threads(page, context)
|
|
|
|
username_input.fill.assert_called_once_with("demo")
|
|
password_input.fill.assert_called_once_with("secret")
|
|
password_input.press.assert_called_once_with("Enter")
|
|
assert page.wait_for_url.call_count == 1
|
|
assert cookie_path.exists() |