github.com/status-im/status-go@v1.1.0/centralizedmetrics/providers/appsflyers_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 TestAppsflyerMetricProcessor(t *testing.T) { 15 // Create a test server to mock Appsflyer API 16 testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 17 // Check the request method and URL 18 require.Equal(t, http.MethodPost, r.Method) 19 20 expectedPath := "/inappevent/testAppID" 21 require.Equal(t, expectedPath, r.URL.Path) 22 23 // Check headers 24 require.Equal(t, "application/json", r.Header.Get("accept")) 25 require.Equal(t, "testSecret", r.Header.Get("authentication")) 26 require.Equal(t, "application/json", r.Header.Get("content-type")) 27 28 // Check request body 29 var metric appsflyerMetric 30 err := json.NewDecoder(r.Body).Decode(&metric) 31 if err != nil { 32 t.Errorf("failed to decode request body: %v", err) 33 } 34 require.Equal(t, "user123", metric.AppsflyerID) 35 require.Equal(t, "purchase", metric.EventName) 36 require.Equal(t, map[string]interface{}{"price": 10.0}, metric.EventValue) 37 require.Equal(t, "2024-07-02 15:14:54.765", metric.EventTime) 38 39 // Respond with 200 OK 40 w.WriteHeader(http.StatusOK) 41 })) 42 defer testServer.Close() 43 44 // Initialize the AppsflyerMetricProcessor with the test server URL 45 processor := NewAppsflyerMetricProcessor("testAppID", "testSecret", testServer.URL) 46 47 // Example metrics 48 metrics := []common.Metric{ 49 {UserID: "user123", EventName: "purchase", EventValue: map[string]interface{}{"price": 10.0}, Timestamp: 1719933294765}, 50 } 51 52 // Process metrics 53 require.NoError(t, processor.Process(metrics)) 54 }