writeEvents(w, completedEvent([]any{messageItem("Hello from the agent.")}, 100, 0, 5))
}
writeEvents(w, completedEvent([]any{messageItem("Hello from the agent.")}, 100, 0, 5))
}
- telegram := newFakeBot(t)
- bot, _ := startTestBot(t, telegram)
+ telegram := newTelegramFake(t)
+ bot, _ := telegramStartTestBot(t, telegram)
socket := startTestDaemonWithBot(t, server, bot)
terminal := startTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
socket := startTestDaemonWithBot(t, server, bot)
terminal := startTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
- waitForSent(t, telegram, "Hello from the agent.")
- require.True(t, slices.ContainsFunc(telegram.Calls(), func(call fakeBotCall) bool {
+ telegramWaitForSent(t, telegram, "Hello from the agent.")
+ require.True(t, slices.ContainsFunc(telegram.Calls(), func(call TelegramFakeCall) bool {
return call.method == "sendChatAction" && call.params["action"] == "typing"
}))
terminal.Type("hi from the desk")
return call.method == "sendChatAction" && call.params["action"] == "typing"
}))
terminal.Type("hi from the desk")
- require.Equal(t, []string{"Hello from the agent.", "[terminal] hi from the desk", "Hello from the agent."}, waitForSent(t, telegram, "Hello from the agent.", "[terminal] hi from the desk", "Hello from the agent."))
+ require.Equal(t, []string{"Hello from the agent.", "[terminal] hi from the desk", "Hello from the agent."}, telegramWaitForSent(t, telegram, "Hello from the agent.", "[terminal] hi from the desk", "Hello from the agent."))
- telegram := newFakeBot(t)
- bot, logs := startTestBot(t, telegram)
+ telegram := newTelegramFake(t)
+ bot, logs := telegramStartTestBot(t, telegram)
socket := startTestDaemonWithBot(t, newFakeResponses(t), bot)
terminal := startTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
socket := startTestDaemonWithBot(t, newFakeResponses(t), bot)
terminal := startTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
- for id, message := range []*botMessage{group, stranger, unsigned, nil} {
- telegram.Add(botUpdate{
+ for id, message := range []*TelegramMessage{group, stranger, unsigned, nil} {
+ telegram.Add(TelegramUpdate{
UpdateID: int64(10 + id),
Message: message,
})
}
require.Eventually(t, func() bool {
UpdateID: int64(10 + id),
Message: message,
})
}
require.Eventually(t, func() bool {
return err == nil && offset == 14
}, 10*time.Second, time.Millisecond)
return err == nil && offset == 14
}, 10*time.Second, time.Millisecond)
- telegram := newFakeBot(t)
- bot, _ := startTestBot(t, telegram)
+ telegram := newTelegramFake(t)
+ bot, _ := telegramStartTestBot(t, telegram)
- telegram := newFakeBot(t)
- bot, _ := startTestBot(t, telegram)
+ telegram := newTelegramFake(t)
+ bot, _ := telegramStartTestBot(t, telegram)
- waitForSent(t, telegram, "Error: interrupted", "No turn runs.")
+ telegramWaitForSent(t, telegram, "Error: interrupted", "No turn runs.")
writeEvents(w, completedEvent([]any{messageItem("ok")}, 100, 0, 5))
}
writeEvents(w, completedEvent([]any{messageItem("ok")}, 100, 0, 5))
}
- telegram := newFakeBot(t)
- bot, _ := startTestBot(t, telegram)
- require.NoError(t, saveOffset(bot.offsetPath, 10))
+ telegram := newTelegramFake(t)
+ bot, _ := telegramStartTestBot(t, telegram)
+ require.NoError(t, telegramSaveOffset(bot.offsetPath, 10))
})
socket := startTestDaemonWithBot(t, server, bot)
terminal := startTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
})
socket := startTestDaemonWithBot(t, server, bot)
terminal := startTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
require.Equal(t, float64(10), telegram.Calls()[0].params["offset"])
require.NotContains(t, terminal.Output(), "handled before the restart")
require.Eventually(t, func() bool {
require.Equal(t, float64(10), telegram.Calls()[0].params["offset"])
require.NotContains(t, terminal.Output(), "handled before the restart")
require.Eventually(t, func() bool {
return err == nil && offset == 11
}, 10*time.Second, time.Millisecond)
}
return err == nil && offset == 11
}, 10*time.Second, time.Millisecond)
}
writeEvents(w, completedEvent([]any{messageItem("ok")}, 100, 0, 5))
}
writeEvents(w, completedEvent([]any{messageItem("ok")}, 100, 0, 5))
}
require.Contains(t, logs.String(), "answered 502")
require.Contains(t, logs.String(), "answered 429")
require.Contains(t, logs.String(), "answered 502")
require.Contains(t, logs.String(), "answered 429")
text: "hello",
})
require.Equal(t, []string{"hello"}, telegram.Sent())
require.Len(t, telegram.Calls(), 2)
require.Contains(t, logs.String(), "no valid answer")
text: "hello",
})
require.Equal(t, []string{"hello"}, telegram.Sent())
require.Len(t, telegram.Calls(), 2)
require.Contains(t, logs.String(), "no valid answer")
writeEvents(w, completedEvent([]any{messageItem(reply)}, 100, 0, 5))
}
writeEvents(w, completedEvent([]any{messageItem(reply)}, 100, 0, 5))
}
- telegram := newFakeBot(t)
- bot, _ := startTestBot(t, telegram)
+ telegram := newTelegramFake(t)
+ bot, _ := telegramStartTestBot(t, telegram)
socket := startTestDaemonWithBot(t, server, bot)
terminal := startTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
terminal.Type("make **it** so")
socket := startTestDaemonWithBot(t, server, bot)
terminal := startTestClient(t, socket)
terminal.WaitFor(t, "[connected to OneChat]")
terminal.Type("make **it** so")
- waitForSent(t, telegram, "[terminal] make **it** so", reply)
+ telegramWaitForSent(t, telegram, "[terminal] make **it** so", reply)
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)
}
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
bot.post(t.Context(), Event{
Kind: "reply",
Text: "a **secret** word",
bot.post(t.Context(), Event{
Kind: "reply",
Text: "a **secret** word",
require.Equal(t, tc.sent, telegram.Sent())
require.Equal(t, 1, strings.Count(logs.String(), "\n"))
require.Contains(t, logs.String(), tc.logText)
require.Equal(t, tc.sent, telegram.Sent())
require.Equal(t, 1, strings.Count(logs.String(), "\n"))
require.Contains(t, logs.String(), tc.logText)
require.NotContains(t, logs.String(), "secret word")
calls := telegram.Calls()
require.NotContains(t, logs.String(), "secret word")
calls := telegram.Calls()
- telegram := newFakeBot(t)
- bot, _ := startTestBot(t, telegram)
+ telegram := newTelegramFake(t)
+ bot, _ := telegramStartTestBot(t, telegram)
- telegram := newFakeBot(t)
- telegram.fail = func(call fakeBotCall) (int, string) {
+ telegram := newTelegramFake(t)
+ telegram.fail = func(call TelegramFakeCall) (int, string) {
- bot, logs := startTestBot(t, telegram)
- text, entities := markdownEntities("a **secret** word")
- bot.deliver(t.Context(), botPart{
+ bot, logs := telegramStartTestBot(t, telegram)
+ text, entities := telegramMarkdownEntities("a **secret** word")
+ bot.deliver(t.Context(), TelegramPart{
require.Equal(t, []string{"a secret word"}, telegram.Sent())
require.Equal(t, 1, strings.Count(logs.String(), "\n"))
require.Contains(t, logs.String(), "entities refused")
require.Equal(t, []string{"a secret word"}, telegram.Sent())
require.Equal(t, 1, strings.Count(logs.String(), "\n"))
require.Contains(t, logs.String(), "entities refused")
require.NotContains(t, logs.String(), "secret word")
}
func TestBotLogsNoTokenWhenTheNetworkFails(t *testing.T) {
require.NotContains(t, logs.String(), "secret word")
}
func TestBotLogsNoTokenWhenTheNetworkFails(t *testing.T) {
startTestDaemonWithBot(t, newFakeResponses(t), bot)
require.Eventually(t, func() bool {
return strings.Count(logs.String(), "no valid answer") >= 2
}, 10*time.Second, time.Millisecond)
startTestDaemonWithBot(t, newFakeResponses(t), bot)
require.Eventually(t, func() bool {
return strings.Count(logs.String(), "no valid answer") >= 2
}, 10*time.Second, time.Millisecond)
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
- require.Equal(t, tc.parts, splitMessage(tc.text, tc.limit))
+ require.Equal(t, tc.parts, telegramSplitMessage(tc.text, tc.limit))
require.Len(t, parts, 3)
require.Equal(t, long, strings.Join(parts, ""))
}
func TestSplitEntitiesCutsAnEntityAcrossASplit(t *testing.T) {
require.Len(t, parts, 3)
require.Equal(t, long, strings.Join(parts, ""))
}
func TestSplitEntitiesCutsAnEntityAcrossASplit(t *testing.T) {
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
- require.Equal(t, tc.parts, splitRich(tc.markdown, tc.limit))
+ require.Equal(t, tc.parts, telegramSplitRich(tc.markdown, tc.limit))
require.Equal(t, long, strings.Join(parts, ""))
}
require.Equal(t, long, strings.Join(parts, ""))
}
mode: 0o600,
errorText: "numeric Telegram user ID",
},
{
name: "unknown field is refused",
mode: 0o600,
errorText: "numeric Telegram user ID",
},
{
name: "unknown field is refused",
- content: `{"token": "` + testBotToken + `", "owner": 4242, "chat": 1}`,
+ content: `{"token": "` + telegramTestToken + `", "owner": 4242, "chat": 1}`,
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
dir := t.TempDir()
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
dir := t.TempDir()
require.NoError(t, os.WriteFile(path, []byte(tc.content), tc.mode))
require.NoError(t, os.Chmod(path, tc.mode))
require.NoError(t, os.WriteFile(path, []byte(tc.content), tc.mode))
require.NoError(t, os.Chmod(path, tc.mode))
- require.Equal(t, botConfig{
- Token: testBotToken,
- Owner: testOwner,
+ require.Equal(t, TelegramConfig{
+ Token: telegramTestToken,
+ Owner: telegramTestOwner,
-// startTestBot returns a bot of testOwner on server, with its offset file in a
-// temporary directory and short waits, and the buffer of its log.
-func startTestBot(t *testing.T, server *fakeBot) (*telegramBot, *syncBuffer) {
+// telegramStartTestBot returns a bot of telegramTestOwner on server, with its
+// offset file in a temporary directory and short waits, and the buffer of its
+// log.
+func telegramStartTestBot(t *testing.T, server *TelegramFake) (*TelegramBot, *syncBuffer) {
- bot := newTelegramBot(newBotAPI(server.URL, testBotToken), testOwner, filepath.Join(t.TempDir(), offsetFileName), log.New(logs, "", 0))
+ bot := newTelegramBot(newTelegramAPI(server.URL, telegramTestToken), telegramTestOwner, filepath.Join(t.TempDir(), telegramOffsetFileName), log.New(logs, "", 0))
-// waitForSent waits until the bot sent the texts in order, and returns them.
-func waitForSent(t *testing.T, server *fakeBot, texts ...string) []string {
+// telegramWaitForSent waits until the bot sent the texts in order, and returns
+// them.
+func telegramWaitForSent(t *testing.T, server *TelegramFake, texts ...string) []string {