github.com/status-im/status-go@v1.1.0/centralizedmetrics/providers/mixpanel_test.go (about) 1 package providers 2 3 import ( 4 "encoding/json" 5 "net/http" 6 "net/http/httptest" 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 11 "github.com/status-im/status-go/centralizedmetrics/common" 12 ) 13 14 func TestMixpanelMetricProcessor(t *testing.T) { 15 var t1 int64 = 1719933294765 16 var t2 int64 = 1719933294766 17 18 // Create a test server to mock Mixpanel API 19 testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 20 // Check the request method and URL 21 require.Equal(t, http.MethodPost, r.Method) 22 23 expectedPath := "/track" 24 require.Equal(t, expectedPath, r.URL.Path) 25 queryParams := r.URL.Query() 26 require.Equal(t, "1", queryParams.Get("strict")) 27 require.Equal(t, "testAppID", queryParams.Get("project_id")) 28 29 // Check headers 30 require.Equal(t, "application/json", r.Header.Get("accept")) 31 require.Equal(t, "application/json", r.Header.Get("content-type")) 32 33 // Check request body 34 var metrics []mixpanelMetric 35 err := json.NewDecoder(r.Body).Decode(&metrics) 36 require.NoError(t, err) 37 38 require.Len(t, metrics, 2) 39 metric1 := metrics[0] 40 require.Equal(t, "user123", metric1.Properties.UserID) 41 require.Equal(t, "testSecret", metric1.Properties.Token) 42 require.Equal(t, "purchase", metric1.Event) 43 require.Equal(t, t1, metric1.Properties.Time) 44 require.Equal(t, map[string]interface{}{"price": 10.0}, metric1.Properties.AdditionalProperties) 45 metric2 := metrics[1] 46 require.Equal(t, "user123", metric2.Properties.UserID) 47 require.Equal(t, "testSecret", metric2.Properties.Token) 48 require.Equal(t, "purchase", metric2.Event) 49 require.Equal(t, t2, metric2.Properties.Time) 50 require.Equal(t, map[string]interface{}{"price": 11.0}, metric2.Properties.AdditionalProperties) 51 52 // Respond with 200 OK 53 w.WriteHeader(http.StatusOK) 54 })) 55 defer testServer.Close() 56 57 // Initialize the MixpanelMetricProcessor with the test server URL 58 processor := NewMixpanelMetricProcessor("testAppID", "testSecret", testServer.URL) 59 60 // Example metrics 61 metrics := []common.Metric{ 62 {UserID: "user123", EventName: "purchase", EventValue: map[string]interface{}{"price": 10.0}, Timestamp: t1}, 63 {UserID: "user123", EventName: "purchase", EventValue: map[string]interface{}{"price": 11.0}, Timestamp: t2}, 64 } 65 66 // Process metrics 67 require.NoError(t, processor.Process(metrics)) 68 }