/start command #646
@@ -14,7 +14,8 @@ import (
|
|||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
const unauthorizedMessage = "Access denied.\n\nYour Telegram account is not authorized to perform treasury operations."
|
const unauthorizedMessage = "Sorry, your Telegram account is not authorized to perform treasury operations."
|
||||||
|
const welcomeMessage = "Welcome to tgsettle treasury bot.\n\nUse /fund to credit your account and /withdraw to debit it.\nAfter entering an amount, use /confirm or /cancel."
|
||||||
|
|
||||||
type SendTextFunc func(ctx context.Context, chatID string, text string) error
|
type SendTextFunc func(ctx context.Context, chatID string, text string) error
|
||||||
|
|
||||||
@@ -131,6 +132,9 @@ func (r *Router) HandleUpdate(ctx context.Context, update *model.TelegramWebhook
|
|||||||
|
|
||||||
command := parseCommand(text)
|
command := parseCommand(text)
|
||||||
switch command {
|
switch command {
|
||||||
|
case "start":
|
||||||
|
_ = r.sendText(ctx, chatID, welcomeMessage)
|
||||||
|
return true
|
||||||
case "fund":
|
case "fund":
|
||||||
r.startAmountDialog(ctx, userID, accountID, chatID, storagemodel.TreasuryOperationFund)
|
r.startAmountDialog(ctx, userID, accountID, chatID, storagemodel.TreasuryOperationFund)
|
||||||
return true
|
return true
|
||||||
@@ -158,7 +162,7 @@ func (r *Router) HandleUpdate(ctx context.Context, update *model.TelegramWebhook
|
|||||||
}
|
}
|
||||||
|
|
||||||
if strings.HasPrefix(text, "/") {
|
if strings.HasPrefix(text, "/") {
|
||||||
_ = r.sendText(ctx, chatID, "Supported commands:\n/fund\n/withdraw\n/confirm\n/cancel")
|
_ = r.sendText(ctx, chatID, "Supported commands:\n/start\n/fund\n/withdraw\n/confirm\n/cancel")
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -156,3 +156,65 @@ func TestRouterEmptyAllowedChats_UnauthorizedUserGetsDenied(t *testing.T) {
|
|||||||
t.Fatalf("unexpected message: %q", sent[0])
|
t.Fatalf("unexpected message: %q", sent[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRouterStartAuthorizedShowsWelcome(t *testing.T) {
|
||||||
|
var sent []string
|
||||||
|
router := NewRouter(
|
||||||
|
mloggerfactory.NewLogger(false),
|
||||||
|
fakeService{},
|
||||||
|
func(_ context.Context, _ string, text string) error {
|
||||||
|
sent = append(sent, text)
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
map[string]string{"123": "acct-1"},
|
||||||
|
)
|
||||||
|
handled := router.HandleUpdate(context.Background(), &model.TelegramWebhookUpdate{
|
||||||
|
Message: &model.TelegramMessage{
|
||||||
|
ChatID: "777",
|
||||||
|
FromUserID: "123",
|
||||||
|
Text: "/start",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if !handled {
|
||||||
|
t.Fatalf("expected update to be handled")
|
||||||
|
}
|
||||||
|
if len(sent) != 1 {
|
||||||
|
t.Fatalf("expected one message, got %d", len(sent))
|
||||||
|
}
|
||||||
|
if sent[0] != welcomeMessage {
|
||||||
|
t.Fatalf("unexpected message: %q", sent[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRouterStartUnauthorizedGetsDenied(t *testing.T) {
|
||||||
|
var sent []string
|
||||||
|
router := NewRouter(
|
||||||
|
mloggerfactory.NewLogger(false),
|
||||||
|
fakeService{},
|
||||||
|
func(_ context.Context, _ string, text string) error {
|
||||||
|
sent = append(sent, text)
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
map[string]string{"123": "acct-1"},
|
||||||
|
)
|
||||||
|
handled := router.HandleUpdate(context.Background(), &model.TelegramWebhookUpdate{
|
||||||
|
Message: &model.TelegramMessage{
|
||||||
|
ChatID: "777",
|
||||||
|
FromUserID: "999",
|
||||||
|
Text: "/start",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if !handled {
|
||||||
|
t.Fatalf("expected update to be handled")
|
||||||
|
}
|
||||||
|
if len(sent) != 1 {
|
||||||
|
t.Fatalf("expected one message, got %d", len(sent))
|
||||||
|
}
|
||||||
|
if sent[0] != unauthorizedMessage {
|
||||||
|
t.Fatalf("unexpected message: %q", sent[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user