Skip to content

Commit 6210ce6

Browse files
committed
test: replace multiple mocked collision tests with real tmux objects
1 parent e295aa3 commit 6210ce6

File tree

1 file changed

+68
-88
lines changed

1 file changed

+68
-88
lines changed

tests/test/test_random.py

Lines changed: 68 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -128,49 +128,6 @@ def test_get_test_session_name_custom_prefix(server: Server) -> None:
128128
assert not server.has_session(result)
129129

130130

131-
def test_get_test_session_name_collision(
132-
server: Server,
133-
monkeypatch: pytest.MonkeyPatch,
134-
) -> None:
135-
"""Test get_test_session_name when first attempts collide."""
136-
collision_name = TEST_SESSION_PREFIX + "collision"
137-
success_name = TEST_SESSION_PREFIX + "success"
138-
name_iter = iter(["collision", "success"])
139-
140-
def mock_next(self: t.Any) -> str:
141-
return next(name_iter)
142-
143-
monkeypatch.setattr(RandomStrSequence, "__next__", mock_next)
144-
145-
# Create a session that will cause a collision
146-
with server.new_session(collision_name):
147-
result = get_test_session_name(server=server)
148-
assert result == success_name
149-
assert not server.has_session(result)
150-
151-
152-
def test_get_test_session_name_multiple_collisions(
153-
server: Server,
154-
monkeypatch: pytest.MonkeyPatch,
155-
) -> None:
156-
"""Test get_test_session_name with multiple collisions."""
157-
names = ["collision1", "collision2", "success"]
158-
collision_names = [TEST_SESSION_PREFIX + name for name in names[:-1]]
159-
success_name = TEST_SESSION_PREFIX + names[-1]
160-
name_iter = iter(names)
161-
162-
def mock_next(self: t.Any) -> str:
163-
return next(name_iter)
164-
165-
monkeypatch.setattr(RandomStrSequence, "__next__", mock_next)
166-
167-
# Create sessions that will cause collisions
168-
with server.new_session(collision_names[0]), server.new_session(collision_names[1]):
169-
result = get_test_session_name(server=server)
170-
assert result == success_name
171-
assert not server.has_session(result)
172-
173-
174131
def test_get_test_session_name_loop_behavior(
175132
server: Server,
176133
) -> None:
@@ -244,51 +201,6 @@ def test_get_test_window_name_custom_prefix(session: Session) -> None:
244201
assert not any(w.window_name == result for w in session.windows)
245202

246203

247-
def test_get_test_window_name_collision(
248-
session: Session,
249-
monkeypatch: pytest.MonkeyPatch,
250-
) -> None:
251-
"""Test get_test_window_name when first attempts collide."""
252-
collision_name = TEST_SESSION_PREFIX + "collision"
253-
success_name = TEST_SESSION_PREFIX + "success"
254-
name_iter = iter(["collision", "success"])
255-
256-
def mock_next(self: t.Any) -> str:
257-
return next(name_iter)
258-
259-
monkeypatch.setattr(RandomStrSequence, "__next__", mock_next)
260-
261-
# Create a window that will cause a collision
262-
session.new_window(window_name=collision_name)
263-
result = get_test_window_name(session=session)
264-
assert result == success_name
265-
assert not any(w.window_name == result for w in session.windows)
266-
267-
268-
def test_get_test_window_name_multiple_collisions(
269-
session: Session,
270-
monkeypatch: pytest.MonkeyPatch,
271-
) -> None:
272-
"""Test get_test_window_name with multiple collisions."""
273-
names = ["collision1", "collision2", "success"]
274-
collision_names = [TEST_SESSION_PREFIX + name for name in names[:-1]]
275-
success_name = TEST_SESSION_PREFIX + names[-1]
276-
name_iter = iter(names)
277-
278-
def mock_next(self: t.Any) -> str:
279-
return next(name_iter)
280-
281-
monkeypatch.setattr(RandomStrSequence, "__next__", mock_next)
282-
283-
# Create windows that will cause collisions
284-
for name in collision_names:
285-
session.new_window(window_name=name)
286-
287-
result = get_test_window_name(session=session)
288-
assert result == success_name
289-
assert not any(w.window_name == result for w in session.windows)
290-
291-
292204
def test_get_test_window_name_loop_behavior(
293205
session: Session,
294206
) -> None:
@@ -435,3 +347,71 @@ def test_random_str_sequence_iter_next_methods() -> None:
435347

436348
# Verify all results are unique
437349
assert len(set(results)) == len(results)
350+
351+
352+
def test_collisions_with_real_objects(
353+
server: Server,
354+
session: Session,
355+
) -> None:
356+
"""Test collision behavior using real tmux objects instead of mocks.
357+
358+
This test replaces multiple monkeypatched tests:
359+
- test_get_test_session_name_collision
360+
- test_get_test_session_name_multiple_collisions
361+
- test_get_test_window_name_collision
362+
- test_get_test_window_name_multiple_collisions
363+
364+
Instead of mocking the random generator, we create real sessions and
365+
windows with predictable names and verify the uniqueness logic.
366+
"""
367+
# Test session name collisions
368+
# ----------------------------
369+
# Create a known prefix for testing
370+
prefix = "test_collision_"
371+
372+
# Create several sessions with predictable names
373+
session_name1 = prefix + "session1"
374+
session_name2 = prefix + "session2"
375+
376+
# Create a couple of actual sessions to force collisions
377+
with server.new_session(session_name1), server.new_session(session_name2):
378+
# Verify our sessions exist
379+
assert server.has_session(session_name1)
380+
assert server.has_session(session_name2)
381+
382+
# When requesting a session name with same prefix, we should get a unique name
383+
# that doesn't match either existing session
384+
result = get_test_session_name(server=server, prefix=prefix)
385+
assert result.startswith(prefix)
386+
assert result != session_name1
387+
assert result != session_name2
388+
assert not server.has_session(result)
389+
390+
# Test window name collisions
391+
# --------------------------
392+
# Create windows with predictable names
393+
window_name1 = prefix + "window1"
394+
window_name2 = prefix + "window2"
395+
396+
# Create actual windows to force collisions
397+
window1 = session.new_window(window_name=window_name1)
398+
window2 = session.new_window(window_name=window_name2)
399+
400+
try:
401+
# Verify our windows exist
402+
assert any(w.window_name == window_name1 for w in session.windows)
403+
assert any(w.window_name == window_name2 for w in session.windows)
404+
405+
# When requesting a window name with same prefix, we should get a unique name
406+
# that doesn't match either existing window
407+
result = get_test_window_name(session=session, prefix=prefix)
408+
assert result.startswith(prefix)
409+
assert result != window_name1
410+
assert result != window_name2
411+
assert not any(w.window_name == result for w in session.windows)
412+
finally:
413+
# Clean up the windows we created
414+
if window1:
415+
window1.kill()
416+
if window2:
417+
window2.kill()

0 commit comments

Comments
 (0)