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  }