@@ -112,13 +112,62 @@ async def test_state_lookup(mock_write_object_stream, mock_client):
112112
113113
114114@pytest .mark .asyncio
115- async def test_unimplemented_methods_raise_error (mock_client ):
116- """Test that all currently unimplemented methods raise NotImplementedError."""
115+ @mock .patch (
116+ "google.cloud.storage._experimental.asyncio.async_appendable_object_writer._AsyncWriteObjectStream"
117+ )
118+ async def test_open_appendable_object_writer (mock_write_object_stream , mock_client ):
119+ """Test the open method."""
120+ # Arrange
117121 writer = AsyncAppendableObjectWriter (mock_client , BUCKET , OBJECT )
122+ mock_stream = mock_write_object_stream .return_value
123+ mock_stream .open = mock .AsyncMock ()
124+ mock_stream .send = mock .AsyncMock ()
125+ mock_stream .recv = mock .AsyncMock ()
118126
119- with pytest .raises (NotImplementedError ):
127+ mock_state_response = mock .MagicMock ()
128+ mock_state_response .persisted_size = 1024
129+ mock_stream .recv .return_value = mock_state_response
130+
131+ mock_stream .generation_number = GENERATION
132+ mock_stream .write_handle = WRITE_HANDLE
133+
134+ # Act
135+ await writer .open ()
136+
137+ # Assert
138+ mock_stream .open .assert_awaited_once ()
139+ assert writer ._is_stream_open
140+ assert writer .generation == GENERATION
141+ assert writer .write_handle == WRITE_HANDLE
142+
143+ expected_request = _storage_v2 .BidiWriteObjectRequest (state_lookup = True )
144+ mock_stream .send .assert_awaited_once_with (expected_request )
145+ mock_stream .recv .assert_awaited_once ()
146+ assert writer .persisted_size == 1024
147+
148+
149+ @pytest .mark .asyncio
150+ @mock .patch (
151+ "google.cloud.storage._experimental.asyncio.async_appendable_object_writer._AsyncWriteObjectStream"
152+ )
153+ async def test_open_when_already_open_raises_error (
154+ mock_write_object_stream , mock_client
155+ ):
156+ """Test that opening an already open writer raises a ValueError."""
157+ # Arrange
158+ writer = AsyncAppendableObjectWriter (mock_client , BUCKET , OBJECT )
159+ writer ._is_stream_open = True # Manually set to open
160+
161+ # Act & Assert
162+ with pytest .raises (ValueError , match = "Underlying bidi-gRPC stream is already open" ):
120163 await writer .open ()
121164
165+
166+ @pytest .mark .asyncio
167+ async def test_unimplemented_methods_raise_error (mock_client ):
168+ """Test that all currently unimplemented methods raise NotImplementedError."""
169+ writer = AsyncAppendableObjectWriter (mock_client , BUCKET , OBJECT )
170+
122171 with pytest .raises (NotImplementedError ):
123172 await writer .append (b"data" )
124173
0 commit comments