@volter/twin-telegram 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +53 -0
  3. package/dist/generated/pack-facts.json +53 -0
  4. package/dist/journeys/coverage.json +138 -0
  5. package/dist/journeys/customer-life.json +1229 -0
  6. package/dist/journeys/customer-life.outline.md +99 -0
  7. package/dist/journeys/customer-life.outline.verdict.json +76 -0
  8. package/dist/journeys/customer-life.verdict.json +134 -0
  9. package/dist/journeys/decisions.json +95 -0
  10. package/dist/journeys/demand.json +152 -0
  11. package/dist/journeys/score.json +163 -0
  12. package/dist/journeys/unreachable.json +29 -0
  13. package/dist/journeys/vendor-examples.json +1554 -0
  14. package/dist/journeys/vendor-examples.verdict.json +14 -0
  15. package/dist/spec/SOURCE.md +51 -0
  16. package/dist/spec/bot-api.html.gz +0 -0
  17. package/dist/spec/doc-examples.json +344 -0
  18. package/dist/spec/grouping.json +1 -0
  19. package/dist/spec/openapi.json.gz +0 -0
  20. package/dist/spec/page-to-openapi.ts +258 -0
  21. package/dist/spec/patches.json +289 -0
  22. package/dist/spec/sources.json +416 -0
  23. package/dist/src/cli.d.ts +2 -0
  24. package/dist/src/cli.js +21 -0
  25. package/dist/src/engine/media.d.ts +17 -0
  26. package/dist/src/engine/media.js +75 -0
  27. package/dist/src/engine/text.d.ts +45 -0
  28. package/dist/src/engine/text.js +512 -0
  29. package/dist/src/fetch.d.ts +2 -0
  30. package/dist/src/fetch.js +17 -0
  31. package/dist/src/generated/surface.gen.json +1 -0
  32. package/dist/src/generated/ui.gen.json +1 -0
  33. package/dist/src/index.d.ts +5 -0
  34. package/dist/src/index.js +9 -0
  35. package/dist/src/manifest.d.ts +2 -0
  36. package/dist/src/manifest.js +104 -0
  37. package/dist/src/semantics/around.d.ts +2 -0
  38. package/dist/src/semantics/around.js +32 -0
  39. package/dist/src/semantics/available-methods.d.ts +12 -0
  40. package/dist/src/semantics/available-methods.js +266 -0
  41. package/dist/src/semantics/doors.d.ts +18 -0
  42. package/dist/src/semantics/doors.js +292 -0
  43. package/dist/src/semantics/getting-updates.d.ts +3 -0
  44. package/dist/src/semantics/getting-updates.js +68 -0
  45. package/dist/src/semantics/index.d.ts +2 -0
  46. package/dist/src/semantics/index.js +19 -0
  47. package/dist/src/semantics/shared.d.ts +112 -0
  48. package/dist/src/semantics/shared.js +424 -0
  49. package/dist/src/semantics/states.d.ts +18 -0
  50. package/dist/src/semantics/states.js +37 -0
  51. package/dist/src/semantics/updating-messages.d.ts +2 -0
  52. package/dist/src/semantics/updating-messages.js +48 -0
  53. package/dist/src/server.d.ts +7 -0
  54. package/dist/src/server.js +24 -0
  55. package/generated/pack-facts.json +53 -0
  56. package/journeys/coverage.json +138 -0
  57. package/journeys/customer-life.json +1229 -0
  58. package/journeys/customer-life.outline.md +99 -0
  59. package/journeys/customer-life.outline.verdict.json +76 -0
  60. package/journeys/customer-life.verdict.json +134 -0
  61. package/journeys/decisions.json +95 -0
  62. package/journeys/demand.json +152 -0
  63. package/journeys/score.json +163 -0
  64. package/journeys/unreachable.json +29 -0
  65. package/journeys/vendor-examples.json +1554 -0
  66. package/journeys/vendor-examples.verdict.json +14 -0
  67. package/package.json +37 -0
  68. package/spec/SOURCE.md +51 -0
  69. package/spec/bot-api.html.gz +0 -0
  70. package/spec/doc-examples.json +344 -0
  71. package/spec/grouping.json +1 -0
  72. package/spec/openapi.json.gz +0 -0
  73. package/spec/page-to-openapi.ts +258 -0
  74. package/spec/patches.json +289 -0
  75. package/spec/sources.json +416 -0
  76. package/src/cli.ts +22 -0
  77. package/src/engine/media.ts +67 -0
  78. package/src/engine/text.ts +409 -0
  79. package/src/fetch.ts +18 -0
  80. package/src/generated/surface.gen.json +1 -0
  81. package/src/generated/ui.gen.json +1 -0
  82. package/src/index.ts +11 -0
  83. package/src/manifest.ts +114 -0
  84. package/src/semantics/around.ts +33 -0
  85. package/src/semantics/available-methods.ts +253 -0
  86. package/src/semantics/doors.ts +277 -0
  87. package/src/semantics/getting-updates.ts +64 -0
  88. package/src/semantics/index.ts +23 -0
  89. package/src/semantics/shared.ts +428 -0
  90. package/src/semantics/states.ts +38 -0
  91. package/src/semantics/updating-messages.ts +41 -0
  92. package/src/server.ts +17 -0
@@ -0,0 +1,1229 @@
1
+ {
2
+ "vendor": "telegram",
3
+ "author": "Contributor 173",
4
+ "host": "api.telegram.org",
5
+ "about": "Tide Labs, a two-person studio, runs its Volter Harness agent on Telegram (a bot polling for updates, answering in private and in the team group, where privacy mode keeps a plain member from hearing the team until it is made an administrator, posting a scheduled digest, and sending a finished card's release notes as a document) and publishes its news to a Telegram channel through Postiz (connected by a /connect post, then text, an album, a reply, a photo, a video and a PDF), from January to the agent's retirement at the end of February.",
6
+ "steps": [
7
+ {
8
+ "name": "Monday 5 January, 10:00 in Lisbon",
9
+ "wait": "106h"
10
+ },
11
+ {
12
+ "name": "Ana signs up for Telegram in the app",
13
+ "method": "POST",
14
+ "path": "/_twin/people",
15
+ "body": {
16
+ "first_name": "Ana",
17
+ "last_name": "Ribeiro",
18
+ "username": "ana_ribeiro",
19
+ "language_code": "pt"
20
+ },
21
+ "status": 200,
22
+ "capture": {
23
+ "ana": "id"
24
+ }
25
+ },
26
+ {
27
+ "name": "Bruno signs up for Telegram in the app",
28
+ "method": "POST",
29
+ "path": "/_twin/people",
30
+ "body": {
31
+ "first_name": "Bruno",
32
+ "last_name": "Costa",
33
+ "username": "brunocosta",
34
+ "language_code": "pt"
35
+ },
36
+ "status": 200,
37
+ "capture": {
38
+ "bruno": "id"
39
+ }
40
+ },
41
+ {
42
+ "name": "Ana makes the studio's agent bot with BotFather (/newbot) and is given its token",
43
+ "method": "POST",
44
+ "path": "/_twin/bots",
45
+ "body": {
46
+ "owner": "{ana}",
47
+ "name": "Tide Agent",
48
+ "username": "tidelabs_agent_bot"
49
+ },
50
+ "status": 200,
51
+ "capture": {
52
+ "agent_token": "token",
53
+ "agent_id": "id"
54
+ },
55
+ "expect": [
56
+ {
57
+ "path": "token",
58
+ "matches": "^{agent_id}:"
59
+ }
60
+ ]
61
+ },
62
+ {
63
+ "name": "Ana opens the agent bot in Telegram and presses Start",
64
+ "method": "POST",
65
+ "path": "/_twin/messages",
66
+ "body": {
67
+ "from": "{ana}",
68
+ "chat": "@tidelabs_agent_bot",
69
+ "text": "/start"
70
+ },
71
+ "status": 200,
72
+ "expect": [
73
+ {
74
+ "path": "entities.0.type",
75
+ "equals": "bot_command"
76
+ }
77
+ ]
78
+ },
79
+ {
80
+ "name": "...and writes to it",
81
+ "method": "POST",
82
+ "path": "/_twin/messages",
83
+ "body": {
84
+ "from": "{ana}",
85
+ "chat": "@tidelabs_agent_bot",
86
+ "text": "Hi! I'm Ana from Tide Labs. Can you keep notes of our standups?"
87
+ },
88
+ "status": 200
89
+ },
90
+ {
91
+ "name": "10:05: Ana starts Volter Harness with the token in her profile",
92
+ "wait": "5m"
93
+ },
94
+ {
95
+ "name": "Harness's Telegram adapter reads its bot",
96
+ "method": "POST",
97
+ "path": "/bot{agent_token}/getMe",
98
+ "body": {},
99
+ "status": 200,
100
+ "expect": [
101
+ {
102
+ "path": "ok",
103
+ "equals": true
104
+ },
105
+ {
106
+ "path": "result.username",
107
+ "equals": "tidelabs_agent_bot"
108
+ },
109
+ {
110
+ "path": "result.is_bot",
111
+ "equals": true
112
+ },
113
+ {
114
+ "path": "result.can_read_all_group_messages",
115
+ "equals": false
116
+ }
117
+ ]
118
+ },
119
+ {
120
+ "name": "...removes any webhook before it polls, keeping what is pending",
121
+ "method": "POST",
122
+ "path": "/bot{agent_token}/deleteWebhook",
123
+ "body": {
124
+ "drop_pending_updates": false
125
+ },
126
+ "status": 200,
127
+ "expect": [
128
+ {
129
+ "path": "result",
130
+ "equals": true
131
+ },
132
+ {
133
+ "path": "description",
134
+ "equals": "Webhook is already deleted"
135
+ }
136
+ ]
137
+ },
138
+ {
139
+ "name": "...and polls: Ana's Start and her message are waiting",
140
+ "method": "POST",
141
+ "path": "/bot{agent_token}/getUpdates",
142
+ "body": {
143
+ "limit": 100,
144
+ "timeout": 30
145
+ },
146
+ "status": 200,
147
+ "capture": {
148
+ "ana_chat": "result.1.message.chat.id",
149
+ "agent_next": "next:result.1.update_id"
150
+ },
151
+ "expect": [
152
+ {
153
+ "path": "result.0.message.text",
154
+ "equals": "/start"
155
+ },
156
+ {
157
+ "path": "result.1.message.text",
158
+ "equals": "Hi! I'm Ana from Tide Labs. Can you keep notes of our standups?"
159
+ },
160
+ {
161
+ "path": "result.1.message.chat.type",
162
+ "equals": "private"
163
+ },
164
+ {
165
+ "path": "result.1.message.from.id",
166
+ "equals": "{ana}"
167
+ },
168
+ {
169
+ "path": "result.2",
170
+ "exists": false
171
+ }
172
+ ]
173
+ },
174
+ {
175
+ "name": "It shows the bot typing in her private chat while the agent works",
176
+ "method": "POST",
177
+ "path": "/bot{agent_token}/sendChatAction",
178
+ "body": {
179
+ "chat_id": "{ana_chat}",
180
+ "action": "typing"
181
+ },
182
+ "status": 200,
183
+ "expect": [
184
+ {
185
+ "path": "result",
186
+ "equals": true
187
+ }
188
+ ]
189
+ },
190
+ {
191
+ "name": "...and posts the agent's answer there",
192
+ "method": "POST",
193
+ "path": "/bot{agent_token}/sendMessage",
194
+ "body": {
195
+ "chat_id": "{ana_chat}",
196
+ "text": "Hi Ana! I'll keep notes of each standup and post a digest of it. Add me to your team chat and mention me there."
197
+ },
198
+ "status": 200,
199
+ "expect": [
200
+ {
201
+ "path": "result.chat.id",
202
+ "equals": "{ana_chat}"
203
+ },
204
+ {
205
+ "path": "result.from.id",
206
+ "equals": "{agent_id}"
207
+ },
208
+ {
209
+ "path": "result.message_id",
210
+ "exists": true
211
+ }
212
+ ]
213
+ },
214
+ {
215
+ "name": "11:00: the team chat",
216
+ "wait": "55m"
217
+ },
218
+ {
219
+ "name": "Ana makes the group \"Tide Labs team\" with Bruno and the agent bot, which the app adds as a plain member",
220
+ "method": "POST",
221
+ "path": "/_twin/chats",
222
+ "body": {
223
+ "creator": "{ana}",
224
+ "type": "group",
225
+ "title": "Tide Labs team",
226
+ "members": [
227
+ {
228
+ "user": "{bruno}"
229
+ },
230
+ {
231
+ "user": "{agent_id}"
232
+ }
233
+ ]
234
+ },
235
+ "status": 200,
236
+ "capture": {
237
+ "team": "id"
238
+ },
239
+ "expect": [
240
+ {
241
+ "path": "type",
242
+ "equals": "group"
243
+ }
244
+ ]
245
+ },
246
+ {
247
+ "name": "Harness's poll, from the update after the last it read, receives its own membership and the group's creation (a service message, which privacy mode lets through)",
248
+ "method": "POST",
249
+ "path": "/bot{agent_token}/getUpdates",
250
+ "body": {
251
+ "offset": "{agent_next}",
252
+ "limit": 100,
253
+ "timeout": 30
254
+ },
255
+ "status": 200,
256
+ "capture": {
257
+ "team_chat": "result.1.message.chat.id",
258
+ "agent_next": "next:result.1.update_id"
259
+ },
260
+ "expect": [
261
+ {
262
+ "path": "result.0.my_chat_member.new_chat_member.status",
263
+ "equals": "member"
264
+ },
265
+ {
266
+ "path": "result.0.my_chat_member.from.id",
267
+ "equals": "{ana}"
268
+ },
269
+ {
270
+ "path": "result.1.message.group_chat_created",
271
+ "equals": true
272
+ },
273
+ {
274
+ "path": "result.1.message.chat.title",
275
+ "equals": "Tide Labs team"
276
+ },
277
+ {
278
+ "path": "result.2",
279
+ "exists": false
280
+ }
281
+ ]
282
+ },
283
+ {
284
+ "name": "11:10",
285
+ "wait": "10m"
286
+ },
287
+ {
288
+ "name": "Bruno tells the team when the standup is",
289
+ "method": "POST",
290
+ "path": "/_twin/messages",
291
+ "body": {
292
+ "from": "{bruno}",
293
+ "chat": "{team}",
294
+ "text": "Morning all! Standups are at 9:00 on Tuesdays, starting tomorrow. Post your items here."
295
+ },
296
+ "status": 200
297
+ },
298
+ {
299
+ "name": "Bruno asks the agent in the group",
300
+ "method": "POST",
301
+ "path": "/_twin/messages",
302
+ "body": {
303
+ "from": "{bruno}",
304
+ "chat": "{team}",
305
+ "text": "@tidelabs_agent_bot what did Ana ask you to track?"
306
+ },
307
+ "status": 200,
308
+ "expect": [
309
+ {
310
+ "path": "entities.0.type",
311
+ "equals": "mention"
312
+ }
313
+ ]
314
+ },
315
+ {
316
+ "name": "11:25: no answer comes; Ana reads that a bot in privacy mode is not sent a plain mention, and an administrator bot is sent every message",
317
+ "wait": "15m"
318
+ },
319
+ {
320
+ "name": "Ana makes the agent bot an administrator of the group",
321
+ "method": "POST",
322
+ "path": "/_twin/chats/{team}/members",
323
+ "body": {
324
+ "by": "{ana}",
325
+ "user": "{agent_id}",
326
+ "status": "administrator"
327
+ },
328
+ "status": 200,
329
+ "expect": [
330
+ {
331
+ "path": "status",
332
+ "equals": "administrator"
333
+ }
334
+ ]
335
+ },
336
+ {
337
+ "name": "Bruno asks again, with the standup time",
338
+ "method": "POST",
339
+ "path": "/_twin/messages",
340
+ "body": {
341
+ "from": "{bruno}",
342
+ "chat": "{team}",
343
+ "text": "@tidelabs_agent_bot standups are at 9:00 on Tuesdays from tomorrow, items posted here. What did Ana ask you to track?"
344
+ },
345
+ "status": 200
346
+ },
347
+ {
348
+ "name": "Harness's next poll receives its promotion and Bruno's second question; his two earlier messages were never sent to it",
349
+ "method": "POST",
350
+ "path": "/bot{agent_token}/getUpdates",
351
+ "body": {
352
+ "offset": "{agent_next}",
353
+ "limit": 100,
354
+ "timeout": 30
355
+ },
356
+ "status": 200,
357
+ "capture": {
358
+ "agent_next": "next:result.1.update_id"
359
+ },
360
+ "expect": [
361
+ {
362
+ "path": "result.0.my_chat_member.old_chat_member.status",
363
+ "equals": "member"
364
+ },
365
+ {
366
+ "path": "result.0.my_chat_member.new_chat_member.status",
367
+ "equals": "administrator"
368
+ },
369
+ {
370
+ "path": "result.1.message.text",
371
+ "equals": "@tidelabs_agent_bot standups are at 9:00 on Tuesdays from tomorrow, items posted here. What did Ana ask you to track?"
372
+ },
373
+ {
374
+ "path": "result.1.message.from.id",
375
+ "equals": "{bruno}"
376
+ },
377
+ {
378
+ "path": "result.2",
379
+ "exists": false
380
+ }
381
+ ]
382
+ },
383
+ {
384
+ "name": "The agent answers Bruno in the group",
385
+ "method": "POST",
386
+ "path": "/bot{agent_token}/sendMessage",
387
+ "body": {
388
+ "chat_id": "{team_chat}",
389
+ "text": "Ana asked me to keep notes of your standups: post your items here at 9:00 on Tuesdays and I will post the digest at 9:15."
390
+ },
391
+ "status": 200,
392
+ "expect": [
393
+ {
394
+ "path": "result.chat.title",
395
+ "equals": "Tide Labs team"
396
+ }
397
+ ]
398
+ },
399
+ {
400
+ "name": "Tuesday 6 January, 09:00: the standup",
401
+ "wait": "1295m"
402
+ },
403
+ {
404
+ "name": "Ana posts her standup items in the group",
405
+ "method": "POST",
406
+ "path": "/_twin/messages",
407
+ "body": {
408
+ "from": "{ana}",
409
+ "chat": "{team}",
410
+ "text": "Today: release notes for 0.9. Yesterday: CI cache fixed."
411
+ },
412
+ "status": 200
413
+ },
414
+ {
415
+ "name": "Harness's poll, held open, returns with her item as she posts it",
416
+ "method": "POST",
417
+ "path": "/bot{agent_token}/getUpdates",
418
+ "body": {
419
+ "offset": "{agent_next}",
420
+ "limit": 100,
421
+ "timeout": 30
422
+ },
423
+ "status": 200,
424
+ "capture": {
425
+ "agent_next": "next:result.0.update_id"
426
+ },
427
+ "expect": [
428
+ {
429
+ "path": "result.0.message.from.id",
430
+ "equals": "{ana}"
431
+ },
432
+ {
433
+ "path": "result.0.message.text",
434
+ "equals": "Today: release notes for 0.9. Yesterday: CI cache fixed."
435
+ },
436
+ {
437
+ "path": "result.1",
438
+ "exists": false
439
+ }
440
+ ]
441
+ },
442
+ {
443
+ "name": "09:02",
444
+ "wait": "2m"
445
+ },
446
+ {
447
+ "name": "Bruno posts his",
448
+ "method": "POST",
449
+ "path": "/_twin/messages",
450
+ "body": {
451
+ "from": "{bruno}",
452
+ "chat": "{team}",
453
+ "text": "Today: the login redirect bug. Blocked on: staging credentials."
454
+ },
455
+ "status": 200
456
+ },
457
+ {
458
+ "name": "Harness's next poll, from the update after hers, returns with Bruno's item as he posts it",
459
+ "method": "POST",
460
+ "path": "/bot{agent_token}/getUpdates",
461
+ "body": {
462
+ "offset": "{agent_next}",
463
+ "limit": 100,
464
+ "timeout": 30
465
+ },
466
+ "status": 200,
467
+ "capture": {
468
+ "agent_next": "next:result.0.update_id"
469
+ },
470
+ "expect": [
471
+ {
472
+ "path": "result.0.message.from.id",
473
+ "equals": "{bruno}"
474
+ },
475
+ {
476
+ "path": "result.0.message.text",
477
+ "equals": "Today: the login redirect bug. Blocked on: staging credentials."
478
+ },
479
+ {
480
+ "path": "result.1",
481
+ "exists": false
482
+ }
483
+ ]
484
+ },
485
+ {
486
+ "name": "09:15: the digest",
487
+ "wait": "13m"
488
+ },
489
+ {
490
+ "name": "Harness's scheduled job posts the standup digest to the home chat",
491
+ "method": "POST",
492
+ "path": "/bot{agent_token}/sendMessage",
493
+ "body": {
494
+ "chat_id": "{team_chat}",
495
+ "text": "Standup digest, Tuesday 6 January\n\nAna: release notes for 0.9 today; CI cache fixed yesterday.\nBruno: the login redirect bug today; blocked on staging credentials."
496
+ },
497
+ "status": 200,
498
+ "expect": [
499
+ {
500
+ "path": "result.text",
501
+ "contains": "blocked on staging credentials"
502
+ }
503
+ ]
504
+ },
505
+ {
506
+ "name": "Wednesday 7 January, 14:00",
507
+ "wait": "1725m"
508
+ },
509
+ {
510
+ "name": "Ana makes the public channel \"Tide Labs News\" (@tidelabs_news) with the studio logo as its photo",
511
+ "method": "POST",
512
+ "path": "/_twin/chats",
513
+ "body": {
514
+ "creator": "{ana}",
515
+ "type": "channel",
516
+ "title": "Tide Labs News",
517
+ "username": "tidelabs_news",
518
+ "description": "Releases and notes from Tide Labs.",
519
+ "photo": "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"
520
+ },
521
+ "status": 200,
522
+ "capture": {
523
+ "news": "id"
524
+ },
525
+ "expect": [
526
+ {
527
+ "path": "photo.big_file_id",
528
+ "exists": true
529
+ }
530
+ ]
531
+ },
532
+ {
533
+ "name": "Ana makes the news bot with BotFather for Postiz, which she runs herself (docker compose, local storage)",
534
+ "method": "POST",
535
+ "path": "/_twin/bots",
536
+ "body": {
537
+ "owner": "{ana}",
538
+ "name": "Tide News",
539
+ "username": "tidelabs_news_bot"
540
+ },
541
+ "status": 200,
542
+ "capture": {
543
+ "news_token": "token",
544
+ "news_bot": "id"
545
+ }
546
+ },
547
+ {
548
+ "name": "14:05",
549
+ "wait": "5m"
550
+ },
551
+ {
552
+ "name": "...and adds it to the channel as an administrator that may post and delete messages",
553
+ "method": "POST",
554
+ "path": "/_twin/chats/{news}/members",
555
+ "body": {
556
+ "by": "{ana}",
557
+ "user": "{news_bot}",
558
+ "status": "administrator",
559
+ "rights": {
560
+ "can_post_messages": true,
561
+ "can_edit_messages": true,
562
+ "can_delete_messages": true
563
+ }
564
+ },
565
+ "status": 200,
566
+ "expect": [
567
+ {
568
+ "path": "status",
569
+ "equals": "administrator"
570
+ }
571
+ ]
572
+ },
573
+ {
574
+ "name": "14:06: Ana sets her Postiz's TELEGRAM_TOKEN to the news bot's token and, in Postiz, chooses to add Telegram",
575
+ "wait": "1m"
576
+ },
577
+ {
578
+ "name": "Postiz's connect screen polls the news bot: only the bot's own promotion is waiting, and it holds no /connect",
579
+ "method": "POST",
580
+ "path": "/bot{news_token}/getUpdates",
581
+ "headers": {
582
+ "content-type": "application/x-www-form-urlencoded"
583
+ },
584
+ "body": "allowed_updates%5B0%5D=message&allowed_updates%5B1%5D=channel_post",
585
+ "status": 200,
586
+ "capture": {
587
+ "news_next": "next:result.0.update_id"
588
+ },
589
+ "expect": [
590
+ {
591
+ "path": "result.0.my_chat_member.new_chat_member.status",
592
+ "equals": "administrator"
593
+ },
594
+ {
595
+ "path": "result.0.update_id",
596
+ "exists": true
597
+ },
598
+ {
599
+ "path": "result.1",
600
+ "exists": false
601
+ }
602
+ ]
603
+ },
604
+ {
605
+ "name": "Ana posts the command Postiz shows her in the channel",
606
+ "method": "POST",
607
+ "path": "/_twin/messages",
608
+ "body": {
609
+ "from": "{ana}",
610
+ "chat": "{news}",
611
+ "text": "/connect k3x9"
612
+ },
613
+ "status": 200
614
+ },
615
+ {
616
+ "name": "Postiz polls again from the next update (the last update_id it saw plus one) and finds the /connect post",
617
+ "method": "POST",
618
+ "path": "/bot{news_token}/getUpdates",
619
+ "headers": {
620
+ "content-type": "application/x-www-form-urlencoded"
621
+ },
622
+ "body": "offset={news_next}&allowed_updates%5B0%5D=message&allowed_updates%5B1%5D=channel_post",
623
+ "status": 200,
624
+ "capture": {
625
+ "channel": "result.0.channel_post.chat.id",
626
+ "connect_post": "result.0.channel_post.message_id"
627
+ },
628
+ "expect": [
629
+ {
630
+ "path": "result.0.channel_post.text",
631
+ "equals": "/connect k3x9"
632
+ },
633
+ {
634
+ "path": "result.0.channel_post.sender_chat.username",
635
+ "equals": "tidelabs_news"
636
+ }
637
+ ]
638
+ },
639
+ {
640
+ "name": "Postiz reads its bot",
641
+ "method": "POST",
642
+ "path": "/bot{news_token}/getMe",
643
+ "headers": {
644
+ "content-type": "application/x-www-form-urlencoded"
645
+ },
646
+ "body": "",
647
+ "status": 200,
648
+ "capture": {
649
+ "news_bot_id": "result.id"
650
+ }
651
+ },
652
+ {
653
+ "name": "...checks the bot may delete messages in the channel",
654
+ "method": "POST",
655
+ "path": "/bot{news_token}/getChatMember",
656
+ "headers": {
657
+ "content-type": "application/x-www-form-urlencoded"
658
+ },
659
+ "body": "chat_id={channel}&user_id={news_bot_id}",
660
+ "status": 200,
661
+ "expect": [
662
+ {
663
+ "path": "result.status",
664
+ "equals": "administrator"
665
+ },
666
+ {
667
+ "path": "result.can_delete_messages",
668
+ "equals": true
669
+ }
670
+ ]
671
+ },
672
+ {
673
+ "name": "...deletes the /connect post",
674
+ "method": "POST",
675
+ "path": "/bot{news_token}/deleteMessage",
676
+ "headers": {
677
+ "content-type": "application/x-www-form-urlencoded"
678
+ },
679
+ "body": "chat_id={channel}&message_id={connect_post}",
680
+ "status": 200,
681
+ "expect": [
682
+ {
683
+ "path": "result",
684
+ "equals": true
685
+ }
686
+ ]
687
+ },
688
+ {
689
+ "name": "...and posts its notice",
690
+ "method": "POST",
691
+ "path": "/bot{news_token}/sendMessage",
692
+ "headers": {
693
+ "content-type": "application/x-www-form-urlencoded"
694
+ },
695
+ "body": "chat_id={channel}&text=Connection%20Successful.%20Message%20will%20be%20deleted%20in%2010%20seconds.",
696
+ "status": 200,
697
+ "capture": {
698
+ "notice": "result.message_id"
699
+ },
700
+ "expect": [
701
+ {
702
+ "path": "result.sender_chat.id",
703
+ "equals": "{channel}"
704
+ }
705
+ ]
706
+ },
707
+ {
708
+ "name": "ten seconds later",
709
+ "wait": "10s"
710
+ },
711
+ {
712
+ "name": "Postiz deletes its notice",
713
+ "method": "POST",
714
+ "path": "/bot{news_token}/deleteMessage",
715
+ "headers": {
716
+ "content-type": "application/x-www-form-urlencoded"
717
+ },
718
+ "body": "chat_id={channel}&message_id={notice}",
719
+ "status": 200,
720
+ "expect": [
721
+ {
722
+ "path": "result",
723
+ "equals": true
724
+ }
725
+ ]
726
+ },
727
+ {
728
+ "name": "Postiz reads the channel it is connecting",
729
+ "method": "POST",
730
+ "path": "/bot{news_token}/getChat",
731
+ "headers": {
732
+ "content-type": "application/x-www-form-urlencoded"
733
+ },
734
+ "body": "chat_id={channel}",
735
+ "status": 200,
736
+ "capture": {
737
+ "logo": "result.photo.big_file_id"
738
+ },
739
+ "expect": [
740
+ {
741
+ "path": "result.title",
742
+ "equals": "Tide Labs News"
743
+ },
744
+ {
745
+ "path": "result.username",
746
+ "equals": "tidelabs_news"
747
+ }
748
+ ]
749
+ },
750
+ {
751
+ "name": "...the photo's file, to make its link",
752
+ "method": "POST",
753
+ "path": "/bot{news_token}/getFile",
754
+ "headers": {
755
+ "content-type": "application/x-www-form-urlencoded"
756
+ },
757
+ "body": "file_id={logo}",
758
+ "status": 200,
759
+ "capture": {
760
+ "logo_path": "result.file_path"
761
+ },
762
+ "expect": [
763
+ {
764
+ "path": "result.file_path",
765
+ "matches": "^profile_photos/"
766
+ }
767
+ ]
768
+ },
769
+ {
770
+ "name": "...and copies the picture into its storage from the link",
771
+ "method": "GET",
772
+ "path": "/file/bot{news_token}/{logo_path}",
773
+ "status": 200,
774
+ "expect": [
775
+ {
776
+ "header": "content-type",
777
+ "equals": "image/jpeg"
778
+ }
779
+ ]
780
+ },
781
+ {
782
+ "name": "Thursday 8 January, 10:00",
783
+ "wait": "71630s"
784
+ },
785
+ {
786
+ "name": "Postiz publishes the launch post (Postiz's HTML: a bold title, two paragraphs)",
787
+ "method": "POST",
788
+ "path": "/bot{news_token}/sendMessage",
789
+ "headers": {
790
+ "content-type": "application/x-www-form-urlencoded"
791
+ },
792
+ "body": "chat_id={channel}&text=%3Cb%3ETide%20is%20live%3C%2Fb%3E%0ATide%20plans%20and%20ships%20weekly%20releases%20for%20small%20teams.%0ATry%20it%20free%20at%20https%3A%2F%2Ftide.example%20and%20tell%20us%20what%20you%20think.%0A&parse_mode=HTML",
793
+ "status": 200,
794
+ "expect": [
795
+ {
796
+ "path": "result.text",
797
+ "equals": "Tide is live\nTide plans and ships weekly releases for small teams.\nTry it free at https://tide.example and tell us what you think."
798
+ },
799
+ {
800
+ "path": "result.entities.0.type",
801
+ "equals": "bold"
802
+ },
803
+ {
804
+ "path": "result.entities.0.length",
805
+ "equals": 12
806
+ },
807
+ {
808
+ "path": "result.entities.1.type",
809
+ "equals": "url"
810
+ }
811
+ ]
812
+ },
813
+ {
814
+ "name": "11:00: Ana asks the agent for the release notes",
815
+ "wait": "1h"
816
+ },
817
+ {
818
+ "name": "Ana asks the agent in her private chat for the 0.9 release notes",
819
+ "method": "POST",
820
+ "path": "/_twin/messages",
821
+ "body": {
822
+ "from": "{ana}",
823
+ "chat": "@tidelabs_agent_bot",
824
+ "text": "Can you draft the release notes for 0.9 from this week's merged work? I need them by Friday."
825
+ },
826
+ "status": 200
827
+ },
828
+ {
829
+ "name": "Harness's poll receives her request",
830
+ "method": "POST",
831
+ "path": "/bot{agent_token}/getUpdates",
832
+ "body": {
833
+ "offset": "{agent_next}",
834
+ "limit": 100,
835
+ "timeout": 30
836
+ },
837
+ "status": 200,
838
+ "capture": {
839
+ "agent_next": "next:result.0.update_id"
840
+ },
841
+ "expect": [
842
+ {
843
+ "path": "result.0.message.text",
844
+ "equals": "Can you draft the release notes for 0.9 from this week's merged work? I need them by Friday."
845
+ },
846
+ {
847
+ "path": "result.0.message.chat.id",
848
+ "equals": "{ana_chat}"
849
+ },
850
+ {
851
+ "path": "result.1",
852
+ "exists": false
853
+ }
854
+ ]
855
+ },
856
+ {
857
+ "name": "It shows the bot typing while the agent files the card",
858
+ "method": "POST",
859
+ "path": "/bot{agent_token}/sendChatAction",
860
+ "body": {
861
+ "chat_id": "{ana_chat}",
862
+ "action": "typing"
863
+ },
864
+ "status": 200,
865
+ "expect": [
866
+ {
867
+ "path": "result",
868
+ "equals": true
869
+ }
870
+ ]
871
+ },
872
+ {
873
+ "name": "The agent answers that the card is on the board and this chat will hear when it is done",
874
+ "method": "POST",
875
+ "path": "/bot{agent_token}/sendMessage",
876
+ "body": {
877
+ "chat_id": "{ana_chat}",
878
+ "text": "On it: \"Draft the 0.9 release notes\" is card release-notes on the board, and this chat will get the notes when it is done."
879
+ },
880
+ "status": 200,
881
+ "expect": [
882
+ {
883
+ "path": "result.chat.id",
884
+ "equals": "{ana_chat}"
885
+ },
886
+ {
887
+ "path": "result.text",
888
+ "contains": "release-notes"
889
+ }
890
+ ]
891
+ },
892
+ {
893
+ "name": "Friday 9 January, 15:00: the card is done",
894
+ "wait": "28h"
895
+ },
896
+ {
897
+ "name": "Harness's board tells the subscribed chat the card is done, its notes attached (the Chat SDK sends a message with files as MarkdownV2)",
898
+ "method": "POST",
899
+ "path": "/bot{agent_token}/sendDocument",
900
+ "form": {
901
+ "parts": [
902
+ {
903
+ "name": "chat_id",
904
+ "value": "{ana_chat}"
905
+ },
906
+ {
907
+ "name": "caption",
908
+ "value": "✔ card release\\-notes done — Draft the 0\\.9 release notes\nNotes for Tide 0\\.9: drag to reschedule a release, a faster dashboard and the login redirect fix\\."
909
+ },
910
+ {
911
+ "name": "parse_mode",
912
+ "value": "MarkdownV2"
913
+ },
914
+ {
915
+ "name": "document",
916
+ "filename": "release-notes-0.9.md",
917
+ "type": "application/octet-stream",
918
+ "base64": "IyBUaWRlIDAuOQoKIyMgTmV3Ci0gRHJhZyBhIHJlbGVhc2Ugb24gdGhlIHRpbWVsaW5lIHRvIHJlc2NoZWR1bGUgaXQuCi0gVGhlIGRhc2hib2FyZCBsb2FkcyBpbiBoYWxmIHRoZSB0aW1lLgoKIyMgRml4ZWQKLSBTaWduaW5nIGluIG5vIGxvbmdlciBsb29wcyBiYWNrIHRvIHRoZSBsb2dpbiBwYWdlLgo="
919
+ }
920
+ ]
921
+ },
922
+ "status": 200,
923
+ "expect": [
924
+ {
925
+ "path": "result.chat.id",
926
+ "equals": "{ana_chat}"
927
+ },
928
+ {
929
+ "path": "result.caption",
930
+ "equals": "✔ card release-notes done — Draft the 0.9 release notes\nNotes for Tide 0.9: drag to reschedule a release, a faster dashboard and the login redirect fix."
931
+ },
932
+ {
933
+ "path": "result.caption_entities",
934
+ "exists": false
935
+ },
936
+ {
937
+ "path": "result.document.file_name",
938
+ "equals": "release-notes-0.9.md"
939
+ }
940
+ ]
941
+ },
942
+ {
943
+ "name": "Monday 12 January, 10:00",
944
+ "wait": "67h"
945
+ },
946
+ {
947
+ "name": "Postiz publishes the 0.9 release with three screenshots as one album, the text on the first",
948
+ "method": "POST",
949
+ "path": "/bot{news_token}/sendMediaGroup?chat_id={channel}&media=%5B%7B%22type%22%3A%22photo%22%2C%22media%22%3A%22attach%3A%2F%2F0%22%2C%22caption%22%3A%22%3Cb%3ETide%200.9%3C%2Fb%3E%5CnA%20dashboard%20for%20every%20release%2C%20a%20timeline%20you%20can%20drag%2C%20and%20settings%20in%20one%20place.%22%2C%22parse_mode%22%3A%22HTML%22%7D%2C%7B%22type%22%3A%22photo%22%2C%22media%22%3A%22attach%3A%2F%2F1%22%2C%22parse_mode%22%3A%22HTML%22%7D%2C%7B%22type%22%3A%22photo%22%2C%22media%22%3A%22attach%3A%2F%2F2%22%2C%22parse_mode%22%3A%22HTML%22%7D%5D",
950
+ "form": {
951
+ "parts": [
952
+ {
953
+ "name": "0",
954
+ "filename": "dashboard.png",
955
+ "type": "image/png",
956
+ "base64": "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"
957
+ },
958
+ {
959
+ "name": "1",
960
+ "filename": "timeline.png",
961
+ "type": "image/png",
962
+ "base64": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAEsCAIAAACUnPcNAAAedElEQVR42u3de1TU1d7H8T0DjFLk7TxH05QQUS5yUREVES+lpunoGCjewwsaiiIM4Kjx+CQqKAKa2vKCpeUFQw8qKnnJFDHUKGVmEDMvxMlsaVingEEGZp4/xjWLIzgpEsee5/36y9Xe3+/ezNrrs35rw/ySNHtzvgAAPH+kfAQAQEADAAhoACCgAQAENAAQ0AAAAhoAQEADAAENACCgAYCABgAQ0AAAAhoAnmfWTzJJ7uv5zugBQgjfro65BTeFEEfPayr0VduO5NSc9s9PEzqMU9VvHz9lrPn62+8lEslLtk0Wbc3I0VyvPedZ+tcWMXZwSvpJ11df7uvu9MgP8iRMm6l3OQA0TEBn5qozc9WmVBqhWv9n7EOvrzJ17urQbmv0lL5zV/3ZP3nk2MEp6ScLv/+p8Puf6t3kGcsB4FkD2sIjZOsWL70/f3wLuxdu/fSz6b+3sHsh8Z2ANi2b2dhYvZt68Otr3z9V2yvf32n3txYWmtQecn315bVhQc1ffOGT47kbD5yeLe8/ZWgfo9G4dHvmN9eK6+yzePLwF22bHFg+R/HuB+YH839+mnDoS3U/D6d1+z/3dXPs7dZx86HsjQdOW/6JapZvPZzTp6tjixdt43dlZeaqn/GjAEBAP5PlMxX/OHvp0y/yRvp6BPTvIYSImzF6c2Z23rfft/97y71LQ/zCVj9Vw9e6O2fnX7PQpPbQrJH939t+uLD4zvkPFm08cDpmwhteM5a1+1sLZdCQMf7d6+yzcmdW6KgBinc/qLl0E5nNR1nn4ndlaT9a+npkyrKPj5xMith44PQT/kQ2NtYlv5W+ufB9h5f/djRhfmau+hk/CgAE9DPx93Cat26PEOKziwUGg0EIMbiHi2Pb/zKNvtCkiZVUWm0wmOfHTh3Rx81x08EzpjuTmul2JGGejbVVl/ZteofGn16rfFyT2v1jPzwYMKDHG726NnuhqRDieN6VzcopqUfOzk7aWbjjPQubeYTBaLz03T+rDYbKqupL3xUbjMYXmtj84U9kJpVIdp64IIQo+qmk2YtNn7wQAP6UgLaxtjLHk5BIhBBWVtKA/95UUamXSiS+XR0fiaS4j48Ii3fQCwJfnzi4l4UmtYc+Xjz94LnLmzOzZ47oJ4QITd7l594pVDFw7EBvy5upvQfThAeVeoPRaGHFusurqv9VpjP922g0PnkhAIg/48/sLhQWvdnHQwgxsq+nxPRfrtwa6esphBjS0y1y3JCnbXjq0rfezq9aaFJ7qHvnDhlnLzeVWctsrJu9aHt01fyLV4tmrflkaE83C32kUqlUInmin/HJfiJDrfx9xo8CAE/Qz2Tx1oxNykmz5P4XC29V6quEEKqt/3h/3vjpb/pVV1fPez/taRt+98Ndd4d28sUb14aNe6TJjR/vRY4bUrt/6uGcE2sWaG/d/ldp+YNK/bGLBZ8nR0olktVpx46c1zxuM19qb6QtDRn3P1v+cEt1/kSmzSR/euJpCwHgCUn4v3oDAN8kBAAQ0ABAQAMACGgAIKABAAQ0AICABgACGgBAQAMAAQ0AIKABAAQ0ABDQAAACGgD+r5BU6n7lUwAAnqABAAQ0ABDQAAACGgAIaAAAAQ0AIKABgIAGABDQAEBAAwAIaAAAAQ0ABDQAgIAGAAIaAEBAAwABDQAgoAEABDQAENAAAAIaAAhoAMB/gHVDNTqee5VPEwBMhvq6PEcB3VAbAoC/uoZ6YOWKAwAEd9AAAAIaAAhoAAABDQAENACAgAYAENAAQEA/xvCRb0UoVQsiVbNDw/PV2jrnyBVBDbjinrR0IURRUfGhzKP1KDdtpt7l9VZaWrYqMWXk6HGcTkDwVe9GWsnaJiUpQQhx81bRyvg1qVs2/Nkr7k7bN2H8WAcHewcH+3o3ecbyelgS+97AAf45585zOgECurF1dHj13s8lv5eWrt+w6f79X/RVVaGzZri4dDFPqD1UVFScvHZDaVnpm8OGBgYoMg5kZn12QiKRhMwMdnbuXGef7Tt26XS6aFVsYkKcXBGUeWCv6aHYv59vvlo7flyARltQUFA4RiEPDFBY2IypylyuGDVCo71SWlYaPHVSPz9fC4VyRZC/n6+Tk+PAAf6rk9bpdDpbW9sYZfgCpSoxIa5Nm9Yxqlh7+w5hc2ZdztccPpL17uIYU+HS2EWtWrX8cPtOTidAQDe2vK8v9ejuuXnLh2MUclcX57t37y2JXbZ183rzhNpDGQczQ2a87eBgP33m3MAAxSc703Z+nPpzScmu3Z+ePnO2zj7Bb0/an3EoMSGu5tKVlZXykcODp06aMHn6xveTZkybGjY/KjBAYWEzNVVV6Zs3b7Y2OeHOnZ8ilKp+fr4WCvV6/aBB/X169lgRv+b1Qf2HDH7txMlTm7Zs6+XjrdZoB7ceZDQar1+/KYRQa7S9fHqaC1u1asm5BNCoAV1VpY9Qqqqqq4uLf/go9YPQsIjbt380DVVUVBgMBqn04YX4V3nfPDI0O2T6F6ezcy9cLCsvF0L07t0zYXXSaPmIRQsjgyYGP65PbVKpxLlLZ6lUam1t7ezcWSKRVDx4UOeKdTYxGIzD3hgihGjb9uXSsnLLhVKptKd3dyHE5Xx1TFS4EGLgAP8tqdujI+efzcnt5Ojo5NTpxo2b5eU6tVorXzScswjgP38HnbZ3/7HjJ6urq1fFL5PJZEajUaMtqBmItYfei4vv7+83ZrTc9Pu6hdERao123/6Dn586Y6FPnXswTZDJZBKJxMKKdZbb2Fjb2b1o+rep3EKhlZXVwyWM/9bEy8tz67YdBVcKPdzdmshk+WqNXq9v2bIFZxHAf/7P7Ly9uxVevebe1S3nXK4Q4sLFvN170mtOqD307bXvBg7oV6nXV1bqy8rKFkSq3FxdFquU5y/mWehjNBqMRuOTbMlCk5okEmk9Crt18zyTfU4IcSb7XDcvzyZNZK1atczO+dK9q5uHu1v6vgwvTw8OIoDn4g7avkP7m7eKklavSFm38VBmlpWVVVTkPNNQ+1fa7d6TPic0JDllfc2h0aNGhIVHd3LsaGdnJ5PJfPv4zJ2vNBqMUyeP79u3zyOTzTzcuy6JXbZy+dI/3FLtFc2bmThh7NMWPuKdWdMTk9ZlHsmybdo0OipcCNHLx/vw0WPNmr3k6uqi1hRMC57CQQRQx0Nhpe5X0UAvqOaF/QDQgHnINwkBQHAHDQAgoAGAgAYAENAAQEADAAhoAAABDQAENACAgAYAAhoAIP7CL0s6nnuVDxQAxPP2siQAgOCKAwAIaAAAAQ0AIKABgIAGABDQAEBAAwAIaAAgoAEABDQAgIAGAAIaACCe47fZ8So7ADAb6uvyfL1utEE2BAB/dQ31wMoVBwAI7qABAAQ0ABDQAAACGgAIaAAAAQ0AIKABgIB+jOEj34pQqhZEqmaHhuertXXOkSuCGnDFPWnpQoiiouJDmUfrUW7aTL3L6y3rsxPhETEhs+flfX2JAwoIvurdGCtZ26QkJQghbt4qWhm/JnXLhj97xd1p+yaMH+vgYO/gYF/vJs9Y/rR+/de/jh3/fG3yqn/+cPu/ly7f/uEmzihAQDeejg6v3vu55PfS0vUbNt2//4u+qip01gwXly7mCbWHioqKk9duKC0rfXPY0MAARcaBzKzPTkgkkpCZwc7Onevss33HLp1OF62KTUyIkyuCMg/sNT0U+/fzzVdrx48L0GgLCgoKxyjkgQEKC5sxVZnLFaNGaLRXSstKg6dO6ufna6FQrgjy9/N1cnIcOMB/ddI6nU5na2sbowxfoFQlJsS1adM6RhVrb98hbM6sy/maw0ey3l0cI4T47bffxyhGSiSS1n//r99++50DChDQjSrv60s9untu3vLhGIXc1cX57t17S2KXbd283jyh9lDGwcyQGW87ONhPnzk3MEDxyc60nR+n/lxSsmv3p6fPnK2zT/Dbk/ZnHEpMiKu5dGVlpXzk8OCpkyZMnr7x/aQZ06aGzY8KDFBY2ExNVVX65s2brU1OuHPnpwilqp+fr4VCvV4/aFB/n549VsSveX1Q/yGDXztx8tSmLdt6+XirNdrBrQcZjcbr128KIdQabS+fnqYq+w7t7Tu0F0KcyT7n69uLAwoQ0I2hqkofoVRVVVcXF//wUeoHoWERt2//aBqqqKgwGAxS6cML8a/yvnlkaHbI9C9OZ+deuFhWXi6E6N27Z8LqpNHyEYsWRgZNDH5cn9qkUolzl85SqdTa2trZubNEIql48KDOFetsYjAYh70xRAjRtu3LpWXllgulUmlP7+5CiMv56piocCHEwAH+W1K3R0fOP5uT28nR0cmp040bN8vLdWq1Vr5oeM2Ffvzxzt70/clr4jmgAAHdqHfQaXv3Hzt+srq6elX8MplMZjQaNdqCmoFYe+i9uPj+/n5jRstNv69bGB2h1mj37T/4+akzFvrUuQfTBJlMJpFILKxYZ7mNjbWd3Yumf5vKLRRaWVk9XML4b028vDy3bttRcKXQw92tiUyWr9bo9fqWLVuYJ+h0FcuWr4pWhrdo3pwDCgj+iqMxeXt3K7x6zb2rW865XCHEhYt5u/ek15xQe+jba98NHNCvUq+vrNSXlZUtiFS5ubosVinPX8yz0MdoNBiNxifZkoUmNUkk0noUduvmeSb7nOnWopuXZ5MmslatWmbnfOne1c3D3S19X4aXp0eNPRsTViePGzvG1cWZ0wnwBN3Y7Du0v3mrKGn1ipR1Gw9lZllZWUVFzjMNtX+l3e496XNCQ5JT1tccGj1qRFh4dCfHjnZ2djKZzLePz9z5SqPBOHXy+L59+zwy2czDveuS2GUrly/9wy3VXtG8mYkTxj5t4SPemTU9MWld5pEs26ZNo6PChRC9fLwPHz3WrNlLrq4uak3BtOAp5snHjn/+Vd43v/32W+bhLFtb2yfZPID/qySVul9FA72gmhf2A0AD5iHfJAQAwR00AICABgACGgBAQAMAAQ0AIKABAAQ0ABDQAAACGgAIaACA+Au/LOl47lU+UAAQz9vLkgAAgisOACCgAQAENACAgAYAAhoAQEADAAENACCgAYCABgAQ0AAAAhoACGgAgHiO32bHq+wAwGyor8vz9brRBtkQAPzVNdQDK1ccACC4gwYAENAAQEADAAhoACCgAQAENACAgAYAAvoxho98K0KpWhCpmh0anq/W1jlHrghqwBX3pKULIYqKig9lHq1HuWkz9S6vnwcPHixbvipCqZo9J/z8ha84oIDgq96NsZK1TUpSghDi5q2ilfFrUrds+LNX3J22b8L4sQ4O9g4O9vVu8ozlTyvjwGEX587jxr5Vcv9+2PyoPr19OKMAAd14Ojq8eu/nkt9LS9dv2HT//i/6qqrQWTNcXLqYJ9QeKioqTl67obSs9M1hQwMDFBkHMrM+OyGRSEJmBjs7d66zz/Ydu3Q6XbQqNjEhTq4Iyjyw1/RQ7N/PN1+tHT8uQKMtKCgoHKOQBwYoLGzGVGUuV4waodFeKS0rDZ46qZ+fr4VCuSLI38/Xyclx4AD/1UnrdDqdra1tjDJ8gVKVmBDXpk3rGFWsvX2HsDmzLudrDh/JendxjBBixIg3bJs2NT25W1tZcUABArpR5X19qUd3z81bPhyjkLu6ON+9e29J7LKtm9ebJ9QeyjiYGTLjbQcH++kz5wYGKD7Zmbbz49SfS0p27f709JmzdfYJfnvS/oxDiQlxNZeurKyUjxwePHXShMnTN76fNGPa1LD5UYEBCgubqamqSt+8ebO1yQl37vwUoVT18/O1UKjX6wcN6u/Ts8eK+DWvD+o/ZPBrJ06e2rRlWy8fb7VGO7j1IKPReP36TSGEWqPt5dPTVPWSnZ0QIj4hKTvnyxVx/80BBQjoxlBVpY9Qqqqqq4uLf/go9YPQsIjbt380DVVUVBgMBqn04YX4V3nfPDI0O2T6F6ezcy9cLCsvF0L07t0zYXXSaPmIRQsjgyYGP65PbVKpxLlLZ6lUam1t7ezcWSKRVDx4UOeKdTYxGIzD3hgihGjb9uXSsnLLhVKptKd3dyHE5Xx1TFS4EGLgAP8tqdujI+efzcnt5Ojo5NTpxo2b5eU6tVorXzS85kKLVMr+X/odO/55j+5enFGAgG68O+i0vfuPHT9ZXV29Kn6ZTCYzGo0abUHNQKw99F5cfH9/vzGj5abf1y2MjlBrtPv2H/z81BkLfercg2mCTCaTSCQWVqyz3MbG2s7uRdO/TeUWCq2srB4uYfy3Jl5enlu37Si4Uujh7tZEJstXa/R6fcuWLUyj72/YNDc0xMrKyrdPr9Vr1nFAAcFfcTQmb+9uhVevuXd1yzmXK4S4cDFv9570mhNqD3177buBA/pV6vWVlfqysrIFkSo3V5fFKuX5i3kW+hiNBqPR+CRbstCkJolEWo/Cbt08z2SfE0KcyT7XzcuzSRNZq1Yts3O+dO/q5uHulr4vw8vTwzy5rKw859x5IURBQWGHDq9wQAGeoBuVfYf2N28VJa1ekbJu46HMLCsrq6jIeaah9q+0270nfU5oSHLK+ppDo0eNCAuP7uTY0c7OTiaT+fbxmTtfaTQYp04e37dvn0cmm3m4d10Su2zl8qV/uKXaK5o3M3HC2KctfMQ7s6YnJq3LPJJl27RpdFS4EKKXj/fho8eaNXvJ1dVFrSmYFjzFPHnGtCkJq5MzDmTa2FjHRC3ggAL/n0kqdb+KBnpBNS/sB4AGzEO+SQgAgjtoAAABDQAENACAgAYAAhoAQEADAAhoACCgAQAENAAQ0AAA8Rd+WdLx3Kt8oAAgnreXJQEABFccAEBAAwAIaAAAAQ0ABDQAgIAGAAIaAEBAAwABDQAgoAEABDQAENAAAPEcv82OV9kBgNlQX5fn63WjDbIhAPira6gHVq44AEBwBw0AIKABgIAGABDQAEBAAwAIaAAAAQ0ABPRjDB/5VoRStSBSNTs0PF+trXOOXBHUgCvuSUsXQhQVFR/KPFqPctNm6l3+jC5czBs24i0OKCD4qndjrGRtk5KUIIS4eatoZfya1C0b/uwVd6ftmzB+rIODvYODfb2bPGN5/ZSX6z7ZlWZtbcUBBQjoRtXR4dV7P5f8Xlq6fsOm+/d/0VdVhc6a4eLSxTyh9lBRUXHy2g2lZaVvDhsaGKDIOJCZ9dkJiUQSMjPY2blznX2279il0+miVbGJCXFyRVDmgb2mh2L/fr75au34cQEabUFBQeEYhTwwQGFhM6Yqc7li1AiN9kppWWnw1En9/HwtFMoVQf5+vk5OjgMH+K9OWqfT6WxtbWOU4QuUqsSEuDZtWseoYu3tO4TNmXU5X3P4SNa7i2PMtVu3bQ98a3RSygYOKEBAN6q8ry/16O65ecuHYxRyVxfnu3fvLYldtnXzevOE2kMZBzNDZrzt4GA/febcwADFJzvTdn6c+nNJya7dn54+c7bOPsFvT9qfcSgxIa7m0pWVlfKRw4OnTpowefrG95NmTJsaNj8qMEBhYTM1VVXpmzdvtjY54c6dnyKUqn5+vhYK9Xr9oEH9fXr2WBG/5vVB/YcMfu3EyVObtmzr5eOt1mgHtx5kNBqvX78phFBrtL18epoLNdorJSUlAwf4E9AAAd1Iqqr0EUpVVXV1cfEPH6V+EBoWcfv2j6ahiooKg8EglT68EP8q75tHhmaHTP/idHbuhYtl5eVCiN69eyasThotH7FoYWTQxODH9alNKpU4d+kslUqtra2dnTtLJJKKBw/qXLHOJgaDcdgbQ4QQbdu+XFpWbrlQKpX29O4uhLicr46JChdCDBzgvyV1e3Tk/LM5uZ0cHZ2cOt24cbO8XKdWa+WLhptjfdPmbcv+ZwlHE8B/4A46be/+Y8dPVldXr4pfJpPJjEajRltQMxBrD70XF9/f32/MaLnp93ULoyPUGu2+/Qc/P3XGQp8692CaIJPJJBKJhRXrLLexsbaze9H0b1O5hUIrK6uHSxj/rYmXl+fWbTsKrhR6uLs1kcny1Rq9Xt+yZQvTaPbZc+U63fKVq4UQOp0uflXyooWRHFNA8FccjcPbu1vh1WvuXd1yzuUKIS5czNu9J73mhNpD3177buCAfpV6fWWlvqysbEGkys3VZbFKef5inoU+RqPBaDQ+yZYsNKlJIpHWo7BbN88z2eeEEGeyz3Xz8mzSRNaqVcvsnC/du7p5uLul78vw8vQwT379tYEfpX6QkpSQkpRga2tLOgM8QTcq+w7tb94qSlq9ImXdxkOZWVZWVlGR80xD7V9pt3tP+pzQkOSU9TWHRo8aERYe3cmxo52dnUwm8+3jM3e+0mgwTp08vm/fPo9MNvNw77okdtnK5Uv/cEu1VzRvZuKEsU9b+Ih3Zk1PTFqXeSTLtmnT6KhwIUQvH+/DR481a/aSq6uLWlMwLXgKBxFAHQ+FlbpfRQO9oJoX9gNAA+Yh3yQEAMEdNACAgAYAAhoAQEADAAENACCgAQAENAAQ0AAAAhoACGgAgPgLvyzpeO5VPlAAEM/by5IAAIIrDgAgoAEABDQAgIAGAAIaAEBAAwABDQAgoAGAgAYAENAAAAIaAAhoAIB4jt9mx6vsAMBsqK/L8/W60QbZEAD81TXUAytXHAAguIMGABDQAEBAAwAIaAAgoAEABDQAgIAGAAL6MYaPfCtCqVoQqZodGp6v1tY5R64IasAV96SlCyGKiooPZR6tR7lpM/Uur5+vv740acqMCKUqQqn68KNPOKCA4KvejbGStU1KUoIQ4uatopXxa1K3bPizV9ydtm/C+LEODvYODvb1bvKM5U/r/i+/jA8KlI8cztEEYN34S3Z0ePXezyW/l5au37Dp/v1f9FVVobNmuLh0MU+oPVRUVJy8dkNpWembw4YGBigyDmRmfXZCIpGEzAx2du5cZ5/tO3bpdLpoVWxiQpxcEZR5YK/podi/n2++Wjt+XIBGW1BQUDhGIQ8MUFjYjKnKXK4YNUKjvVJaVho8dVI/P18LhXJFkL+fr5OT48AB/quT1ul0Oltb2xhl+AKlKjEhrk2b1jGqWHv7DmFzZl3O1xw+kvXu4hghREnJLx06vMK5BPCfCei8ry/16O65ecuHYxRyVxfnu3fvLYldtnXzevOE2kMZBzNDZrzt4GA/febcwADFJzvTdn6c+nNJya7dn54+c7bOPsFvT9qfcSgxIa7m0pWVlfKRw4OnTpowefrG95NmTJsaNj8qMEBhYTM1VVXpmzdvtjY54c6dnyKUqn5+vhYK9Xr9oEH9fXr2WBG/5vVB/YcMfu3EyVObtmzr5eOt1mgHtx5kNBqvX78phFBrtL18epqqSu7fv/3jj3s//cdLL9nNDQ1p164tZxQgoP90VVX6CKWqqrq6uPiHj1I/CA2LuH37R9NQRUWFwWCQSh9eiH+V980jQ7NDpn9xOjv3wsWy8nIhRO/ePRNWJ42Wj1i0MDJoYvDj+tQmlUqcu3SWSqXW1tbOzp0lEknFgwd1rlhnE4PBOOyNIUKItm1fLi0rt1wolUp7encXQlzOV8dEhQshBg7w35K6PTpy/tmc3E6Ojk5OnW7cuFlerlOrtfJFD+80JBJJp04dlRHzzuZ8uSZlfXLiSs4oQEA33h102t79x46frK6uXhW/TCaTGY1GjbagZiDWHnovLr6/v9+Y0XLT7+sWRkeoNdp9+w9+fuqMhT517sE0QSaTSSQSCyvWWW5jY21n96I5SS0XWllZPVzC+G9NvLw8t27bUXCl0MPdrYlMlq/W6PX6li1bmEbfGiNv/fe/CyH8+vZJXruBAwoI/oqjMXl7dyu8es29q1vOuVwhxIWLebv3pNecUHvo22vfDRzQr1Kvr6zUl5WVLYhUubm6LFYpz1/Ms9DHaDQYjcYn2ZKFJjVJJNJ6FHbr5nkm+5wQ4kz2uW5enk2ayFq1apmd86V7VzcPd7f0fRlenh7myVtTt+eevyiEKCz8tmNHBw4owBN0o7Lv0P7mraKk1StS1m08lJllZWUVFTnPNNT+lXa796TPCQ1JTllfc2j0qBFh4dGdHDva2dnJZDLfPj5z5yuNBuPUyeP79u3zyGQzD/euS2KXrVy+9A+3VHtF82YmThj7tIWPeGfW9MSkdZlHsmybNo2OChdC9PLxPnz0WLNmL7m6uqg1BdOCp5gnTwuesjpx7b79B2QyWVTEPA4o8P+ZpFL3q2igF1Tzwn4AaMA85JuEACC4gwYAENAAQEADAAhoACCgAQAENACAgAYAAhoAQEADAAENABB/4ZclHc+9ygcKAOJ5e1kSAEBwxQEABDQAgIAGABDQAEBAAwAIaAAgoAEABDQAENAAAAIaAEBAAwABDQAgoAGAgAYAENAAAAIaAAhoAAABDQAENACAgAYAENAAQEADAAhoACCgAQAENAAQ0AAAAhoAQEADAAENACCgAYCABgAQ0ACAh/4XKW1hO3P/h/QAAAAASUVORK5CYII="
963
+ },
964
+ {
965
+ "name": "2",
966
+ "filename": "settings.png",
967
+ "type": "image/png",
968
+ "base64": "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"
969
+ }
970
+ ]
971
+ },
972
+ "status": 200,
973
+ "capture": {
974
+ "album": "result.0.message_id"
975
+ },
976
+ "expect": [
977
+ {
978
+ "path": "result.0.caption",
979
+ "equals": "Tide 0.9\nA dashboard for every release, a timeline you can drag, and settings in one place."
980
+ },
981
+ {
982
+ "path": "result.0.photo.0.width",
983
+ "equals": 480
984
+ },
985
+ {
986
+ "path": "result.2.photo.0.height",
987
+ "equals": 300
988
+ },
989
+ {
990
+ "path": "result.0.media_group_id",
991
+ "exists": true
992
+ },
993
+ {
994
+ "path": "result.3",
995
+ "exists": false
996
+ }
997
+ ]
998
+ },
999
+ {
1000
+ "name": "11:00",
1001
+ "wait": "1h"
1002
+ },
1003
+ {
1004
+ "name": "Postiz publishes the post's comment, the changelog, as a reply to the album",
1005
+ "method": "POST",
1006
+ "path": "/bot{news_token}/sendMessage",
1007
+ "headers": {
1008
+ "content-type": "application/x-www-form-urlencoded"
1009
+ },
1010
+ "body": "chat_id={channel}&text=Changelog%3A%20drag%20to%20reschedule%20a%20release%3B%20faster%20dashboard%3B%20fixed%20the%20login%20redirect.%0A&parse_mode=HTML&reply_to_message_id={album}",
1011
+ "status": 200,
1012
+ "expect": [
1013
+ {
1014
+ "path": "result.reply_to_message.message_id",
1015
+ "equals": "{album}"
1016
+ }
1017
+ ]
1018
+ },
1019
+ {
1020
+ "name": "18:00: the standups move to a video call",
1021
+ "wait": "7h"
1022
+ },
1023
+ {
1024
+ "name": "Ana removes the agent bot from \"Tide Labs team\"",
1025
+ "method": "POST",
1026
+ "path": "/_twin/chats/{team}/members",
1027
+ "body": {
1028
+ "by": "{ana}",
1029
+ "user": "{agent_id}",
1030
+ "status": "kicked"
1031
+ },
1032
+ "status": 200,
1033
+ "expect": [
1034
+ {
1035
+ "path": "status",
1036
+ "equals": "kicked"
1037
+ }
1038
+ ]
1039
+ },
1040
+ {
1041
+ "name": "Tuesday 13 January, 09:15",
1042
+ "wait": "915m"
1043
+ },
1044
+ {
1045
+ "name": "The digest job, still on, posts to the home chat and is refused",
1046
+ "method": "POST",
1047
+ "path": "/bot{agent_token}/sendMessage",
1048
+ "body": {
1049
+ "chat_id": "{team_chat}",
1050
+ "text": "Standup digest, Tuesday 13 January\n\nNo standup items were posted this week."
1051
+ },
1052
+ "status": 403,
1053
+ "expect": [
1054
+ {
1055
+ "path": "description",
1056
+ "equals": "Forbidden: bot was kicked from the group chat"
1057
+ }
1058
+ ]
1059
+ },
1060
+ {
1061
+ "name": "Wednesday 14 January, 16:00",
1062
+ "wait": "1845m"
1063
+ },
1064
+ {
1065
+ "name": "Postiz sends Ana's product photo with its 1,091-character story, and Telegram refuses the caption",
1066
+ "method": "POST",
1067
+ "path": "/bot{news_token}/sendPhoto?chat_id={channel}&caption=Tide%20Desk%20started%20as%20a%20sketch%20on%20a%20caf%C3%A9%20napkin%20in%20Porto%2C%20the%20week%20our%20second%20release%20slipped%20for%20the%20third%20time.%20We%20were%20two%20people%20with%20a%20shared%20spreadsheet%2C%20a%20calendar%20nobody%20trusted%20and%20a%20habit%20of%20shipping%20on%20Fridays%20at%20midnight.%20Ana%20drew%20three%20columns%3A%20what%20is%20ready%2C%20what%20is%20waiting%2C%20what%20is%20promised.%20Bruno%20added%20a%20fourth%3A%20who%20is%20waiting%20for%20it.%20That%20napkin%20became%20the%20first%20board%2C%20and%20the%20board%20became%20the%20planner%20we%20use%20every%20Monday.%20We%20kept%20the%20rule%20from%20that%20night%3A%20nothing%20goes%20on%20the%20timeline%20unless%20someone%20can%20say%20who%20is%20waiting%20for%20it.%20It%20sounds%20small%2C%20but%20it%20changed%20how%20we%20talk%20about%20releases.%20We%20stopped%20arguing%20about%20dates%20and%20started%20asking%20who%20would%20notice.%20The%20desk%20in%20the%20photo%20is%20where%20it%20all%20happens%20now%3A%20one%20screen%20for%20the%20timeline%2C%20one%20for%20the%20changelog%2C%20and%20a%20cup%20that%20says%20Friday.%20Today%20Tide%20plans%20the%20weekly%20releases%20of%20forty%20small%20teams%2C%20from%20a%20bakery%27s%20ordering%20app%20in%20Braga%20to%20a%20school%20timetable%20in%20Coimbra.%20If%20your%20team%20still%20keeps%20its%20releases%20in%20a%20spreadsheet%2C%20we%20were%20you%20two%20years%20ago.%20Come%20and%20try%20the%20board%3B%20the%20napkin%20is%20framed%20on%20the%20wall%20behind%20it.&parse_mode=HTML",
1068
+ "form": {
1069
+ "parts": [
1070
+ {
1071
+ "name": "photo",
1072
+ "filename": "tide-desk.jpg",
1073
+ "type": "image/jpeg",
1074
+ "base64": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA4KCw0LCQ4NDA0QDw4RFiQXFhQUFiwgIRokNC43NjMuMjI6QVNGOj1OPjIySGJJTlZYXV5dOEVmbWVabFNbXVn/2wBDAQ8QEBYTFioXFypZOzI7WVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVn/wAARCAHgAoADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDt6KKKgoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACivIaK6fq/mcv1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoqppH/IHsf+veP/0EVbrmejOlO6CiiigYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB5DRRRXpHlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB6npH/ACB7H/r3j/8AQRVuqmkf8gex/wCveP8A9BFW6857npR2QUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDyGiiivSPLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD1PSP8AkD2P/XvH/wCgirdVNI/5A9j/ANe8f/oIq3XnPc9KOyCiiikUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeQ0UUV6R5YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAep6R/yB7H/r3j/wDQRVuqmkf8gex/694//QRVuvOe56UdkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8hooor0jywooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9T0j/kD2P/AF7x/wDoIq3VTSP+QPY/9e8f/oIq3XnPc9KOyCiiikUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeQ0UUV6R5YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAep6R/yB7H/AK94/wD0EVbqppH/ACB7H/r3j/8AQRVuvOe56UdkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8hooor0jywooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9T0j/kD2P8A17x/+girdVNI/wCQPY/9e8f/AKCKt15z3PSjsgooopFBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHkNFFFekeWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHqekf8gex/694//QRVuqmkf8gex/694/8A0EVbrznuelHZBRRRSKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPIaKKK9I8sKKKKACiiigAooooAKKKKACiirtpa289vPJLPLG0Kb2VYgwI3KvB3D+9QNK5SorSttInuLyKEfJHIyDe5UHDAEEDPJwQcCqjWc6wecUGzAY/MMgHoSM5A6c47ildBZkFFaMWnRyJaKLhhcXSFo08v5c7mUAtnPJX071CNNuiVAjGScH51+Xgn5ufl4BPOOhougsypRV59MnS3EmBu3OGXIwoVUO7dnGDvH6dc1RouDVgooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD1PSP8AkD2P/XvH/wCgirdVNI/5A9j/ANe8f/oIq3XnPc9KOyCiiikUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeQ0UUV6R5YUUUUAFFFFABRRRQAUUUUAFTwXHkw3Kbd3nxiPOfu/OrZ/8dx+NQUUDNeLWEWa2kltS/wBmaN4wJNvKoinPHOdgPt71DPqrzWQgIlzsSM/vjswuMYT14FZ1FLlQ+ZmhFqEccdqwgY3FqhWN/M+XO5mB246gt69qnl1tppVkdZyS5kYfaGwDgj5Bj5ep9fTpWRRRyoOZmrNrCy20lt9lVYJGZyoYA7iqgHIHXK5PY7jwKyqKKErCbb3CiiimIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPU9I/5A9j/ANe8f/oIq3VTSP8AkD2P/XvH/wCgirdec9z0o7IKKKKRQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB5DRRRXpHlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB6npH/IHsf+veP/0EVbqppH/IHsf+veP/ANBFW6857npR2QUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDyGiiivSPLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD1PSP+QPY/9e8f/oIq3VTSP+QPY/8AXvH/AOgirdec9z0o7IKKKKRQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB5DRRRXpHlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB6npH/ACB7H/r3j/8AQRVuqmkf8gex/wCveP8A9BFW6857npR2QUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDyGiiivSPLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD1PSP8AkD2P/XvH/wCgirdVNI/5A9j/ANe8f/oIq3XnPc9KOyCiiikUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeQ0UUV6R5YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAep6R/yB7H/r3j/wDQRVuqmkf8gex/694//QRVuvOe56UdkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8hooor0jywooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9T0j/kD2P/AF7x/wDoIq3VTSP+QPY/9e8f/oIq3XnPc9KOyCiiikUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeQ0UUV6R5YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAep6R/yB7H/AK94/wD0EVbqppH/ACB7H/r3j/8AQRVuvOe56UdkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8hooor0jywooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9T0j/kD2P8A17x/+girdVNI/wCQPY/9e8f/AKCKt15z3PSjsgooopFBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFT+ytO/58LX/vyv8AhR/ZWnf8+Fr/AN+V/wAKt0U7snlXYqf2Vp3/AD4Wv/flf8KP7K07/nwtf+/K/wCFW6KLsOVdip/ZWnf8+Fr/AN+V/wAKP7K07/nwtf8Avyv+FW6KLsOVdip/ZWnf8+Fr/wB+V/wo/srTv+fC1/78r/hVuii7DlXYqf2Vp3/Pha/9+V/wo/srTv8Anwtf+/K/4Vboouw5V2Kn9lad/wA+Fr/35X/Cj+ytO/58LX/vyv8AhVuii7DlXYqf2Vp3/Pha/wDflf8ACj+ytO/58LX/AL8r/hVuii7DlXYqf2Vp3/Pha/8Aflf8KP7K07/nwtf+/K/4Vboouw5V2Kn9lad/z4Wv/flf8KP7K07/AJ8LX/vyv+FW6KLsOVdip/ZWnf8APha/9+V/wo/srTv+fC1/78r/AIVboouw5V2Kn9lad/z4Wv8A35X/AAo/srTv+fC1/wC/K/4Vboouw5V2Kn9lad/z4Wv/AH5X/Cj+ytO/58LX/vyv+FW6KLsOVdip/ZWnf8+Fr/35X/Cj+ytO/wCfC1/78r/hVuii7DlXYqf2Vp3/AD4Wv/flf8KP7K07/nwtf+/K/wCFW6KLsOVdip/ZWnf8+Fr/AN+V/wAKP7K07/nwtf8Avyv+FW6KLsOVdip/ZWnf8+Fr/wB+V/wo/srTv+fC1/78r/hVuii7DlXYqf2Vp3/Pha/9+V/wo/srTv8Anwtf+/K/4Vboouw5V2Kn9lad/wA+Fr/35X/Cj+ytO/58LX/vyv8AhVuii7DlXYqf2Vp3/Pha/wDflf8ACj+ytO/58LX/AL8r/hVuii7DlXYqf2Vp3/Pha/8Aflf8KP7K07/nwtf+/K/4Vboouw5V2ERFjRURQqKMBQMAD0paKKRQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z"
1075
+ }
1076
+ ]
1077
+ },
1078
+ "status": 400,
1079
+ "expect": [
1080
+ {
1081
+ "path": "ok",
1082
+ "equals": false
1083
+ },
1084
+ {
1085
+ "path": "description",
1086
+ "equals": "Bad Request: message caption is too long"
1087
+ }
1088
+ ]
1089
+ },
1090
+ {
1091
+ "name": "16:20: Ana cuts the story to a paragraph",
1092
+ "wait": "20m"
1093
+ },
1094
+ {
1095
+ "name": "Postiz sends the photo again with the short caption",
1096
+ "method": "POST",
1097
+ "path": "/bot{news_token}/sendPhoto?chat_id={channel}&caption=Tide%20Desk%20started%20as%20a%20sketch%20on%20a%20caf%C3%A9%20napkin%20in%20Porto%2C%20the%20week%20our%20second%20release%20slipped%20for%20the%20third%20time.%20That%20napkin%20became%20the%20first%20board%2C%20and%20the%20board%20became%20the%20planner%20we%20use%20every%20Monday.%20Today%20Tide%20plans%20the%20weekly%20releases%20of%20forty%20small%20teams.&parse_mode=HTML",
1098
+ "form": {
1099
+ "parts": [
1100
+ {
1101
+ "name": "photo",
1102
+ "filename": "tide-desk.jpg",
1103
+ "type": "image/jpeg",
1104
+ "base64": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA4KCw0LCQ4NDA0QDw4RFiQXFhQUFiwgIRokNC43NjMuMjI6QVNGOj1OPjIySGJJTlZYXV5dOEVmbWVabFNbXVn/2wBDAQ8QEBYTFioXFypZOzI7WVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVn/wAARCAHgAoADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDt6KKKgoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACivIaK6fq/mcv1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoryGij6v5h9Y8j16ivIaKPq/mH1jyPXqK8hoo+r+YfWPI9eoqppH/IHsf+veP/0EVbrmejOlO6CiiigYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB5DRRRXpHlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB6npH/ACB7H/r3j/8AQRVuqmkf8gex/wCveP8A9BFW6857npR2QUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDyGiiivSPLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD1PSP8AkD2P/XvH/wCgirdVNI/5A9j/ANe8f/oIq3XnPc9KOyCiiikUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeQ0UUV6R5YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAep6R/yB7H/r3j/wDQRVuqmkf8gex/694//QRVuvOe56UdkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8hooor0jywooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9T0j/kD2P/AF7x/wDoIq3VTSP+QPY/9e8f/oIq3XnPc9KOyCiiikUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeQ0UUV6R5YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAep6R/yB7H/AK94/wD0EVbqppH/ACB7H/r3j/8AQRVuvOe56UdkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8hooor0jywooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9T0j/kD2P8A17x/+girdVNI/wCQPY/9e8f/AKCKt15z3PSjsgooopFBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHkNFFFekeWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHqekf8gex/694//QRVuqmkf8gex/694/8A0EVbrznuelHZBRRRSKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPIaKKK9I8sKKKKACiiigAooooAKKKKACiirtpa289vPJLPLG0Kb2VYgwI3KvB3D+9QNK5SorSttInuLyKEfJHIyDe5UHDAEEDPJwQcCqjWc6wecUGzAY/MMgHoSM5A6c47ildBZkFFaMWnRyJaKLhhcXSFo08v5c7mUAtnPJX071CNNuiVAjGScH51+Xgn5ufl4BPOOhougsypRV59MnS3EmBu3OGXIwoVUO7dnGDvH6dc1RouDVgooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD1PSP8AkD2P/XvH/wCgirdVNI/5A9j/ANe8f/oIq3XnPc9KOyCiiikUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeQ0UUV6R5YUUUUAFFFFABRRRQAUUUUAFTwXHkw3Kbd3nxiPOfu/OrZ/8dx+NQUUDNeLWEWa2kltS/wBmaN4wJNvKoinPHOdgPt71DPqrzWQgIlzsSM/vjswuMYT14FZ1FLlQ+ZmhFqEccdqwgY3FqhWN/M+XO5mB246gt69qnl1tppVkdZyS5kYfaGwDgj5Bj5ep9fTpWRRRyoOZmrNrCy20lt9lVYJGZyoYA7iqgHIHXK5PY7jwKyqKKErCbb3CiiimIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPU9I/5A9j/ANe8f/oIq3VTSP8AkD2P/XvH/wCgirdec9z0o7IKKKKRQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB5DRRRXpHlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB6npH/IHsf+veP/0EVbqppH/IHsf+veP/ANBFW6857npR2QUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDyGiiivSPLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD1PSP+QPY/9e8f/oIq3VTSP+QPY/8AXvH/AOgirdec9z0o7IKKKKRQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB5DRRRXpHlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB6npH/ACB7H/r3j/8AQRVuqmkf8gex/wCveP8A9BFW6857npR2QUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDyGiiivSPLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD1PSP8AkD2P/XvH/wCgirdVNI/5A9j/ANe8f/oIq3XnPc9KOyCiiikUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeQ0UUV6R5YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAep6R/yB7H/r3j/wDQRVuqmkf8gex/694//QRVuvOe56UdkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8hooor0jywooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9T0j/kD2P/AF7x/wDoIq3VTSP+QPY/9e8f/oIq3XnPc9KOyCiiikUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeQ0UUV6R5YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAep6R/yB7H/AK94/wD0EVbqppH/ACB7H/r3j/8AQRVuvOe56UdkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8hooor0jywooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9T0j/kD2P8A17x/+girdVNI/wCQPY/9e8f/AKCKt15z3PSjsgooopFBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFT+ytO/58LX/vyv8AhR/ZWnf8+Fr/AN+V/wAKt0U7snlXYqf2Vp3/AD4Wv/flf8KP7K07/nwtf+/K/wCFW6KLsOVdip/ZWnf8+Fr/AN+V/wAKP7K07/nwtf8Avyv+FW6KLsOVdip/ZWnf8+Fr/wB+V/wo/srTv+fC1/78r/hVuii7DlXYqf2Vp3/Pha/9+V/wo/srTv8Anwtf+/K/4Vboouw5V2Kn9lad/wA+Fr/35X/Cj+ytO/58LX/vyv8AhVuii7DlXYqf2Vp3/Pha/wDflf8ACj+ytO/58LX/AL8r/hVuii7DlXYqf2Vp3/Pha/8Aflf8KP7K07/nwtf+/K/4Vboouw5V2Kn9lad/z4Wv/flf8KP7K07/AJ8LX/vyv+FW6KLsOVdip/ZWnf8APha/9+V/wo/srTv+fC1/78r/AIVboouw5V2Kn9lad/z4Wv8A35X/AAo/srTv+fC1/wC/K/4Vboouw5V2Kn9lad/z4Wv/AH5X/Cj+ytO/58LX/vyv+FW6KLsOVdip/ZWnf8+Fr/35X/Cj+ytO/wCfC1/78r/hVuii7DlXYqf2Vp3/AD4Wv/flf8KP7K07/nwtf+/K/wCFW6KLsOVdip/ZWnf8+Fr/AN+V/wAKP7K07/nwtf8Avyv+FW6KLsOVdip/ZWnf8+Fr/wB+V/wo/srTv+fC1/78r/hVuii7DlXYqf2Vp3/Pha/9+V/wo/srTv8Anwtf+/K/4Vboouw5V2Kn9lad/wA+Fr/35X/Cj+ytO/58LX/vyv8AhVuii7DlXYqf2Vp3/Pha/wDflf8ACj+ytO/58LX/AL8r/hVuii7DlXYqf2Vp3/Pha/8Aflf8KP7K07/nwtf+/K/4Vboouw5V2ERFjRURQqKMBQMAD0paKKRQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z"
1105
+ }
1106
+ ]
1107
+ },
1108
+ "status": 200,
1109
+ "expect": [
1110
+ {
1111
+ "path": "result.photo.0.width",
1112
+ "equals": 640
1113
+ },
1114
+ {
1115
+ "path": "result.photo.0.height",
1116
+ "equals": 480
1117
+ },
1118
+ {
1119
+ "path": "result.caption",
1120
+ "contains": "café napkin"
1121
+ }
1122
+ ]
1123
+ },
1124
+ {
1125
+ "name": "Monday 19 January, 11:00",
1126
+ "wait": "6880m"
1127
+ },
1128
+ {
1129
+ "name": "Postiz publishes the product demo video",
1130
+ "method": "POST",
1131
+ "path": "/bot{news_token}/sendVideo?chat_id={channel}&caption=Three%20seconds%20of%20Tide%200.9%3A%20a%20release%20dragged%20to%20Friday.&parse_mode=HTML",
1132
+ "form": {
1133
+ "parts": [
1134
+ {
1135
+ "name": "video",
1136
+ "filename": "tide-demo.mp4",
1137
+ "type": "video/mp4",
1138
+ "base64": "AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAARGbW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAAC7gAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAA3B0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAC7gAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAUAAAAC0AAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAu4AAAIAAABAAAAAALobWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAAoAAAAeABVxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACk21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAlNzdGJsAAAAw3N0c2QAAAAAAAAAAQAAALNhdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAUAAtABIAAAASAAAAAAAAAABFUxhdmM2Mi4yOC4xMDIgbGlieDI2NAAAAAAAAAAAAAAAGP//AAAAOWF2Y0MBZAAV/+EAG2dkABWscgRBQZ+fARAAAAMAEAAAAwFA8WLYRgEAB2joQ4OSyLD9+PgAAAAAEHBhc3AAAAABAAAAAQAAABRidHJ0AAAAAAAANMIAAAAAAAAAGHN0dHMAAAAAAAAAAQAAAB4AAAQAAAAAFHN0c3MAAAAAAAAAAQAAAAEAAACgY3R0cwAAAAAAAAASAAAAAQAACAAAAAABAAAkAAAAAAEAABAAAAAAAwAAAAAAAAADAAAEAAAAAAEAACQAAAAAAQAAEAAAAAADAAAAAAAAAAMAAAQAAAAAAQAAFAAAAAABAAAIAAAAAAEAAAAAAAAAAQAABAAAAAABAAAIAAAAAAEAACQAAAAAAQAAEAAAAAADAAAAAAAAAAMAAAQAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAAeAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAAH4AAAAaYAAACBAAAAPAAAAEUAAABDAAAAIgAAACUAAAAvAAABZgAAAJAAAAArAAAALwAAACsAAAAdAAAAKgAAADMAAAEoAAAAVQAAACIAAAAmAAAAzwAAAVAAAACcAAAALQAAADEAAAAoAAAAKgAAADAAAAAzAAAAFHN0Y28AAAAAAAAAAQAABHYAAABidWR0YQAAAFptZXRhAAAAAAAAACFoZGxyAAAAAAAAAABtZGlyYXBwbAAAAAAAAAAAAAAAAC1pbHN0AAAAJal0b28AAAAdZGF0YQAAAAEAAAAATGF2ZjYyLjEyLjEwMgAAAAhmcmVlAAAT0W1kYXQAAAKwBgX//6zcRem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTY1IHIzMjIyIGIzNTYwNWEgLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDI1IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcveDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MTYgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDEzMyBtZT11bWggc3VibWU9MTAgcHN5PTEgcHN5X3JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0yNCBjaHJvbWFfbWU9MSB0cmVsbGlzPTIgOHg4ZGN0PTEgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9OCBiX3B5cmFtaWQ9MiBiX2FkYXB0PTIgYl9iaWFzPTAgZGlyZWN0PTMgd2VpZ2h0Yj0xIG9wZW5fZ29wPTAgd2VpZ2h0cD0yIGtleWludD0yNTAga2V5aW50X21pbj0xMCBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNoPTAgcmNfbG9va2FoZWFkPTYwIHJjPWNyZiBtYnRyZWU9MSBjcmY9NDAuMCBxY29tcD0wLjYwIHFwbWluPTAgcXBtYXg9Njkg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"
1139
+ }
1140
+ ]
1141
+ },
1142
+ "status": 200,
1143
+ "expect": [
1144
+ {
1145
+ "path": "result.video.duration",
1146
+ "equals": 3
1147
+ },
1148
+ {
1149
+ "path": "result.video.width",
1150
+ "equals": 320
1151
+ },
1152
+ {
1153
+ "path": "result.video.height",
1154
+ "equals": 180
1155
+ },
1156
+ {
1157
+ "path": "result.video.mime_type",
1158
+ "equals": "video/mp4"
1159
+ }
1160
+ ]
1161
+ },
1162
+ {
1163
+ "name": "15:00",
1164
+ "wait": "4h"
1165
+ },
1166
+ {
1167
+ "name": "Postiz publishes the white paper as a PDF",
1168
+ "method": "POST",
1169
+ "path": "/bot{news_token}/sendDocument?chat_id={channel}&caption=How%20a%20two-person%20team%20ships%20every%20week%3A%20our%20notes%2C%20as%20a%20PDF.&parse_mode=HTML",
1170
+ "form": {
1171
+ "parts": [
1172
+ {
1173
+ "name": "document",
1174
+ "filename": "tide-whitepaper.pdf",
1175
+ "type": "application/pdf",
1176
+ "base64": "JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgNjEyIDc5Ml0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggOTU+PnN0cmVhbQpCVCAvRjEgMTggVGYgNzIgNzIwIFRkIChUaWRlOiBzaGlwcGluZyB3ZWVrbHkgcmVsZWFzZXMgd2l0aCBhIHR3by1wZXJzb24gdGVhbSkgVGogRVQKZW5kc3RyZWFtIGVuZG9iago1IDAgb2JqPDwvVHlwZS9Gb250L1N1YnR5cGUvVHlwZTEvQmFzZUZvbnQvSGVsdmV0aWNhPj5lbmRvYmoKdHJhaWxlcjw8L1Jvb3QgMSAwIFI+PgolJUVPRgo="
1177
+ }
1178
+ ]
1179
+ },
1180
+ "status": 200,
1181
+ "expect": [
1182
+ {
1183
+ "path": "result.document.file_name",
1184
+ "equals": "tide-whitepaper.pdf"
1185
+ },
1186
+ {
1187
+ "path": "result.document.mime_type",
1188
+ "equals": "application/pdf"
1189
+ }
1190
+ ]
1191
+ },
1192
+ {
1193
+ "name": "Friday 27 February, 17:00",
1194
+ "wait": "938h"
1195
+ },
1196
+ {
1197
+ "name": "Ana retires the agent: in BotFather she makes a new token (/token), which revokes the one Harness holds",
1198
+ "method": "POST",
1199
+ "path": "/_twin/bots/tidelabs_agent_bot/token",
1200
+ "body": {
1201
+ "owner": "{ana}"
1202
+ },
1203
+ "status": 200,
1204
+ "expect": [
1205
+ {
1206
+ "path": "token",
1207
+ "notContains": "{agent_token}"
1208
+ }
1209
+ ]
1210
+ },
1211
+ {
1212
+ "name": "Harness, still running on her laptop, polls with the old token and is refused",
1213
+ "method": "POST",
1214
+ "path": "/bot{agent_token}/getUpdates",
1215
+ "body": {
1216
+ "offset": "{agent_next}",
1217
+ "limit": 100,
1218
+ "timeout": 30
1219
+ },
1220
+ "status": 401,
1221
+ "expect": [
1222
+ {
1223
+ "path": "description",
1224
+ "equals": "Unauthorized"
1225
+ }
1226
+ ]
1227
+ }
1228
+ ]
1229
+ }