Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import dev.openfeature.sdk.FeatureProvider;
import dev.openfeature.sdk.ImmutableMetadata;
import dev.openfeature.sdk.ImmutableMetadata.ImmutableMetadataBuilder;
import dev.openfeature.sdk.ImmutableTrackingEventDetails;
import dev.openfeature.sdk.Metadata;
import dev.openfeature.sdk.ProviderEvaluation;
import dev.openfeature.sdk.Reason;
Expand Down Expand Up @@ -214,6 +215,11 @@ public void track(String eventName, EvaluationContext context, TrackingEventDeta
throw new ProviderNotReadyError("DevCycle client not initialized");
}

// OpenFeature passes null details when Client.track() is called without them
if (details == null) {
details = new ImmutableTrackingEventDetails();
}

DevCycleUser user = DevCycleUser.fromEvaluationContext(context);
try {
BigDecimal eventValue = extractEventValue(details);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.util.ArrayList;
Expand All @@ -13,14 +14,17 @@
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.junit.MockitoJUnitRunner;

import com.devcycle.sdk.server.common.api.IDevCycleClient;
import com.devcycle.sdk.server.common.model.DevCycleEvent;
import com.devcycle.sdk.server.common.model.EvalReason;
import com.devcycle.sdk.server.common.model.Variable;

import dev.openfeature.sdk.ErrorCode;
import dev.openfeature.sdk.ImmutableContext;
import dev.openfeature.sdk.OpenFeatureAPI;
import dev.openfeature.sdk.ProviderEvaluation;
import dev.openfeature.sdk.Reason;
import dev.openfeature.sdk.Structure;
Expand All @@ -32,6 +36,22 @@
@RunWith(MockitoJUnitRunner.class)
public class DevCycleProviderTest {

@Test
public void testTrackWithoutDetails() throws Exception {
IDevCycleClient dvcClient = mock(IDevCycleClient.class);
when(dvcClient.isInitialized()).thenReturn(true);

String domain = "track-without-details";
OpenFeatureAPI.getInstance().setProviderAndWait(domain, new DevCycleProvider(dvcClient));
OpenFeatureAPI.getInstance().getClient(domain).track("checkout-completed", new ImmutableContext("user-1234"));

ArgumentCaptor<DevCycleEvent> event = ArgumentCaptor.forClass(DevCycleEvent.class);
verify(dvcClient).track(any(), event.capture());
Assert.assertEquals("checkout-completed", event.getValue().getType());
Assert.assertNull(event.getValue().getValue());
Assert.assertEquals(new HashMap<>(), event.getValue().getMetaData());
}
Comment thread
luxscious marked this conversation as resolved.
Resolved

@Test
public void testResolveClientNotInitialized() {
IDevCycleClient dvcClient = mock(IDevCycleClient.class);
Expand Down
Loading