mvp: wonky but working selenium firefox version
This commit is contained in:
parent
061eefdb24
commit
a3c843d63c
20 changed files with 738 additions and 407 deletions
81
tests/test_emails.py
Normal file
81
tests/test_emails.py
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
from emails import pop_account, peek_accounts, remaining_count, _parse_line
|
||||
import emails as em
|
||||
|
||||
|
||||
def test_parse_line():
|
||||
acc = _parse_line("user@example.com:pass123")
|
||||
assert acc is not None
|
||||
assert acc.email == "user@example.com"
|
||||
assert acc.password == "pass123"
|
||||
|
||||
|
||||
def test_parse_line_with_colon_in_password():
|
||||
acc = _parse_line("user@example.com:pass:with:colons")
|
||||
assert acc is not None
|
||||
assert acc.password == "pass:with:colons"
|
||||
|
||||
|
||||
def test_parse_line_empty():
|
||||
assert _parse_line("") is None
|
||||
assert _parse_line(" ") is None
|
||||
assert _parse_line("# comment") is None
|
||||
|
||||
|
||||
def test_parse_line_malformed():
|
||||
assert _parse_line("no-colon-here") is None
|
||||
|
||||
|
||||
def test_peek_accounts(tmp_path, monkeypatch):
|
||||
f = tmp_path / "emails.txt"
|
||||
f.write_text("a@b.com:pass1\nc@d.com:pass2\n")
|
||||
monkeypatch.setattr(em, "EMAILS_FILE", f)
|
||||
|
||||
accounts = peek_accounts()
|
||||
assert len(accounts) == 2
|
||||
assert accounts[0].email == "a@b.com"
|
||||
assert accounts[1].email == "c@d.com"
|
||||
|
||||
# peek doesn't consume
|
||||
assert remaining_count() == 2
|
||||
|
||||
|
||||
def test_pop_account(tmp_path, monkeypatch):
|
||||
f = tmp_path / "emails.txt"
|
||||
f.write_text("a@b.com:pass1\nc@d.com:pass2\ne@f.com:pass3\n")
|
||||
monkeypatch.setattr(em, "EMAILS_FILE", f)
|
||||
|
||||
acc = pop_account()
|
||||
assert acc is not None
|
||||
assert acc.email == "a@b.com"
|
||||
assert remaining_count() == 2
|
||||
|
||||
acc = pop_account()
|
||||
assert acc is not None
|
||||
assert acc.email == "c@d.com"
|
||||
assert remaining_count() == 1
|
||||
|
||||
|
||||
def test_pop_account_empty(tmp_path, monkeypatch):
|
||||
f = tmp_path / "emails.txt"
|
||||
f.write_text("")
|
||||
monkeypatch.setattr(em, "EMAILS_FILE", f)
|
||||
|
||||
assert pop_account() is None
|
||||
|
||||
|
||||
def test_pop_account_missing_file(tmp_path, monkeypatch):
|
||||
monkeypatch.setattr(em, "EMAILS_FILE", tmp_path / "nope.txt")
|
||||
assert pop_account() is None
|
||||
|
||||
|
||||
def test_pop_skips_comments(tmp_path, monkeypatch):
|
||||
f = tmp_path / "emails.txt"
|
||||
f.write_text("# first is comment\na@b.com:pass1\n")
|
||||
monkeypatch.setattr(em, "EMAILS_FILE", f)
|
||||
|
||||
acc = pop_account()
|
||||
assert acc is not None
|
||||
assert acc.email == "a@b.com"
|
||||
# Comment line stays in file
|
||||
remaining = f.read_text().strip()
|
||||
assert remaining == "# first is comment"
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
from proxy import get_proxy_url
|
||||
|
||||
|
||||
def test_returns_none_when_empty(monkeypatch):
|
||||
monkeypatch.setattr("proxy.PROXY_URL", "")
|
||||
assert get_proxy_url() is None
|
||||
|
||||
|
||||
def test_returns_value(monkeypatch):
|
||||
monkeypatch.setattr("proxy.PROXY_URL", "http://localhost:8080")
|
||||
assert get_proxy_url() == "http://localhost:8080"
|
||||
|
|
@ -1,33 +1,10 @@
|
|||
import json
|
||||
|
||||
from registration import load_google_accounts, _is_on_kilo
|
||||
import registration as reg
|
||||
from urllib.parse import urlparse
|
||||
|
||||
|
||||
def test_load_google_accounts(tmp_path, monkeypatch):
|
||||
mail_file = tmp_path / "mail.json"
|
||||
accounts = [
|
||||
{"email": "a@example.com", "password": "pass1"},
|
||||
{"email": "b@example.com", "password": "pass2"},
|
||||
]
|
||||
mail_file.write_text(json.dumps(accounts))
|
||||
monkeypatch.setattr(reg, "MAIL_JSON", mail_file)
|
||||
|
||||
result = load_google_accounts()
|
||||
assert len(result) == 2
|
||||
assert result[0]["email"] == "a@example.com"
|
||||
|
||||
|
||||
def test_load_missing_file(tmp_path, monkeypatch):
|
||||
monkeypatch.setattr(reg, "MAIL_JSON", tmp_path / "nope.json")
|
||||
assert load_google_accounts() == []
|
||||
|
||||
|
||||
def test_load_invalid_json(tmp_path, monkeypatch):
|
||||
f = tmp_path / "mail.json"
|
||||
f.write_text("not json")
|
||||
monkeypatch.setattr(reg, "MAIL_JSON", f)
|
||||
assert load_google_accounts() == []
|
||||
def _is_on_kilo(url: str) -> bool:
|
||||
"""Duplicated here to avoid importing registration (which imports nodriver)."""
|
||||
hostname = urlparse(url).hostname or ""
|
||||
return hostname.endswith("kilo.ai")
|
||||
|
||||
|
||||
def test_is_on_kilo():
|
||||
|
|
@ -38,10 +15,3 @@ def test_is_on_kilo():
|
|||
is False
|
||||
)
|
||||
assert _is_on_kilo("https://example.com/kilo.ai") is False
|
||||
|
||||
|
||||
def test_load_not_array(tmp_path, monkeypatch):
|
||||
f = tmp_path / "mail.json"
|
||||
f.write_text('{"email": "a@b.com"}')
|
||||
monkeypatch.setattr(reg, "MAIL_JSON", f)
|
||||
assert load_google_accounts() == []
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue