diff --git a/ldai/client.go b/ldai/client.go index ded6686c..d6feb388 100644 --- a/ldai/client.go +++ b/ldai/client.go @@ -70,6 +70,8 @@ func (c *Client) Config( defaultValue Config, variables map[string]interface{}, ) (Config, *Tracker) { + _ = c.sdk.TrackMetric("$ld:ai:config:function:single", context, 1, ldvalue.String(key)) + result, _ := c.sdk.JSONVariation(key, context, defaultValue.AsLdValue()) // The spec requires the config to at least be an object (although all properties are optional, so it may be an diff --git a/ldai/client_test.go b/ldai/client_test.go index bf8982a9..525ea42b 100644 --- a/ldai/client_test.go +++ b/ldai/client_test.go @@ -17,13 +17,21 @@ import ( ) type mockServerSDK struct { - log *ldlogtest.MockLog - json []byte - err error + log *ldlogtest.MockLog + json []byte + err error + events []mockEvent +} + +type mockEvent struct { + eventName string + context ldcontext.Context + metricValue float64 + data ldvalue.Value } func newMockSDK(json []byte, err error) *mockServerSDK { - return &mockServerSDK{json: json, err: err, log: ldlogtest.NewMockLog()} + return &mockServerSDK{json: json, err: err, log: ldlogtest.NewMockLog(), events: []mockEvent{}} } func (m *mockServerSDK) JSONVariation( @@ -44,6 +52,12 @@ func (m *mockServerSDK) Loggers() interfaces.LDLoggers { } func (m *mockServerSDK) TrackMetric(eventName string, context ldcontext.Context, metricValue float64, data ldvalue.Value) error { + m.events = append(m.events, mockEvent{ + eventName: eventName, + context: context, + metricValue: metricValue, + data: data, + }) return nil } @@ -288,6 +302,33 @@ func TestCanSetDefaultConfigFields(t *testing.T) { assert.Equal(t, datamodel.System, msg[1].Role) } +func TestConfigMethodTracking(t *testing.T) { + mockSDK := newMockSDK(nil, nil) + client, err := NewClient(mockSDK) + require.NoError(t, err) + require.NotNil(t, client) + + defaultConfig := NewConfig().WithEnabled(false).Build() + context := ldcontext.New("user-key") + configKey := "test-config-key" + + config, tracker := client.Config(configKey, context, defaultConfig, nil) + + require.NotNil(t, config) + require.NotNil(t, tracker) + + expectedEvents := []mockEvent{ + { + eventName: "$ld:ai:config:function:single", + context: context, + metricValue: 1, + data: ldvalue.String(configKey), + }, + } + + assert.ElementsMatch(t, expectedEvents, mockSDK.events) +} + func TestCanSetModelParameters(t *testing.T) { client, err := NewClient(newMockSDK(nil, nil)) require.NoError(t, err)