Skip to content

Commit 24b9987

Browse files
committed
tests(asyncio): add dataclasses for session typing
1 parent 8022d2c commit 24b9987

File tree

1 file changed

+41
-15
lines changed

1 file changed

+41
-15
lines changed

tests/asyncio/test_session.py

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,33 @@
77
from __future__ import annotations
88

99
import logging
10+
from dataclasses import dataclass
1011
from typing import TYPE_CHECKING
1112

1213
import pytest
1314

1415
if TYPE_CHECKING:
1516
from libtmux.session import Session
1617

18+
19+
@dataclass(slots=True)
20+
class WindowInfo:
21+
"""Minimal window details fetched concurrently during tests."""
22+
23+
id: str
24+
name: str
25+
panes: int
26+
27+
28+
@dataclass(slots=True)
29+
class ProjectSessionStatus:
30+
"""Summary of session setup used for verification."""
31+
32+
session_id: str
33+
name: str
34+
window_count: int
35+
36+
1737
logger = logging.getLogger(__name__)
1838

1939

@@ -117,7 +137,7 @@ async def test_parallel_window_queries(session: Session) -> None:
117137
result = await session.acmd("list-windows", "-F#{window_id}")
118138
window_ids = result.stdout
119139

120-
async def get_window_info(window_id: str) -> dict[str, str]:
140+
async def get_window_info(window_id: str) -> WindowInfo:
121141
"""Get window name and pane count."""
122142
result = await session.acmd(
123143
"display-message",
@@ -128,20 +148,18 @@ async def get_window_info(window_id: str) -> dict[str, str]:
128148
)
129149
output = result.stdout[0]
130150
parts = output.split(":")
131-
return {
132-
"id": parts[0],
133-
"name": parts[1],
134-
"panes": parts[2],
135-
}
151+
return WindowInfo(id=parts[0], name=parts[1], panes=int(parts[2]))
136152

137153
# Query all windows concurrently
138-
window_infos = await asyncio.gather(*[get_window_info(wid) for wid in window_ids])
154+
window_infos: list[WindowInfo] = await asyncio.gather(
155+
*[get_window_info(wid) for wid in window_ids]
156+
)
139157

140158
# Verify all queries succeeded
141159
assert len(window_infos) >= 3
142160
for info in window_infos:
143-
assert info["id"].startswith("@")
144-
assert int(info["panes"]) >= 1
161+
assert info.id.startswith("@")
162+
assert info.panes >= 1
145163

146164

147165
# ============================================================================
@@ -167,12 +185,14 @@ async def test_anew_window_basic(session: Session) -> None:
167185

168186
# Verify window created with correct properties
169187
assert isinstance(window, Window)
170-
assert window.window_id.startswith("@")
188+
window_id = window.window_id
189+
assert window_id is not None
190+
assert window_id.startswith("@")
171191

172192
# Verify window was added to session
173193
result = await session.acmd("list-windows", "-F#{window_id}")
174194
assert len(result.stdout) == initial_count + 1
175-
assert window.window_id in result.stdout
195+
assert window_id in result.stdout
176196

177197

178198
@pytest.mark.asyncio
@@ -245,13 +265,16 @@ async def create_window(name: str) -> Window:
245265
assert all(isinstance(w, Window) for w in windows)
246266

247267
# Verify all have unique IDs
248-
window_ids = {w.window_id for w in windows}
268+
window_ids: set[str] = set()
269+
for window in windows:
270+
assert window.window_id is not None
271+
window_ids.add(window.window_id)
249272
assert len(window_ids) == 4
250273

251274
# Verify all exist in session
252275
result = await session.acmd("list-windows", "-F#{window_id}")
253-
for window in windows:
254-
assert window.window_id in result.stdout
276+
for window_id in window_ids:
277+
assert window_id in result.stdout
255278

256279

257280
# ============================================================================
@@ -268,6 +291,7 @@ async def test_arename_session(session: Session) -> None:
268291
"""
269292
# Get original name
270293
original_name = session.session_name
294+
assert original_name is not None
271295

272296
# Rename session
273297
new_name = "renamed_async_session"
@@ -278,7 +302,9 @@ async def test_arename_session(session: Session) -> None:
278302

279303
# Verify session was renamed
280304
session.refresh()
281-
assert session.session_name == new_name
305+
current_name = session.session_name
306+
assert current_name is not None
307+
assert current_name == new_name
282308

283309
# Verify old name is gone, new name exists
284310
assert not session.server.has_session(original_name)

0 commit comments

Comments
 (0)