From 7dc617056e0c3dcaed18686f3f6f557408dfc1d4 Mon Sep 17 00:00:00 2001 From: Roman Onufryk Date: Wed, 15 Feb 2017 14:54:20 -0800 Subject: [PATCH 1/2] Add Android TV SDK client engine type to Event (#73) --- .../ab/event/internal/payload/Event.java | 3 +- .../optimizely/ab/OptimizelyBuilderTest.java | 11 +++- .../ab/event/internal/EventBuilderV2Test.java | 56 ++++++++++++++++++- 3 files changed, 66 insertions(+), 4 deletions(-) diff --git a/core-api/src/main/java/com/optimizely/ab/event/internal/payload/Event.java b/core-api/src/main/java/com/optimizely/ab/event/internal/payload/Event.java index b18bc7fb9..9237d5b96 100644 --- a/core-api/src/main/java/com/optimizely/ab/event/internal/payload/Event.java +++ b/core-api/src/main/java/com/optimizely/ab/event/internal/payload/Event.java @@ -24,7 +24,8 @@ public class Event { public enum ClientEngine { JAVA_SDK ("java-sdk"), - ANDROID_SDK ("android-sdk"); + ANDROID_SDK ("android-sdk"), + ANDROID_TV_SDK ("android-tv-sdk"); private final String clientEngineValue; diff --git a/core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java b/core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java index 2a1700f4a..69ed103e6 100644 --- a/core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java +++ b/core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java @@ -130,7 +130,7 @@ public void withDefaultClientEngine() throws Exception { } @Test - public void withCustomClientEngine() throws Exception { + public void withAndroidSDKClientEngine() throws Exception { Optimizely optimizelyClient = Optimizely.builder(validConfigJsonV2(), mockEventHandler) .withClientEngine(ClientEngine.ANDROID_SDK) .build(); @@ -138,6 +138,15 @@ public void withCustomClientEngine() throws Exception { assertThat(((EventBuilderV2)optimizelyClient.eventBuilder).clientEngine, is(ClientEngine.ANDROID_SDK)); } + @Test + public void withAndroidTVSDKClientEngine() throws Exception { + Optimizely optimizelyClient = Optimizely.builder(validConfigJsonV2(), mockEventHandler) + .withClientEngine(ClientEngine.ANDROID_TV_SDK) + .build(); + + assertThat(((EventBuilderV2)optimizelyClient.eventBuilder).clientEngine, is(ClientEngine.ANDROID_TV_SDK)); + } + @Test public void withDefaultClientVersion() throws Exception { Optimizely optimizelyClient = Optimizely.builder(validConfigJsonV2(), mockEventHandler) diff --git a/core-api/src/test/java/com/optimizely/ab/event/internal/EventBuilderV2Test.java b/core-api/src/test/java/com/optimizely/ab/event/internal/EventBuilderV2Test.java index becfefc6e..3b76e8184 100644 --- a/core-api/src/test/java/com/optimizely/ab/event/internal/EventBuilderV2Test.java +++ b/core-api/src/test/java/com/optimizely/ab/event/internal/EventBuilderV2Test.java @@ -136,7 +136,7 @@ public void createImpressionEventIgnoresUnknownAttributes() throws Exception { * events being sent with the overriden values. */ @Test - public void createImpressionEventCustomClientEngineClientVersion() throws Exception { + public void createImpressionEventAndroidClientEngineClientVersion() throws Exception { EventBuilderV2 builder = new EventBuilderV2(ClientEngine.ANDROID_SDK, "0.0.0"); ProjectConfig projectConfig = ProjectConfigTestUtils.validProjectConfigV2(); Experiment activatedExperiment = projectConfig.getExperiments().get(0); @@ -153,6 +153,29 @@ public void createImpressionEventCustomClientEngineClientVersion() throws Except assertThat(impression.getClientVersion(), is("0.0.0")); } + /** + * Verify that supplying {@link EventBuilderV2} with a custom Android TV client engine and client version + * results in impression events being sent with the overriden values. + */ + @Test + public void createImpressionEventAndroidTVClientEngineClientVersion() throws Exception { + String clientVersion = "0.0.0"; + EventBuilderV2 builder = new EventBuilderV2(ClientEngine.ANDROID_TV_SDK, clientVersion); + ProjectConfig projectConfig = ProjectConfigTestUtils.validProjectConfigV2(); + Experiment activatedExperiment = projectConfig.getExperiments().get(0); + Variation bucketedVariation = activatedExperiment.getVariations().get(0); + Attribute attribute = projectConfig.getAttributes().get(0); + String userId = "userId"; + Map attributeMap = Collections.singletonMap(attribute.getKey(), "value"); + + LogEvent impressionEvent = builder.createImpressionEvent(projectConfig, activatedExperiment, bucketedVariation, + userId, attributeMap); + Impression impression = gson.fromJson(impressionEvent.getBody(), Impression.class); + + assertThat(impression.getClientEngine(), is(ClientEngine.ANDROID_TV_SDK.getClientEngineValue())); + assertThat(impression.getClientVersion(), is(clientVersion)); + } + /** * Verify that passing a non-null session ID to * {@link EventBuilder#createImpressionEvent(ProjectConfig, Experiment, Variation, String, Map, String)} properly @@ -370,7 +393,7 @@ public void createConversionEventExperimentStatusPrecedesForcedVariation() { * events being sent with the overriden values. */ @Test - public void createConversionEventCustomClientEngineClientVersion() throws Exception { + public void createConversionEventAndroidClientEngineClientVersion() throws Exception { EventBuilderV2 builder = new EventBuilderV2(ClientEngine.ANDROID_SDK, "0.0.0"); ProjectConfig projectConfig = ProjectConfigTestUtils.validProjectConfigV2(); Attribute attribute = projectConfig.getAttributes().get(0); @@ -393,6 +416,35 @@ public void createConversionEventCustomClientEngineClientVersion() throws Except assertThat(conversion.getClientVersion(), is("0.0.0")); } + /** + * Verify that supplying {@link EventBuilderV2} with a Android TV client engine and client version results in + * conversion events being sent with the overriden values. + */ + @Test + public void createConversionEventAndroidTVClientEngineClientVersion() throws Exception { + String clientVersion = "0.0.0"; + EventBuilderV2 builder = new EventBuilderV2(ClientEngine.ANDROID_TV_SDK, clientVersion); + ProjectConfig projectConfig = ProjectConfigTestUtils.validProjectConfigV2(); + Attribute attribute = projectConfig.getAttributes().get(0); + EventType eventType = projectConfig.getEventTypes().get(0); + String userId = "userId"; + + Bucketer mockBucketAlgorithm = mock(Bucketer.class); + for (Experiment experiment : projectConfig.getExperiments()) { + when(mockBucketAlgorithm.bucket(experiment, userId)) + .thenReturn(experiment.getVariations().get(0)); + } + + Map attributeMap = Collections.singletonMap(attribute.getKey(), "value"); + LogEvent conversionEvent = builder.createConversionEvent(projectConfig, mockBucketAlgorithm, userId, + eventType.getId(), eventType.getKey(), attributeMap); + + Conversion conversion = gson.fromJson(conversionEvent.getBody(), Conversion.class); + + assertThat(conversion.getClientEngine(), is(ClientEngine.ANDROID_TV_SDK.getClientEngineValue())); + assertThat(conversion.getClientVersion(), is(clientVersion)); + } + /** * Verify that {@link EventBuilderV2} doesn't add experiments with a "Launched" status to the bucket map */ From a7dffbb12db46cbd85f8ca5b2068cfaf2892a019 Mon Sep 17 00:00:00 2001 From: Roman Onufryk Date: Thu, 16 Feb 2017 12:53:04 -0800 Subject: [PATCH 2/2] Prepare 1.5.0 release (#74) --- CHANGELOG.md | 6 ++++++ gradle.properties | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07f6de541..8f1d990de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.5.0 + +February 16, 2017 + +- Support Android TV SDK client engine + ## 1.4.1 February 1, 2017 diff --git a/gradle.properties b/gradle.properties index dc54603b0..59036d0e7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Maven version -version = 1.4.1-SNAPSHOT +version = 1.5.0-SNAPSHOT # Artifact paths mavenS3Bucket = optimizely-maven