telegram := newTelegramFake(t)
bot, _ := telegramStartTestBot(t, telegram)
- socket := startTestDaemonWithBot(t, server, bot)
+ socket := daemonStartTestWithBot(t, server, bot)
terminal := terminalStartTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
func TestBotIgnoresEveryoneButTheOwner(t *testing.T) {
telegram := newTelegramFake(t)
bot, logs := telegramStartTestBot(t, telegram)
- socket := startTestDaemonWithBot(t, newModelFake(t), bot)
+ socket := daemonStartTestWithBot(t, newModelFake(t), bot)
terminal := terminalStartTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
func TestBotAnswersThatOnlyTextIsSupported(t *testing.T) {
telegram := newTelegramFake(t)
bot, _ := telegramStartTestBot(t, telegram)
- startTestDaemonWithBot(t, newModelFake(t), bot)
+ daemonStartTestWithBot(t, newModelFake(t), bot)
telegram.Add(TelegramUpdate{
UpdateID: 1,
telegram := newTelegramFake(t)
bot, _ := telegramStartTestBot(t, telegram)
- startTestDaemonWithBot(t, server, bot)
+ daemonStartTestWithBot(t, server, bot)
telegram.Add(TelegramUpdate{
UpdateID: 1,
Message: telegramOwnerMessage("new after the restart"),
})
- socket := startTestDaemonWithBot(t, server, bot)
+ socket := daemonStartTestWithBot(t, server, bot)
terminal := terminalStartTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
telegramWaitForSent(t, telegram, "ok")
}
bot, logs := telegramStartTestBot(t, telegram)
- startTestDaemonWithBot(t, server, bot)
+ daemonStartTestWithBot(t, server, bot)
telegram.Add(TelegramUpdate{
UpdateID: 1,
telegram := newTelegramFake(t)
bot, _ := telegramStartTestBot(t, telegram)
- socket := startTestDaemonWithBot(t, server, bot)
+ socket := daemonStartTestWithBot(t, server, bot)
terminal := terminalStartTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
require.Equal(t, []string{paragraphs, table}, telegram.Sent())
}
+func TestReplyTagsGoAsText(t *testing.T) {
+ testCases := []struct {
+ name string
+ status int
+ sent []string
+ }{
+ {
+ name: "rich message escapes the tag outside code",
+ sent: []string{"a \\<details> tag and `<b>`"},
+ },
+ {
+ name: "entity fallback shows the tag as written",
+ status: http.StatusBadRequest,
+ sent: []string{"a <details> tag and <b>"},
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ telegram := newTelegramFake(t)
+ telegram.fail = func(call TelegramFakeCall) (int, string) {
+ if call.method != "sendRichMessage" {
+ return 0, ""
+ }
+
+ return tc.status, "Bad Request"
+ }
+
+ bot, _ := telegramStartTestBot(t, telegram)
+ bot.post(t.Context(), Event{
+ Kind: "reply",
+ Text: "a <details> tag and `<b>`",
+ })
+
+ require.Equal(t, tc.sent, telegram.Sent())
+ })
+ }
+}
+
+func TestLongReplySplitCountsTheEscapedTags(t *testing.T) {
+ paragraph := "A <b> tag.\n\n"
+ count := telegramRichBytes / len(paragraph)
+ reply := strings.Repeat(paragraph, count)
+ require.LessOrEqual(t, len(reply), telegramRichBytes)
+
+ telegram := newTelegramFake(t)
+ bot, _ := telegramStartTestBot(t, telegram)
+ bot.post(t.Context(), Event{
+ Kind: "reply",
+ Text: reply,
+ })
+
+ sent := telegram.Sent()
+ require.Len(t, sent, 2)
+ require.Equal(t, telegramEscapeTags(reply), strings.Join(sent, ""))
+
+ for _, markdown := range sent {
+ require.LessOrEqual(t, len(markdown), telegramRichBytes)
+ }
+}
+
func TestRefusedEntitiesGoAgainAsPlainText(t *testing.T) {
telegram := newTelegramFake(t)
telegram.fail = func(call TelegramFakeCall) (int, string) {
telegram.Close()
bot, logs := telegramStartTestBot(t, telegram)
- startTestDaemonWithBot(t, newModelFake(t), bot)
+ daemonStartTestWithBot(t, newModelFake(t), bot)
require.Eventually(t, func() bool {
return strings.Count(logs.String(), "no valid answer") >= 2