client_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package client_test
  2. import (
  3. "fmt"
  4. "github.com/stretchr/testify/require"
  5. "heckel.io/ntfy/client"
  6. "heckel.io/ntfy/test"
  7. "testing"
  8. "time"
  9. )
  10. func TestClient_Publish_Subscribe(t *testing.T) {
  11. s, port := test.StartServer(t)
  12. defer test.StopServer(t, s, port)
  13. c := client.New(newTestConfig(port))
  14. subscriptionID := c.Subscribe("mytopic")
  15. time.Sleep(time.Second)
  16. msg, err := c.Publish("mytopic", "some message")
  17. require.Nil(t, err)
  18. require.Equal(t, "some message", msg.Message)
  19. msg, err = c.Publish("mytopic", "some other message",
  20. client.WithTitle("some title"),
  21. client.WithPriority("high"),
  22. client.WithTags([]string{"tag1", "tag 2"}))
  23. require.Nil(t, err)
  24. require.Equal(t, "some other message", msg.Message)
  25. require.Equal(t, "some title", msg.Title)
  26. require.Equal(t, []string{"tag1", "tag 2"}, msg.Tags)
  27. require.Equal(t, 4, msg.Priority)
  28. msg, err = c.Publish("mytopic", "some delayed message",
  29. client.WithDelay("25 hours"))
  30. require.Nil(t, err)
  31. require.Equal(t, "some delayed message", msg.Message)
  32. require.True(t, time.Now().Add(24*time.Hour).Unix() < msg.Time)
  33. msg = nextMessage(c)
  34. require.NotNil(t, msg)
  35. require.Equal(t, "some message", msg.Message)
  36. msg = nextMessage(c)
  37. require.NotNil(t, msg)
  38. require.Equal(t, "some other message", msg.Message)
  39. require.Equal(t, "some title", msg.Title)
  40. require.Equal(t, []string{"tag1", "tag 2"}, msg.Tags)
  41. require.Equal(t, 4, msg.Priority)
  42. msg = nextMessage(c)
  43. require.Nil(t, msg)
  44. c.Unsubscribe(subscriptionID)
  45. time.Sleep(200 * time.Millisecond)
  46. msg, err = c.Publish("mytopic", "a message that won't be received")
  47. require.Nil(t, err)
  48. require.Equal(t, "a message that won't be received", msg.Message)
  49. msg = nextMessage(c)
  50. require.Nil(t, msg)
  51. }
  52. func TestClient_Publish_Poll(t *testing.T) {
  53. s, port := test.StartServer(t)
  54. defer test.StopServer(t, s, port)
  55. c := client.New(newTestConfig(port))
  56. msg, err := c.Publish("mytopic", "some message", client.WithNoFirebase(), client.WithTagsList("tag1,tag2"))
  57. require.Nil(t, err)
  58. require.Equal(t, "some message", msg.Message)
  59. require.Equal(t, []string{"tag1", "tag2"}, msg.Tags)
  60. msg, err = c.Publish("mytopic", "this won't be cached", client.WithNoCache())
  61. require.Nil(t, err)
  62. require.Equal(t, "this won't be cached", msg.Message)
  63. msg, err = c.Publish("mytopic", "some delayed message", client.WithDelay("20 min"))
  64. require.Nil(t, err)
  65. require.Equal(t, "some delayed message", msg.Message)
  66. messages, err := c.Poll("mytopic")
  67. require.Nil(t, err)
  68. require.Equal(t, 1, len(messages))
  69. require.Equal(t, "some message", messages[0].Message)
  70. messages, err = c.Poll("mytopic", client.WithScheduled())
  71. require.Nil(t, err)
  72. require.Equal(t, 2, len(messages))
  73. require.Equal(t, "some message", messages[0].Message)
  74. require.Equal(t, "some delayed message", messages[1].Message)
  75. }
  76. func newTestConfig(port int) *client.Config {
  77. c := client.NewConfig()
  78. c.DefaultHost = fmt.Sprintf("http://127.0.0.1:%d", port)
  79. return c
  80. }
  81. func nextMessage(c *client.Client) *client.Message {
  82. select {
  83. case m := <-c.Messages:
  84. return m
  85. default:
  86. return nil
  87. }
  88. }