telegram_bot_test.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package server
  2. import (
  3. "testing"
  4. "time"
  5. "vocat/internal/modem"
  6. )
  7. func TestParseTelegramCommand(t *testing.T) {
  8. command, remainder := parseTelegramCommand(" /sms@vocat_bot EC20 +447700900123 hello world ")
  9. if command != "sms" || remainder != "EC20 +447700900123 hello world" {
  10. t.Fatalf("parseTelegramCommand() = %q, %q", command, remainder)
  11. }
  12. if command, _ := parseTelegramCommand("ordinary message"); command != "" {
  13. t.Fatalf("non-command parsed as %q", command)
  14. }
  15. }
  16. func TestSplitTelegramArgumentsPreservesMessageBody(t *testing.T) {
  17. parts := splitTelegramArguments(" EC20 +447700900123 code with spaces ", 3)
  18. if len(parts) != 3 || parts[0] != "EC20" || parts[1] != "+447700900123" || parts[2] != "code with spaces" {
  19. t.Fatalf("splitTelegramArguments() = %#v", parts)
  20. }
  21. }
  22. func TestValidTelegramDialNumber(t *testing.T) {
  23. for _, value := range []string{"10086", "+447700900123", "12345678901234567890"} {
  24. if !validTelegramDialNumber(value) {
  25. t.Errorf("validTelegramDialNumber(%q) = false", value)
  26. }
  27. }
  28. for _, value := range []string{"12", "+", "123;ATH", "12 34", "123456789012345678901"} {
  29. if validTelegramDialNumber(value) {
  30. t.Errorf("validTelegramDialNumber(%q) = true", value)
  31. }
  32. }
  33. }
  34. func TestTelegramPendingActionIsAuthorizedOneShot(t *testing.T) {
  35. bot := &telegramBot{pending: make(map[string]telegramPendingAction)}
  36. action := telegramPendingAction{Kind: "call", ChatID: -1001, AdminID: 42, CreatedAt: time.Now()}
  37. token, err := bot.putPending(action)
  38. if err != nil {
  39. t.Fatal(err)
  40. }
  41. if _, ok := bot.takePending(token, -1001, 41); ok {
  42. t.Fatal("different administrator consumed pending action")
  43. }
  44. if _, ok := bot.takePending(token, -1001, 42); ok {
  45. t.Fatal("an unauthorized attempt must invalidate the one-time action")
  46. }
  47. }
  48. func TestFormatTelegramATIncludesFinalResult(t *testing.T) {
  49. if got := formatTelegramAT(modem.Response{Final: "OK"}); got != "OK" {
  50. t.Fatalf("formatTelegramAT(OK) = %q", got)
  51. }
  52. if got := formatTelegramAT(modem.Response{Lines: []string{"+CLCC: 1"}, Final: "OK"}); got != "+CLCC: 1\nOK" {
  53. t.Fatalf("formatTelegramAT(lines) = %q", got)
  54. }
  55. }