Driver factory, click_link_by_text, search_for, fill_out_form, run_lecture and CLI, layered as domain, application, infrastructure and presentation. 30 offline unit tests, a form fixture, a Docker image for headless runs and four screenshots captured in Docker. Reviews RC-009 (code) and RC-010 (milestone wording of the screenshot criterion). Task: MIL-002#1
87 lines
2.4 KiB
Python
87 lines
2.4 KiB
Python
from pathlib import Path
|
|
|
|
from fill_out_form import constants
|
|
from fill_out_form.application.run_lecture import run_lecture
|
|
from fill_out_form.domain.form_data import FormData
|
|
from tests.unit.fakes import FakeBrowser
|
|
|
|
|
|
def test_run_lecture_visits_pages_in_order() -> None:
|
|
browser = FakeBrowser()
|
|
|
|
run_lecture(browser, form_url="https://form.test/", pause=lambda _: None)
|
|
|
|
urls = [e[1] for e in browser.events if e[0] == "get"]
|
|
assert urls == [
|
|
constants.WIKIPEDIA_URL,
|
|
constants.WIKIPEDIA_URL,
|
|
"https://form.test/",
|
|
]
|
|
|
|
|
|
def test_run_lecture_pauses_after_each_step() -> None:
|
|
browser = FakeBrowser()
|
|
pauses: list[float] = []
|
|
|
|
run_lecture(browser, pause=pauses.append)
|
|
|
|
assert pauses == [constants.PAUSE_SECONDS] * 3
|
|
|
|
|
|
def test_run_lecture_saves_screenshots_in_step_order(tmp_path: Path) -> None:
|
|
browser = FakeBrowser()
|
|
target = tmp_path / "nested" / "results"
|
|
|
|
run_lecture(browser, screenshot_dir=target, pause=lambda _: None)
|
|
|
|
assert target.is_dir()
|
|
assert browser.screenshots == [
|
|
str(target / name)
|
|
for name in (
|
|
constants.SCREENSHOT_STEP_1,
|
|
constants.SCREENSHOT_STEP_2,
|
|
constants.SCREENSHOT_STEP_3_FILLED,
|
|
constants.SCREENSHOT_STEP_3_SIGNED_UP,
|
|
)
|
|
]
|
|
|
|
|
|
def test_run_lecture_filled_screenshot_is_taken_before_sign_up_click(
|
|
tmp_path: Path,
|
|
) -> None:
|
|
browser = FakeBrowser()
|
|
|
|
run_lecture(browser, screenshot_dir=tmp_path, pause=lambda _: None)
|
|
|
|
names = [e[0] for e in browser.events]
|
|
filled = browser.events.index(
|
|
("save_screenshot", str(tmp_path / constants.SCREENSHOT_STEP_3_FILLED))
|
|
)
|
|
click = names.index("click", filled)
|
|
assert names[filled] == "save_screenshot"
|
|
assert browser.events[click][1] == (
|
|
constants.BY_CSS_SELECTOR,
|
|
constants.SIGN_UP_BUTTON_SELECTOR,
|
|
)
|
|
|
|
|
|
def test_run_lecture_types_given_form_data() -> None:
|
|
browser = FakeBrowser()
|
|
|
|
run_lecture(
|
|
browser,
|
|
pause=lambda _: None,
|
|
form_data=FormData("Ada", "Lovelace", "ada@example.test"),
|
|
)
|
|
|
|
typed = [e[2][0] for e in browser.events if e[0] == "send_keys"][-3:]
|
|
assert typed == ["Ada", "Lovelace", "ada@example.test"]
|
|
|
|
|
|
def test_run_lecture_without_directory_takes_no_screenshots() -> None:
|
|
browser = FakeBrowser()
|
|
|
|
run_lecture(browser, pause=lambda _: None)
|
|
|
|
assert browser.screenshots == []
|