modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem("Hello from the agent.")}, 100, 0, 5))
}
modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem("Hello from the agent.")}, 100, 0, 5))
}
require.Empty(t, telegram.Sent())
require.NotContains(t, terminal.Output(), "secret")
require.NotContains(t, logs.String(), "secret")
require.Empty(t, telegram.Sent())
require.NotContains(t, terminal.Output(), "secret")
require.NotContains(t, logs.String(), "secret")
modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem("ok")}, 100, 0, 5))
}
modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem("ok")}, 100, 0, 5))
}
terminal.WaitFor(t, "[connected to OneChat]")
telegramWaitForSent(t, telegram, "ok")
terminal.WaitFor(t, "[connected to OneChat]")
telegramWaitForSent(t, telegram, "ok")
- require.Equal(t, float64(10), telegram.Calls()[0].params["offset"])
+ require.InDelta(t, float64(10), telegram.Calls()[0].params["offset"], 0)
require.NotContains(t, terminal.Output(), "handled before the restart")
require.Eventually(t, func() bool {
require.NotContains(t, terminal.Output(), "handled before the restart")
require.Eventually(t, func() bool {
modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem("ok")}, 100, 0, 5))
}
modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem("ok")}, 100, 0, 5))
}
- require.Contains(t, logs.String(), "answered 502")
- require.Contains(t, logs.String(), "answered 429")
+ require.Contains(t, logs.String(), "502")
+ require.Contains(t, logs.String(), "429")
require.Equal(t, []string{"hello"}, telegram.Sent())
require.Len(t, telegram.Calls(), 2)
require.Equal(t, []string{"hello"}, telegram.Sent())
require.Len(t, telegram.Calls(), 2)
- require.Contains(t, logs.String(), "cannot send replies to Telegram: no answer in 50ms (next try in 1ms)\n")
- require.Contains(t, logs.String(), "replies go to Telegram again, after ")
+ require.Contains(t, logs.String(), "send failed: no answer in 50ms (retry in 1ms)\n")
+ require.Contains(t, logs.String(), "send back after ")
require.Equal(t, 2, strings.Count(logs.String(), "\n"))
require.NotContains(t, logs.String(), telegramTestToken)
}
require.Equal(t, 2, strings.Count(logs.String(), "\n"))
require.NotContains(t, logs.String(), telegramTestToken)
}
func TestRepliesGoAsRichMessages(t *testing.T) {
reply := "**Done.** The table:\n\n| Name | Size |\n|:-----|-----:|\n| `a.go` | 10 |\n\n- one\n- two\n\n```go\nx := 1\n```"
server := newModelFake(t)
func TestRepliesGoAsRichMessages(t *testing.T) {
reply := "**Done.** The table:\n\n| Name | Size |\n|:-----|-----:|\n| `a.go` | 10 |\n\n- one\n- two\n\n```go\nx := 1\n```"
server := newModelFake(t)
modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem(reply)}, 100, 0, 5))
}
modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem(reply)}, 100, 0, 5))
}
telegramWaitForSent(t, telegram, telegramTextOnly)
var sends []TelegramFakeCall
telegramWaitForSent(t, telegram, telegramTextOnly)
var sends []TelegramFakeCall
for _, call := range telegram.Calls() {
if call.method == "sendMessage" || call.method == "sendRichMessage" {
sends = append(sends, call)
for _, call := range telegram.Calls() {
if call.method == "sendMessage" || call.method == "sendRichMessage" {
sends = append(sends, call)
methods: []string{"sendRichMessage", "sendMessage"},
sent: []string{"a secret word"},
lines: 1,
methods: []string{"sendRichMessage", "sendMessage"},
sent: []string{"a secret word"},
lines: 1,
methods: []string{"sendRichMessage", "sendMessage"},
sent: []string{"a secret word"},
lines: 1,
methods: []string{"sendRichMessage", "sendMessage"},
sent: []string{"a secret word"},
lines: 1,
methods: []string{"sendRichMessage", "sendRichMessage"},
sent: []string{"a **secret** word"},
lines: 2,
methods: []string{"sendRichMessage", "sendRichMessage"},
sent: []string{"a **secret** word"},
lines: 2,
methods: []string{"sendRichMessage", "sendRichMessage"},
sent: []string{"a **secret** word"},
lines: 2,
methods: []string{"sendRichMessage", "sendRichMessage"},
sent: []string{"a **secret** word"},
lines: 2,
for _, call := range telegram.Calls() {
methods = append(methods, call.method)
}
for _, call := range telegram.Calls() {
methods = append(methods, call.method)
}
- require.True(t, reply == strings.Join(fallback, "")+telegramUnescapeTags(rich[0]), "reply is not sent once and whole")
+ require.Equal(t, reply, strings.Join(fallback, "")+telegramUnescapeTags(rich[0]), "reply is not sent once and whole")
require.Nil(t, calls[1].params["entities"])
require.Equal(t, []string{"a secret word"}, telegram.Sent())
require.Equal(t, 1, strings.Count(logs.String(), "\n"))
require.Nil(t, calls[1].params["entities"])
require.Equal(t, []string{"a secret word"}, telegram.Sent())
require.Equal(t, 1, strings.Count(logs.String(), "\n"))
- require.Contains(t, logs.String(), "a reply goes as plain text, because Telegram refused its formatting")
+ require.Contains(t, logs.String(), "reply sent as plain text")
require.NotContains(t, logs.String(), telegramTestToken)
require.NotContains(t, logs.String(), "secret word")
}
require.NotContains(t, logs.String(), telegramTestToken)
require.NotContains(t, logs.String(), "secret word")
}
daemonStartTestWithBot(t, newModelFake(t), bot)
require.Eventually(t, func() bool {
daemonStartTestWithBot(t, newModelFake(t), bot)
require.Eventually(t, func() bool {
}, 10*time.Second, time.Millisecond)
require.NotContains(t, logs.String(), telegramTestToken)
}
func TestBotLogsAnOutageOnlyAtItsStartAndEnd(t *testing.T) {
server := newModelFake(t)
}, 10*time.Second, time.Millisecond)
require.NotContains(t, logs.String(), telegramTestToken)
}
func TestBotLogsAnOutageOnlyAtItsStartAndEnd(t *testing.T) {
server := newModelFake(t)
modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem("ok")}, 100, 0, 5))
}
modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem("ok")}, 100, 0, 5))
}
- require.Equal(t, "cannot get messages from Telegram: Telegram answered 502 Bad Gateway (next try in 1ms)", lines[0])
- require.Regexp(t, `^messages from Telegram come again, after [0-9]+m?s$`, lines[1])
+ require.Equal(t, "receive failed: 502 Bad Gateway (retry in 1ms)", lines[0])
+ require.Regexp(t, `^receive back after [0-9]+m?s$`, lines[1])
require.NotContains(t, logs.String(), "secret word")
require.NotContains(t, logs.String(), strconv.FormatInt(telegramTestOwner, 10))
}
require.NotContains(t, logs.String(), "secret word")
require.NotContains(t, logs.String(), strconv.FormatInt(telegramTestOwner, 10))
}