test: cover config create flows
This commit is contained in:
105
tests/test_configure_create.py
Normal file
105
tests/test_configure_create.py
Normal file
@@ -0,0 +1,105 @@
|
||||
from pathlib import Path
|
||||
|
||||
import yaml
|
||||
|
||||
from skywipe.configure import Configuration
|
||||
|
||||
|
||||
def test_configuration_create_reprompts_and_writes_file(monkeypatch, tmp_path, user_input):
|
||||
inputs = iter([
|
||||
"bad handle",
|
||||
"alice.bsky.social",
|
||||
"5",
|
||||
"0",
|
||||
"n",
|
||||
])
|
||||
passwords = iter([
|
||||
"short",
|
||||
"longenough",
|
||||
])
|
||||
|
||||
monkeypatch.setattr(Path, "home", lambda: tmp_path)
|
||||
user_input(inputs, passwords)
|
||||
|
||||
config = Configuration()
|
||||
config.create()
|
||||
|
||||
assert config.config_file.exists() is True
|
||||
data = yaml.safe_load(config.config_file.read_text())
|
||||
assert data["handle"] == "alice.bsky.social"
|
||||
assert data["password"] == "longenough"
|
||||
assert data["batch_size"] == 5
|
||||
assert data["delay"] == 0
|
||||
assert data["verbose"] is False
|
||||
|
||||
|
||||
def test_configuration_create_invalid_batch_size(monkeypatch, tmp_path, user_input):
|
||||
inputs = iter([
|
||||
"alice.bsky.social",
|
||||
"0",
|
||||
"1",
|
||||
"y",
|
||||
])
|
||||
passwords = iter(["longenough"])
|
||||
|
||||
monkeypatch.setattr(Path, "home", lambda: tmp_path)
|
||||
user_input(inputs, passwords)
|
||||
|
||||
config = Configuration()
|
||||
config.create()
|
||||
|
||||
assert config.config_file.exists() is False
|
||||
|
||||
|
||||
def test_configuration_create_invalid_delay(monkeypatch, tmp_path, user_input):
|
||||
inputs = iter([
|
||||
"alice.bsky.social",
|
||||
"10",
|
||||
"61",
|
||||
"y",
|
||||
])
|
||||
passwords = iter(["longenough"])
|
||||
|
||||
monkeypatch.setattr(Path, "home", lambda: tmp_path)
|
||||
user_input(inputs, passwords)
|
||||
|
||||
config = Configuration()
|
||||
config.create()
|
||||
|
||||
assert config.config_file.exists() is False
|
||||
|
||||
|
||||
def test_configuration_create_overwrite_cancel(monkeypatch, tmp_path, user_input):
|
||||
monkeypatch.setattr(Path, "home", lambda: tmp_path)
|
||||
config = Configuration()
|
||||
config.config_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
config.config_file.write_text("existing")
|
||||
|
||||
user_input(["n"], [])
|
||||
|
||||
config.create()
|
||||
|
||||
assert config.config_file.read_text() == "existing"
|
||||
|
||||
|
||||
def test_configuration_create_write_failure(monkeypatch, tmp_path, user_input):
|
||||
monkeypatch.setattr(Path, "home", lambda: tmp_path)
|
||||
user_input(
|
||||
["alice.bsky.social", "5", "0", "y"],
|
||||
["longenough"],
|
||||
)
|
||||
|
||||
config = Configuration()
|
||||
|
||||
original_open = open
|
||||
|
||||
def fake_open(path, mode="r", *args, **kwargs):
|
||||
if Path(path) == config.config_file and "w" in mode:
|
||||
raise OSError("disk full")
|
||||
return original_open(path, mode, *args, **kwargs)
|
||||
|
||||
monkeypatch.setattr("builtins.open", fake_open)
|
||||
|
||||
config.create()
|
||||
|
||||
assert config.config_file.exists() is False
|
||||
Reference in New Issue
Block a user