aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/tests/test_photo_sync_ui.py
blob: bd512c151ee24b3e9b4a9f654c3aecad7940258f (plain) (blame)
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
"""
The photo backup section in Settings, measured in Chrome at phone widths
(harness/photo_sync_probe.py). Android's WebView is the only engine that ever
shows it.

A group, a folder or an album is named by somebody else and often has no space
in it; one such name made a 360px page 634px wide before `.settings-name`, and
a page wider than the screen takes every pinned header with it (CLAUDE.md).
"""

import json
import shutil
import subprocess
import sys
from pathlib import Path

import pytest

PROBE = Path(__file__).parent / "harness" / "photo_sync_probe.py"


@pytest.fixture(scope="module")
def probe():
    if shutil.which("google-chrome") is None:
        pytest.skip("chrome is not available")
    proc = subprocess.run([sys.executable, str(PROBE)], capture_output=True, text=True,
                          timeout=240)
    assert proc.returncode == 0, f"probe failed: {proc.stdout}{proc.stderr}"
    return json.loads(proc.stdout)


def test_it_renders_without_an_error(probe):
    for state, r in probe.items():
        assert r["err"] == "", f"{state}: {r['err']}"
        assert r["text"].strip(), f"{state}: nothing was drawn"


def test_no_name_widens_the_page_on_a_phone(probe):
    for state, r in probe.items():
        assert r["scrollW"] <= r["vw"], (
            f"{state}: {r['scrollW']}px of page in a {r['vw']}px window — {r['wide']}")


def test_the_camera_and_the_photos_already_there_are_the_defaults(probe):
    for state in ("setup360", "partial360"):
        assert probe[state]["checked"] == [
            "Camera", "The photos already on this phone, then new ones"], probe[state]["checked"]


def test_a_refusal_is_said_where_the_backup_is(probe):
    assert "the node's disk is full" in probe["configured360"]["text"]


def test_limited_access_is_said_rather_than_failing_quietly(probe):
    assert "Access is limited to the photos you selected" in probe["partial360"]["text"]