util_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package server
  2. import (
  3. "encoding/json"
  4. "firebase.google.com/go/messaging"
  5. "github.com/stretchr/testify/require"
  6. "strings"
  7. "testing"
  8. )
  9. func TestMaybeTruncateFCMMessage(t *testing.T) {
  10. origMessage := strings.Repeat("this is a long string", 300)
  11. origFCMMessage := &messaging.Message{
  12. Topic: "mytopic",
  13. Data: map[string]string{
  14. "id": "abcdefg",
  15. "time": "1641324761",
  16. "event": "message",
  17. "topic": "mytopic",
  18. "priority": "0",
  19. "tags": "",
  20. "title": "",
  21. "message": origMessage,
  22. },
  23. Android: &messaging.AndroidConfig{
  24. Priority: "high",
  25. },
  26. }
  27. origMessageLength := len(origFCMMessage.Data["message"])
  28. serializedOrigFCMMessage, _ := json.Marshal(origFCMMessage)
  29. require.Greater(t, len(serializedOrigFCMMessage), fcmMessageLimit) // Pre-condition
  30. truncatedFCMMessage := maybeTruncateFCMMessage(origFCMMessage)
  31. truncatedMessageLength := len(truncatedFCMMessage.Data["message"])
  32. serializedTruncatedFCMMessage, _ := json.Marshal(truncatedFCMMessage)
  33. require.Equal(t, fcmMessageLimit, len(serializedTruncatedFCMMessage))
  34. require.Equal(t, "1", truncatedFCMMessage.Data["truncated"])
  35. require.NotEqual(t, origMessageLength, truncatedMessageLength)
  36. }
  37. func TestMaybeTruncateFCMMessage_NotTooLong(t *testing.T) {
  38. origMessage := "not really a long string"
  39. origFCMMessage := &messaging.Message{
  40. Topic: "mytopic",
  41. Data: map[string]string{
  42. "id": "abcdefg",
  43. "time": "1641324761",
  44. "event": "message",
  45. "topic": "mytopic",
  46. "priority": "0",
  47. "tags": "",
  48. "title": "",
  49. "message": origMessage,
  50. },
  51. }
  52. origMessageLength := len(origFCMMessage.Data["message"])
  53. serializedOrigFCMMessage, _ := json.Marshal(origFCMMessage)
  54. require.LessOrEqual(t, len(serializedOrigFCMMessage), fcmMessageLimit) // Pre-condition
  55. notTruncatedFCMMessage := maybeTruncateFCMMessage(origFCMMessage)
  56. notTruncatedMessageLength := len(notTruncatedFCMMessage.Data["message"])
  57. serializedNotTruncatedFCMMessage, _ := json.Marshal(notTruncatedFCMMessage)
  58. require.Equal(t, origMessageLength, notTruncatedMessageLength)
  59. require.Equal(t, len(serializedOrigFCMMessage), len(serializedNotTruncatedFCMMessage))
  60. require.Equal(t, "", notTruncatedFCMMessage.Data["truncated"])
  61. }