diff --git a/muxplex/main.py b/muxplex/main.py index 43b0ce9..a9e18f4 100644 --- a/muxplex/main.py +++ b/muxplex/main.py @@ -423,6 +423,7 @@ class StatePatch(BaseModel): session_order: list[str] | None = None active_session: str | None = None active_remote_id: str | None = None + active_view: str | None = None class HeartbeatPayload(BaseModel): @@ -495,6 +496,8 @@ async def patch_state(patch: StatePatch) -> dict: state["active_session"] = patch.active_session if "active_remote_id" in changed: state["active_remote_id"] = patch.active_remote_id + if "active_view" in changed: + state["active_view"] = patch.active_view save_state(state) return state diff --git a/muxplex/tests/test_api.py b/muxplex/tests/test_api.py index 2de62a3..b991cf0 100644 --- a/muxplex/tests/test_api.py +++ b/muxplex/tests/test_api.py @@ -227,6 +227,39 @@ def test_patch_state_ignores_unknown_fields(client): assert data["session_order"] == ["a", "b"] +def test_patch_state_sets_active_view(client): + """PATCH /api/state with active_view persists the value. + + Verifies response contains active_view and subsequent GET returns the value. + """ + from muxplex.state import load_state + + # PATCH with a specific active_view value + response = client.patch("/api/state", json={"active_view": "my-view"}) + assert response.status_code == 200 + data = response.json() + assert data["active_view"] == "my-view" + + # Verify the value persists via GET + get_response = client.get("/api/state") + assert get_response.status_code == 200 + get_data = get_response.json() + assert get_data["active_view"] == "my-view" + + # Also verify it was persisted to disk + persisted = load_state() + assert persisted["active_view"] == "my-view" + + +def test_patch_state_active_view_defaults_to_all(client): + """GET /api/state returns active_view='all' by default.""" + response = client.get("/api/state") + assert response.status_code == 200 + data = response.json() + assert "active_view" in data + assert data["active_view"] == "all" + + # --------------------------------------------------------------------------- # GET /api/sessions # ---------------------------------------------------------------------------