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,10 @@ 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 (
110+ json .dumps (stop_request .get ("chunks" )),
111+ '[{"text": "nice!", "type": "markdown_text"}]' ,
112+ )
109113
110114 def test_streams_a_long_message (self ):
111115 streamer = self .client .chat_stream (
@@ -146,13 +150,19 @@ def test_streams_a_long_message(self):
146150 start_request = self .thread .server .chat_stream_requests .get ("/chat.startStream" , {})
147151 self .assertEqual (start_request .get ("channel" ), "C0123456789" )
148152 self .assertEqual (start_request .get ("thread_ts" ), "123.000" )
149- self .assertEqual (start_request .get ("markdown_text" ), "**this messag" )
153+ self .assertEqual (
154+ json .dumps (start_request .get ("chunks" )),
155+ '[{"text": "**this messag", "type": "markdown_text"}]' ,
156+ )
150157 self .assertEqual (start_request .get ("recipient_team_id" ), "T0123456789" )
151158 self .assertEqual (start_request .get ("recipient_user_id" ), "U0123456789" )
152159
153160 append_request = self .thread .server .chat_stream_requests .get ("/chat.appendStream" , {})
154161 self .assertEqual (append_request .get ("channel" ), "C0123456789" )
155- self .assertEqual (append_request .get ("markdown_text" ), "e is bold!" )
162+ self .assertEqual (
163+ json .dumps (append_request .get ("chunks" )),
164+ '[{"text": "e is bold!", "type": "markdown_text"}]' ,
165+ )
156166 self .assertEqual (append_request .get ("token" ), "xoxb-chat_stream_test_token1" )
157167 self .assertEqual (append_request .get ("ts" ), "123.123" )
158168
@@ -162,10 +172,74 @@ def test_streams_a_long_message(self):
162172 '[{"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"}]' ,
163173 )
164174 self .assertEqual (stop_request .get ("channel" ), "C0123456789" )
165- self .assertEqual (stop_request .get ("markdown_text" ), "**" )
175+ self .assertEqual (
176+ json .dumps (stop_request .get ("chunks" )),
177+ '[{"text": "**", "type": "markdown_text"}]' ,
178+ )
166179 self .assertEqual (stop_request .get ("token" ), "xoxb-chat_stream_test_token2" )
167180 self .assertEqual (stop_request .get ("ts" ), "123.123" )
168181
182+ def test_streams_a_chunk_message (self ):
183+ streamer = self .client .chat_stream (
184+ channel = "C0123456789" ,
185+ recipient_team_id = "T0123456789" ,
186+ recipient_user_id = "U0123456789" ,
187+ thread_ts = "123.000" ,
188+ )
189+ streamer .append (markdown_text = "**this is " )
190+ streamer .append (markdown_text = "buffered**" )
191+ streamer .append (
192+ chunks = [
193+ TaskUpdateChunk (
194+ id = "001" ,
195+ title = "Counting..." ,
196+ status = "pending" ,
197+ ),
198+ ],
199+ )
200+ streamer .append (
201+ chunks = [
202+ MarkdownTextChunk (text = "**this is unbuffered**" ),
203+ ],
204+ )
205+ streamer .append (markdown_text = "\n " )
206+ streamer .stop (
207+ chunks = [
208+ MarkdownTextChunk (text = ":space_invader:" ),
209+ ],
210+ )
211+
212+ self .assertEqual (self .received_requests .get ("/chat.startStream" , 0 ), 1 )
213+ self .assertEqual (self .received_requests .get ("/chat.appendStream" , 0 ), 1 )
214+ self .assertEqual (self .received_requests .get ("/chat.stopStream" , 0 ), 1 )
215+
216+ if hasattr (self .thread .server , "chat_stream_requests" ):
217+ start_request = self .thread .server .chat_stream_requests .get ("/chat.startStream" , {})
218+ self .assertEqual (start_request .get ("channel" ), "C0123456789" )
219+ self .assertEqual (start_request .get ("thread_ts" ), "123.000" )
220+ self .assertEqual (
221+ json .dumps (start_request .get ("chunks" )),
222+ '[{"text": "**this is buffered**", "type": "markdown_text"}, {"id": "001", "status": "pending", "title": "Counting...", "type": "task_update"}]' ,
223+ )
224+ self .assertEqual (start_request .get ("recipient_team_id" ), "T0123456789" )
225+ self .assertEqual (start_request .get ("recipient_user_id" ), "U0123456789" )
226+
227+ append_request = self .thread .server .chat_stream_requests .get ("/chat.appendStream" , {})
228+ self .assertEqual (append_request .get ("channel" ), "C0123456789" )
229+ self .assertEqual (append_request .get ("ts" ), "123.123" )
230+ self .assertEqual (
231+ json .dumps (append_request .get ("chunks" )),
232+ '[{"text": "**this is unbuffered**", "type": "markdown_text"}]' ,
233+ )
234+
235+ stop_request = self .thread .server .chat_stream_requests .get ("/chat.stopStream" , {})
236+ self .assertEqual (stop_request .get ("channel" ), "C0123456789" )
237+ self .assertEqual (stop_request .get ("ts" ), "123.123" )
238+ self .assertEqual (
239+ json .dumps (stop_request .get ("chunks" )),
240+ '[{"text": "\\ n", "type": "markdown_text"}, {"text": ":space_invader:", "type": "markdown_text"}]' ,
241+ )
242+
169243 def test_streams_errors_when_appending_to_an_unstarted_stream (self ):
170244 streamer = self .client .chat_stream (
171245 channel = "C0123456789" ,
0 commit comments