client_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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 newTestConfig(port int) *client.Config {
  53. c := client.NewConfig()
  54. c.DefaultHost = fmt.Sprintf("http://127.0.0.1:%d", port)
  55. return c
  56. }
  57. func nextMessage(c *client.Client) *client.Message {
  58. select {
  59. case m := <-c.Messages:
  60. return m
  61. default:
  62. return nil
  63. }
  64. }