1+ import pytest
2+ from iop ._generator_request import _GeneratorRequest
3+ from iop import PydanticMessage
4+ from unittest .mock import Mock , patch
5+
6+ def test_generator_request_initialization ():
7+ # Mock host and request
8+ mock_host = Mock ()
9+ mock_request = PydanticMessage ()
10+
11+ # Set up mock response for send_request_sync
12+ mock_ack = Mock ()
13+ mock_ack ._IsA .return_value = True
14+ mock_host .send_request_sync .return_value = mock_ack
15+
16+ # Test successful initialization
17+ generator = _GeneratorRequest (mock_host , "test_target" , mock_request )
18+ assert generator .host == mock_host
19+ assert generator .target == "test_target"
20+ assert generator .request == mock_request
21+
22+ # Verify send_request_sync was called correctly
23+ mock_host .send_request_sync .assert_called_once ()
24+
25+ def test_generator_request_failed_initialization ():
26+ # Mock host and request
27+ mock_host = Mock ()
28+ mock_request = PydanticMessage ()
29+
30+ # Set up mock response for send_request_sync to fail
31+ mock_host .send_request_sync .return_value = None
32+
33+ # Test failed initialization
34+ with pytest .raises (RuntimeError , match = "Failed to send request, no acknowledgment received." ):
35+ _GeneratorRequest (mock_host , "test_target" , mock_request )
36+
37+ def test_generator_request_iteration ():
38+ # Mock host and request
39+ mock_host = Mock ()
40+ mock_request = PydanticMessage ()
41+
42+ # Set up mock responses for all calls: initialization, iteration, and stop
43+ mock_ack = Mock ()
44+ mock_ack ._IsA .return_value = True
45+ mock_response = Mock ()
46+ mock_response ._IsA .return_value = False
47+ mock_stop = Mock ()
48+ mock_stop ._IsA .return_value = True
49+
50+ # Configure mock to return ack for init, regular response, then stop message
51+ mock_host .send_request_sync .side_effect = [mock_ack , mock_response , mock_stop ]
52+
53+ # Create generator
54+ generator = _GeneratorRequest (mock_host , "test_target" , mock_request )
55+
56+ # Test iteration
57+ responses = list (generator )
58+ assert len (responses ) == 1
59+ assert responses [0 ] == mock_response
60+
61+ def test_generator_request_none_response ():
62+ # Mock host and request
63+ mock_host = Mock ()
64+ mock_request = PydanticMessage ()
65+
66+ # Set up mock response for initialization
67+ mock_ack = Mock ()
68+ mock_ack ._IsA .return_value = True
69+ mock_host .send_request_sync .return_value = mock_ack
70+
71+ # Create generator
72+ generator = _GeneratorRequest (mock_host , "test_target" , mock_request )
73+
74+ # Set up mock to return None for iteration
75+ mock_host .send_request_sync .side_effect = [None ]
76+
77+ # Test iteration should stop on None response
78+ responses = list (generator )
79+ assert len (responses ) == 0
0 commit comments