1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
"""
A group link, opened in the real application (harness/group_link_probe.py).
`test_group_link.py` holds the parsing and the lookups; this is where they meet
the router. A handle opens the group's page, and an id opens it with the handle
in the address; a path waits in the address for the index to say what it is; a
handle the account does not know is said to be unknown without the hub ever
being asked about it; and signed out, the sign-in form stands in for the page
with the address left alone, which is what lets signing in land there.
"""
import json
import shutil
import subprocess
import sys
from pathlib import Path
import pytest
HARNESS = Path(__file__).parent / "harness" / "group_link_probe.py"
GROUP_HREF = "#/group/0f8fad5b-d9cb-469f-a165-70867728950e"
FILE_LINK = "#/demo@someowner/backup/city_2015/backup/IMG_0001.JPG"
@pytest.fixture(scope="module")
def cases():
if shutil.which("google-chrome") is None:
pytest.skip("Chrome is not available")
proc = subprocess.run([sys.executable, str(HARNESS)],
capture_output=True, text=True, timeout=240)
assert proc.returncode == 0, f"probe failed: {proc.stdout}{proc.stderr}"
out = {c["case"]: c for c in json.loads(proc.stdout)}
for c in out.values():
assert "error" not in c, c["error"]
return out
@pytest.mark.parametrize("case", ["handle", "uuid", "file"])
def test_a_handle_or_an_id_opens_the_group(cases, case):
c = cases[case]
assert c["group_page"] and c["group_title"] == "demo@someowner"
# Of two groups called "demo", the one whose owner the handle names.
assert c["active_sidebar"] == [GROUP_HREF]
@pytest.mark.parametrize("case", ["handle", "uuid"])
def test_the_address_shows_the_handle_without_a_history_entry(cases, case):
assert cases[case]["hash"] == "#/demo@someowner"
assert cases[case]["history_length"] == 1
def test_a_path_stays_in_the_address_until_it_has_been_acted_on(cases):
assert cases["file"]["hash"] == FILE_LINK
def test_an_unknown_handle_is_said_so_without_asking_the_hub(cases):
c = cases["unknown"]
assert not c["group_page"] and c["message"] and not c["spinner"]
assert c["hash"] == "#/demo@stranger1"
for case in cases.values():
assert not any("stranger1" in u or "@" in u for u in case["hub_calls"])
def test_signed_out_the_form_stands_in_for_the_page(cases):
c = cases["signed_out"]
assert c["login_form"] and not c["group_page"]
assert c["hash"] == FILE_LINK
|