Openstatus
www.openstatus.dev
1package tinybird_test
2
3import (
4 "fmt"
5 "net/http"
6 "testing"
7
8 "github.com/openstatushq/openstatus/apps/checker/pkg/tinybird"
9 "github.com/stretchr/testify/require"
10)
11
12type interceptorHTTPClient struct {
13 f func(req *http.Request) (*http.Response, error)
14}
15
16func (i *interceptorHTTPClient) RoundTrip(req *http.Request) (*http.Response, error) {
17 return i.f(req)
18}
19
20func (i *interceptorHTTPClient) GetHTTPClient() *http.Client {
21 return &http.Client{
22 Transport: i,
23 }
24}
25
26func TestSendEvent(t *testing.T) {
27 t.Parallel()
28
29 ctx := t.Context()
30
31 t.Run("it should return an error if it can not send the event", func(t *testing.T) {
32 interceptor := &interceptorHTTPClient{
33 f: func(req *http.Request) (*http.Response, error) {
34 return nil, fmt.Errorf("unable to send request")
35 },
36 }
37
38 client := tinybird.NewClient(interceptor.GetHTTPClient(), "apiKey")
39
40 err := client.SendEvent(ctx, "event", "test")
41 require.Error(t, err)
42 })
43
44 t.Run("it should return an error if the response status code is not 200", func(t *testing.T) {
45 interceptor := &interceptorHTTPClient{
46 f: func(req *http.Request) (*http.Response, error) {
47 return &http.Response{
48 StatusCode: http.StatusInternalServerError,
49 }, nil
50 },
51 }
52
53 client := tinybird.NewClient(interceptor.GetHTTPClient(), "apiKey")
54
55 err := client.SendEvent(ctx, "event", "test")
56 require.Error(t, err)
57 })
58
59 t.Run("it should succeed and return nothing", func(t *testing.T) {
60 var url string
61 interceptor := &interceptorHTTPClient{
62 f: func(req *http.Request) (*http.Response, error) {
63 url = req.URL.String()
64 return &http.Response{
65 StatusCode: http.StatusAccepted,
66 }, nil
67 },
68 }
69
70 client := tinybird.NewClient(interceptor.GetHTTPClient(), "apiKey")
71
72 err := client.SendEvent(ctx, "event", "test")
73 require.NoError(t, err)
74 require.Equal(t, "https://api.tinybird.co/v0/events?name=test", url)
75 })
76}