test(trip-cluster): Playwright UI — grid nav, lightbox, cluster switching, approve
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import io
|
||||
import os
|
||||
import threading
|
||||
import time
|
||||
|
||||
import pytest
|
||||
from PIL import Image
|
||||
from werkzeug.serving import make_server
|
||||
|
||||
from app import create_app
|
||||
from app.config import Config
|
||||
from photoflow.core import Store
|
||||
from photoflow.core.models import Asset, Cluster, ClusterMember
|
||||
|
||||
|
||||
def _jpeg(color):
|
||||
buf = io.BytesIO()
|
||||
Image.new("RGB", (48, 48), color).save(buf, format="JPEG")
|
||||
return buf.getvalue()
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def data_dir(tmp_path_factory):
|
||||
d = str(tmp_path_factory.mktemp("data"))
|
||||
thumbs = os.path.join(d, "thumbs")
|
||||
os.makedirs(thumbs, exist_ok=True)
|
||||
s = Store(os.path.join(d, "trip-cluster.db")).connect()
|
||||
palette = {"a": (10, 20, 30), "b": (40, 80, 120), "c": (200, 50, 90)}
|
||||
for i, t in [("a", "2019-06-01"), ("b", "2019-06-02"), ("c", "2019-07-10")]:
|
||||
s.upsert_asset(Asset(immich_id=i, taken_at=t))
|
||||
with open(os.path.join(thumbs, f"{i}.jpg"), "wb") as f:
|
||||
f.write(_jpeg(palette[i]))
|
||||
s.insert_cluster(
|
||||
Cluster(start_at="2019-06-01", end_at="2019-06-02", suggested_name="Venice",
|
||||
confidence=0.9, kind_guess="trip", status="pending"),
|
||||
[ClusterMember(cluster_id=0, immich_id="a"),
|
||||
ClusterMember(cluster_id=0, immich_id="b")])
|
||||
s.insert_cluster(
|
||||
Cluster(start_at="2019-07-10", end_at="2019-07-10", suggested_name="Rome",
|
||||
confidence=0.3, kind_guess="trip", status="pending"),
|
||||
[ClusterMember(cluster_id=0, immich_id="c")])
|
||||
s.close()
|
||||
return d
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def flask_app(data_dir):
|
||||
cfg = Config(immich_url="http://127.0.0.1:1", immich_api_key="k",
|
||||
anthropic_api_key="", data_dir=data_dir)
|
||||
return create_app(cfg)
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def base_url(flask_app):
|
||||
server = make_server("127.0.0.1", 8095, flask_app)
|
||||
t = threading.Thread(target=server.serve_forever, daemon=True)
|
||||
t.start()
|
||||
time.sleep(0.2)
|
||||
yield "http://127.0.0.1:8095"
|
||||
server.shutdown()
|
||||
Reference in New Issue
Block a user