Skip to content

Commit 798df48

Browse files
committed
Rework integration tests to be able to check on rich messages
1 parent a2fae00 commit 798df48

2 files changed

Lines changed: 90 additions & 27 deletions

File tree

src/test/java/com/github/stickerifier/stickerify/bot/MockResponses.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
public final class MockResponses {
99

10-
static final MockResponse EMPTY_UPDATES = new MockResponse.Builder().body("""
10+
static final MockResponse EMPTY_RESPONSE = new MockResponse.Builder().body("""
1111
{
1212
ok: true
1313
}

src/test/java/com/github/stickerifier/stickerify/bot/StickerifyTest.java

Lines changed: 89 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.github.stickerifier.stickerify.junit.ClearTempFiles;
1010
import com.github.stickerifier.stickerify.junit.Tags;
1111
import com.github.stickerifier.stickerify.telegram.Answer;
12+
import com.google.gson.JsonParser;
1213
import com.pengrad.telegrambot.TelegramBot;
1314
import mockwebserver3.MockWebServer;
1415
import mockwebserver3.QueueDispatcher;
@@ -18,7 +19,7 @@
1819
import org.junit.jupiter.api.Tag;
1920
import 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

Comments
 (0)