99import com .github .stickerifier .stickerify .junit .ClearTempFiles ;
1010import com .github .stickerifier .stickerify .junit .Tags ;
1111import com .github .stickerifier .stickerify .telegram .Answer ;
12+ import com .google .gson .JsonParser ;
1213import com .pengrad .telegrambot .TelegramBot ;
1314import mockwebserver3 .MockWebServer ;
1415import mockwebserver3 .QueueDispatcher ;
1819import org .junit .jupiter .api .Tag ;
1920import org .junit .jupiter .api .Test ;
2021
21- import java .net .URLEncoder ;
22+ import java .net .URLDecoder ;
2223
2324@ Tag (Tags .TELEGRAM_API )
2425@ ClearTempFiles
@@ -29,7 +30,7 @@ class StickerifyTest {
2930
3031 @ BeforeEach
3132 void setup () {
32- ((QueueDispatcher ) server .getDispatcher ()).setFailFast (MockResponses .EMPTY_UPDATES );
33+ ((QueueDispatcher ) server .getDispatcher ()).setFailFast (MockResponses .EMPTY_RESPONSE );
3334 }
3435
3536 @ Test
@@ -40,9 +41,9 @@ void startMessage() throws Exception {
4041 var getUpdates = server .takeRequest ();
4142 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
4243
43- var sendMessage = server .takeRequest ();
44- assertEquals ("/api/token/sendMessage " , sendMessage .getTarget ());
45- assertResponseContainsMessage ( sendMessage , Answer .HELP );
44+ var sendRichMessage = server .takeRequest ();
45+ assertEquals ("/api/token/sendRichMessage " , sendRichMessage .getTarget ());
46+ assertResponseContainsMarkdownMessage ( sendRichMessage , Answer .HELP );
4647 }
4748 }
4849
@@ -56,10 +57,32 @@ private Stickerify runBot() {
5657 return new Stickerify (bot , Runnable ::run );
5758 }
5859
59- private static void assertResponseContainsMessage (RecordedRequest request , Answer answer ) {
60- var message = URLEncoder .encode (answer .getText (), UTF_8 );
60+ private static void assertResponseContainsMarkdownMessage (RecordedRequest request , Answer answer ) {
61+ assertResponseContainsMessage (request , answer , "markdown" );
62+ }
63+
64+ private static void assertResponseContainsHtmlMessage (RecordedRequest request ) {
65+ assertResponseContainsMessage (request , Answer .PROCESSING , "html" );
66+ }
67+
68+ private static void assertResponseContainsMessage (RecordedRequest request , Answer answer , String messageFormat ) {
6169 assertNotNull (request .getBody ());
62- assertThat (request .getBody ().utf8 (), containsString (message ));
70+ var decodedBody = URLDecoder .decode (request .getBody ().utf8 (), UTF_8 );
71+
72+ var richMessageStart = decodedBody .indexOf ("rich_message=" );
73+ if (richMessageStart == -1 ) {
74+ throw new AssertionError ("No rich message found in request body" );
75+ }
76+
77+ var richMessageEnd = decodedBody .indexOf ("&" , richMessageStart );
78+ richMessageEnd = richMessageEnd == -1 ? decodedBody .length () : richMessageEnd ;
79+ var richMessageJson = decodedBody .substring (richMessageStart + "rich_message=" .length (), richMessageEnd );
80+
81+ var richMessage = JsonParser .parseString (richMessageJson ).getAsJsonObject ();
82+ var actualMessage = richMessage .get (messageFormat ).getAsString ();
83+
84+ var expectedMessage = answer .getText ();
85+ assertThat (actualMessage , containsString (expectedMessage ));
6386 }
6487
6588 @ Test
@@ -70,9 +93,9 @@ void helpMessage() throws Exception {
7093 var getUpdates = server .takeRequest ();
7194 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
7295
73- var sendMessage = server .takeRequest ();
74- assertEquals ("/api/token/sendMessage " , sendMessage .getTarget ());
75- assertResponseContainsMessage ( sendMessage , Answer .HELP );
96+ var sendRichMessage = server .takeRequest ();
97+ assertEquals ("/api/token/sendRichMessage " , sendRichMessage .getTarget ());
98+ assertResponseContainsMarkdownMessage ( sendRichMessage , Answer .HELP );
7699 }
77100 }
78101
@@ -84,9 +107,9 @@ void privacyMessage() throws Exception {
84107 var getUpdates = server .takeRequest ();
85108 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
86109
87- var sendMessage = server .takeRequest ();
88- assertEquals ("/api/token/sendMessage " , sendMessage .getTarget ());
89- assertResponseContainsMessage ( sendMessage , Answer .PRIVACY_POLICY );
110+ var sendRichMessage = server .takeRequest ();
111+ assertEquals ("/api/token/sendRichMessage " , sendRichMessage .getTarget ());
112+ assertResponseContainsMarkdownMessage ( sendRichMessage , Answer .PRIVACY_POLICY );
90113 }
91114 }
92115
@@ -98,9 +121,9 @@ void fileNotSupported() throws Exception {
98121 var getUpdates = server .takeRequest ();
99122 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
100123
101- var sendMessage = server .takeRequest ();
102- assertEquals ("/api/token/sendMessage " , sendMessage .getTarget ());
103- assertResponseContainsMessage ( sendMessage , Answer .ERROR );
124+ var sendRichMessage = server .takeRequest ();
125+ assertEquals ("/api/token/sendRichMessage " , sendRichMessage .getTarget ());
126+ assertResponseContainsMarkdownMessage ( sendRichMessage , Answer .ERROR );
104127 }
105128 }
106129
@@ -112,22 +135,27 @@ void fileTooBig() throws Exception {
112135 var getUpdates = server .takeRequest ();
113136 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
114137
115- var sendMessage = server .takeRequest ();
116- assertEquals ("/api/token/sendMessage " , sendMessage .getTarget ());
117- assertResponseContainsMessage ( sendMessage , Answer .FILE_TOO_LARGE );
138+ var sendRichMessage = server .takeRequest ();
139+ assertEquals ("/api/token/sendRichMessage " , sendRichMessage .getTarget ());
140+ assertResponseContainsMarkdownMessage ( sendRichMessage , Answer .FILE_TOO_LARGE );
118141 }
119142 }
120143
121144 @ Test
122145 void fileAlreadyValid () throws Exception {
123146 server .enqueue (MockResponses .ANIMATED_STICKER );
147+ server .enqueue (MockResponses .EMPTY_RESPONSE );
124148 server .enqueue (MockResponses .fileInfo ("animated_sticker.tgs" ));
125149 server .enqueue (MockResponses .fileDownload ("animated_sticker.tgs" ));
126150
127151 try (var _ = runBot ()) {
128152 var getUpdates = server .takeRequest ();
129153 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
130154
155+ var sendRichMessageDraft = server .takeRequest ();
156+ assertEquals ("/api/token/sendRichMessageDraft" , sendRichMessageDraft .getTarget ());
157+ assertResponseContainsHtmlMessage (sendRichMessageDraft );
158+
131159 var getFile = server .takeRequest ();
132160 assertEquals ("/api/token/getFile" , getFile .getTarget ());
133161 assertNotNull (getFile .getBody ());
@@ -136,22 +164,27 @@ void fileAlreadyValid() throws Exception {
136164 var download = server .takeRequest ();
137165 assertEquals ("/files/token/animated_sticker.tgs" , download .getTarget ());
138166
139- var sendMessage = server .takeRequest ();
140- assertEquals ("/api/token/sendMessage " , sendMessage .getTarget ());
141- assertResponseContainsMessage ( sendMessage , Answer .FILE_ALREADY_VALID );
167+ var sendRichMessage = server .takeRequest ();
168+ assertEquals ("/api/token/sendRichMessage " , sendRichMessage .getTarget ());
169+ assertResponseContainsMarkdownMessage ( sendRichMessage , Answer .FILE_ALREADY_VALID );
142170 }
143171 }
144172
145173 @ Test
146174 void convertedPng () throws Exception {
147175 server .enqueue (MockResponses .PNG_FILE );
176+ server .enqueue (MockResponses .EMPTY_RESPONSE );
148177 server .enqueue (MockResponses .fileInfo ("big.png" ));
149178 server .enqueue (MockResponses .fileDownload ("big.png" ));
150179
151180 try (var _ = runBot ()) {
152181 var getUpdates = server .takeRequest ();
153182 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
154183
184+ var sendRichMessageDraft = server .takeRequest ();
185+ assertEquals ("/api/token/sendRichMessageDraft" , sendRichMessageDraft .getTarget ());
186+ assertResponseContainsHtmlMessage (sendRichMessageDraft );
187+
155188 var getFile = server .takeRequest ();
156189 assertEquals ("/api/token/getFile" , getFile .getTarget ());
157190 assertNotNull (getFile .getBody ());
@@ -170,13 +203,18 @@ void convertedPng() throws Exception {
170203 @ Test
171204 void convertedWebp () throws Exception {
172205 server .enqueue (MockResponses .WEBP_FILE );
206+ server .enqueue (MockResponses .EMPTY_RESPONSE );
173207 server .enqueue (MockResponses .fileInfo ("static.webp" ));
174208 server .enqueue (MockResponses .fileDownload ("static.webp" ));
175209
176210 try (var _ = runBot ()) {
177211 var getUpdates = server .takeRequest ();
178212 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
179213
214+ var sendRichMessageDraft = server .takeRequest ();
215+ assertEquals ("/api/token/sendRichMessageDraft" , sendRichMessageDraft .getTarget ());
216+ assertResponseContainsHtmlMessage (sendRichMessageDraft );
217+
180218 var getFile = server .takeRequest ();
181219 assertEquals ("/api/token/getFile" , getFile .getTarget ());
182220 assertNotNull (getFile .getBody ());
@@ -195,13 +233,18 @@ void convertedWebp() throws Exception {
195233 @ Test
196234 void convertedMov () throws Exception {
197235 server .enqueue (MockResponses .MOV_FILE );
236+ server .enqueue (MockResponses .EMPTY_RESPONSE );
198237 server .enqueue (MockResponses .fileInfo ("long.mov" ));
199238 server .enqueue (MockResponses .fileDownload ("long.mov" ));
200239
201240 try (var _ = runBot ()) {
202241 var getUpdates = server .takeRequest ();
203242 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
204243
244+ var sendRichMessageDraft = server .takeRequest ();
245+ assertEquals ("/api/token/sendRichMessageDraft" , sendRichMessageDraft .getTarget ());
246+ assertResponseContainsHtmlMessage (sendRichMessageDraft );
247+
205248 var getFile = server .takeRequest ();
206249 assertEquals ("/api/token/getFile" , getFile .getTarget ());
207250 assertNotNull (getFile .getBody ());
@@ -220,13 +263,18 @@ void convertedMov() throws Exception {
220263 @ Test
221264 void convertedWebm () throws Exception {
222265 server .enqueue (MockResponses .WEBM_FILE );
266+ server .enqueue (MockResponses .EMPTY_RESPONSE );
223267 server .enqueue (MockResponses .fileInfo ("short_low_fps.webm" ));
224268 server .enqueue (MockResponses .fileDownload ("short_low_fps.webm" ));
225269
226270 try (var _ = runBot ()) {
227271 var getUpdates = server .takeRequest ();
228272 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
229273
274+ var sendRichMessageDraft = server .takeRequest ();
275+ assertEquals ("/api/token/sendRichMessageDraft" , sendRichMessageDraft .getTarget ());
276+ assertResponseContainsHtmlMessage (sendRichMessageDraft );
277+
230278 var getFile = server .takeRequest ();
231279 assertEquals ("/api/token/getFile" , getFile .getTarget ());
232280 assertNotNull (getFile .getBody ());
@@ -245,13 +293,18 @@ void convertedWebm() throws Exception {
245293 @ Test
246294 void convertedGif () throws Exception {
247295 server .enqueue (MockResponses .GIF_FILE );
296+ server .enqueue (MockResponses .EMPTY_RESPONSE );
248297 server .enqueue (MockResponses .fileInfo ("valid.gif" ));
249298 server .enqueue (MockResponses .fileDownload ("valid.gif" ));
250299
251300 try (var _ = runBot ()) {
252301 var getUpdates = server .takeRequest ();
253302 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
254303
304+ var sendRichMessageDraft = server .takeRequest ();
305+ assertEquals ("/api/token/sendRichMessageDraft" , sendRichMessageDraft .getTarget ());
306+ assertResponseContainsHtmlMessage (sendRichMessageDraft );
307+
255308 var getFile = server .takeRequest ();
256309 assertEquals ("/api/token/getFile" , getFile .getTarget ());
257310 assertNotNull (getFile .getBody ());
@@ -270,13 +323,18 @@ void convertedGif() throws Exception {
270323 @ Test
271324 void convertedLivePhoto () throws Exception {
272325 server .enqueue (MockResponses .LIVE_PHOTO_FILE );
326+ server .enqueue (MockResponses .EMPTY_RESPONSE );
273327 server .enqueue (MockResponses .fileInfo ("valid_live_photo" ));
274328 server .enqueue (MockResponses .fileDownload ("valid_live_photo" ));
275329
276330 try (var _ = runBot ()) {
277331 var getUpdates = server .takeRequest ();
278332 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
279333
334+ var sendRichMessageDraft = server .takeRequest ();
335+ assertEquals ("/api/token/sendRichMessageDraft" , sendRichMessageDraft .getTarget ());
336+ assertResponseContainsHtmlMessage (sendRichMessageDraft );
337+
280338 var getFile = server .takeRequest ();
281339 assertEquals ("/api/token/getFile" , getFile .getTarget ());
282340 assertNotNull (getFile .getBody ());
@@ -295,13 +353,18 @@ void convertedLivePhoto() throws Exception {
295353 @ Test
296354 void documentNotSupported () throws Exception {
297355 server .enqueue (MockResponses .DOCUMENT );
356+ server .enqueue (MockResponses .EMPTY_RESPONSE );
298357 server .enqueue (MockResponses .fileInfo ("document.txt" ));
299358 server .enqueue (MockResponses .fileDownload ("document.txt" ));
300359
301360 try (var _ = runBot ()) {
302361 var getUpdates = server .takeRequest ();
303362 assertEquals ("/api/token/getUpdates" , getUpdates .getTarget ());
304363
364+ var sendRichMessageDraft = server .takeRequest ();
365+ assertEquals ("/api/token/sendRichMessageDraft" , sendRichMessageDraft .getTarget ());
366+ assertResponseContainsHtmlMessage (sendRichMessageDraft );
367+
305368 var getFile = server .takeRequest ();
306369 assertEquals ("/api/token/getFile" , getFile .getTarget ());
307370 assertNotNull (getFile .getBody ());
@@ -310,9 +373,9 @@ void documentNotSupported() throws Exception {
310373 var download = server .takeRequest ();
311374 assertEquals ("/files/token/document.txt" , download .getTarget ());
312375
313- var sendMessage = server .takeRequest ();
314- assertEquals ("/api/token/sendMessage " , sendMessage .getTarget ());
315- assertResponseContainsMessage ( sendMessage , Answer .ERROR );
376+ var sendRichMessage = server .takeRequest ();
377+ assertEquals ("/api/token/sendRichMessage " , sendRichMessage .getTarget ());
378+ assertResponseContainsMarkdownMessage ( sendRichMessage , Answer .ERROR );
316379 }
317380 }
318381}
0 commit comments