77from slack_sdk .models .blocks .basic_components import FeedbackButtonObject
88from slack_sdk .models .blocks .block_elements import FeedbackButtonsElement , IconButtonElement
99from slack_sdk .models .blocks .blocks import ContextActionsBlock
10+ from slack_sdk .models .messages .chunk import MarkdownTextChunk , TaskUpdateChunk
1011from tests .mock_web_api_server import cleanup_mock_web_api_server , setup_mock_web_api_server
1112from tests .slack_sdk .web .mock_web_api_handler import MockHandler
1213
@@ -105,7 +106,7 @@ def test_streams_a_short_message(self):
105106 stop_request = self .thread .server .chat_stream_requests .get ("/chat.stopStream" , {})
106107 self .assertEqual (stop_request .get ("channel" ), "C0123456789" )
107108 self .assertEqual (stop_request .get ("ts" ), "123.123" )
108- self .assertEqual (stop_request .get ("markdown_text " ), " nice!" )
109+ self .assertEqual (stop_request .get ("chunks " ), [{ "type" : "markdown_text" , "text" : " nice!"}] )
109110
110111 def test_streams_a_long_message (self ):
111112 streamer = self .client .chat_stream (
@@ -146,13 +147,13 @@ def test_streams_a_long_message(self):
146147 start_request = self .thread .server .chat_stream_requests .get ("/chat.startStream" , {})
147148 self .assertEqual (start_request .get ("channel" ), "C0123456789" )
148149 self .assertEqual (start_request .get ("thread_ts" ), "123.000" )
149- self .assertEqual (start_request .get ("markdown_text " ), " **this messag" )
150+ self .assertEqual (start_request .get ("chunks " ), [{ "type" : "markdown_text" , "text" : " **this messag"}] )
150151 self .assertEqual (start_request .get ("recipient_team_id" ), "T0123456789" )
151152 self .assertEqual (start_request .get ("recipient_user_id" ), "U0123456789" )
152153
153154 append_request = self .thread .server .chat_stream_requests .get ("/chat.appendStream" , {})
154155 self .assertEqual (append_request .get ("channel" ), "C0123456789" )
155- self .assertEqual (append_request .get ("markdown_text " ), " e is bold!" )
156+ self .assertEqual (append_request .get ("chunks " ), [{ "type" : "markdown_text" , "text" : " e is bold!"}] )
156157 self .assertEqual (append_request .get ("token" ), "xoxb-chat_stream_test_token1" )
157158 self .assertEqual (append_request .get ("ts" ), "123.123" )
158159
@@ -162,10 +163,71 @@ def test_streams_a_long_message(self):
162163 '[{"elements": [{"negative_button": {"text": {"emoji": true, "text": "bad", "type": "plain_text"}, "value": "-1"}, "positive_button": {"text": {"emoji": true, "text": "good", "type": "plain_text"}, "value": "+1"}, "type": "feedback_buttons"}, {"icon": "trash", "text": {"emoji": true, "text": "delete", "type": "plain_text"}, "type": "icon_button"}], "type": "context_actions"}]' ,
163164 )
164165 self .assertEqual (stop_request .get ("channel" ), "C0123456789" )
165- self .assertEqual (stop_request .get ("markdown_text " ), " **" )
166+ self .assertEqual (stop_request .get ("chunks " ), [{ "type" : "markdown_text" , "text" : " **"}] )
166167 self .assertEqual (stop_request .get ("token" ), "xoxb-chat_stream_test_token2" )
167168 self .assertEqual (stop_request .get ("ts" ), "123.123" )
168169
170+ def test_streams_a_chunk_message (self ):
171+ streamer = self .client .chat_stream (
172+ channel = "C0123456789" ,
173+ recipient_team_id = "T0123456789" ,
174+ recipient_user_id = "U0123456789" ,
175+ thread_ts = "123.000" ,
176+ )
177+ streamer .append (markdown_text = "**this is " )
178+ streamer .append (markdown_text = "buffered**" )
179+ streamer .append (
180+ chunks = [
181+ TaskUpdateChunk (
182+ id = "001" ,
183+ title = "Counting..." ,
184+ status = "pending" ,
185+ ),
186+ ],
187+ )
188+ streamer .append (
189+ chunks = [
190+ MarkdownTextChunk (text = "**this is unbuffered**" ),
191+ ],
192+ )
193+ streamer .append (markdown_text = "\n " )
194+ streamer .stop (
195+ chunks = [
196+ MarkdownTextChunk (text = ":space_invader:" ),
197+ ],
198+ )
199+
200+ self .assertEqual (self .received_requests .get ("/chat.startStream" , 0 ), 1 )
201+ self .assertEqual (self .received_requests .get ("/chat.appendStream" , 0 ), 1 )
202+ self .assertEqual (self .received_requests .get ("/chat.stopStream" , 0 ), 1 )
203+
204+ if hasattr (self .thread .server , "chat_stream_requests" ):
205+ start_request = self .thread .server .chat_stream_requests .get ("/chat.startStream" , {})
206+ self .assertEqual (start_request .get ("channel" ), "C0123456789" )
207+ self .assertEqual (start_request .get ("thread_ts" ), "123.000" )
208+ self .assertEqual (
209+ json .dumps (start_request .get ("chunks" )),
210+ '[{"type": "markdown_text", "text": "**this is buffered**"}, {"id": "001", "status": "pending", "title": "Counting...", "type": "task_update"}]' ,
211+ )
212+ self .assertEqual (start_request .get ("recipient_team_id" ), "T0123456789" )
213+ self .assertEqual (start_request .get ("recipient_user_id" ), "U0123456789" )
214+
215+ append_request = self .thread .server .chat_stream_requests .get ("/chat.appendStream" , {})
216+ self .assertEqual (append_request .get ("channel" ), "C0123456789" )
217+ self .assertEqual (append_request .get ("ts" ), "123.123" )
218+ self .assertEqual (
219+ json .dumps (append_request .get ("chunks" )),
220+ '[{"text": "**this is unbuffered**", "type": "markdown_text"}]' ,
221+ )
222+
223+ stop_request = self .thread .server .chat_stream_requests .get ("/chat.stopStream" , {})
224+ self .assertEqual (stop_request .get ("channel" ), "C0123456789" )
225+ self .assertEqual (stop_request .get ("ts" ), "123.123" )
226+ self .assertEqual (
227+ json .dumps (stop_request .get ("chunks" )),
228+ '[{"type": "markdown_text", "text": "\\ n"}, {"text": ":space_invader:", "type": "markdown_text"}]' ,
229+ )
230+
169231 def test_streams_errors_when_appending_to_an_unstarted_stream (self ):
170232 streamer = self .client .chat_stream (
171233 channel = "C0123456789" ,
0 commit comments