package org.edx.mobile.test; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import org.edx.mobile.util.Config; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.junit.Test; import java.util.Arrays; import java.util.ArrayList; import static org.junit.Assert.*; /** * Created by aleffert on 2/6/15. */ public class ConfigTests extends BaseTestCase { //TODO - should we place constant at a central place? /* Config keys */ private static final String COURSE_ENROLLMENT = "COURSE_ENROLLMENT"; private static final String SOCIAL_SHARING = "SOCIAL_SHARING"; private static final String ZERO_RATING = "ZERO_RATING"; private static final String FACEBOOK = "FACEBOOK"; private static final String GOOGLE = "GOOGLE"; private static final String FABRIC = "FABRIC"; private static final String NEW_RELIC = "NEW_RELIC"; private static final String SEGMENT_IO = "SEGMENT_IO"; private static final String WHITE_LIST_OF_DOMAINS = "WHITE_LIST_OF_DOMAINS"; private static final String ENABLED = "ENABLED"; private static final String DISABLED_CARRIERS = "DISABLED_CARRIERS"; private static final String CARRIERS = "CARRIERS"; private static final String COURSE_SEARCH_URL = "COURSE_SEARCH_URL"; private static final String EXPLORE_SUBJECTS_URL = "EXPLORE_SUBJECTS_URL"; private static final String TYPE = "TYPE"; private static final String COURSE_INFO_URL_TEMPLATE = "COURSE_INFO_URL_TEMPLATE"; private static final String FACEBOOK_APP_ID = "FACEBOOK_APP_ID"; private static final String FABRIC_KEY = "FABRIC_KEY"; private static final String FABRIC_BUILD_SECRET = "FABRIC_BUILD_SECRET"; private static final String NEW_RELIC_KEY = "NEW_RELIC_KEY"; private static final String SEGMENT_IO_WRITE_KEY = "SEGMENT_IO_WRITE_KEY"; private static final String DOMAINS = "DOMAINS"; private static final String PARSE = "PARSE"; private static final String PARSE_ENABLED = "NOTIFICATIONS_ENABLED"; private static final String PARSE_APPLICATION_ID = "APPLICATION_ID"; private static final String PARSE_CLIENT_KEY = "CLIENT_KEY"; @Test public void testZeroRatingNoConfig() { JsonObject configBase = new JsonObject(); Config config = new Config(configBase); assertFalse(config.getZeroRatingConfig().isEnabled()); assertEquals(config.getZeroRatingConfig().getCarriers().size(), 0); } @Test public void testZeroRatingEmptyConfig() { JsonObject configBase = new JsonObject(); JsonObject socialConfig = new JsonObject(); configBase.add(ZERO_RATING, socialConfig); Config config = new Config(configBase); assertFalse(config.getZeroRatingConfig().isEnabled()); assertEquals(config.getZeroRatingConfig().getCarriers().size(), 0); } @Test public void testZeroRatingConfig() { JsonObject configBase = new JsonObject(); JsonObject zeroRatingConfig = new JsonObject(); zeroRatingConfig.add(ENABLED, new JsonPrimitive(true)); configBase.add(ZERO_RATING, zeroRatingConfig); ArrayList<String> carrierList = new ArrayList<String>(); carrierList.add("12345"); carrierList.add("foo"); JsonArray carriers = new JsonArray(); for (String carrier : carrierList) { carriers.add(new JsonPrimitive(carrier)); } zeroRatingConfig.add(CARRIERS, carriers); ArrayList<String> domainList = new ArrayList<>(); domainList.add("domain1"); domainList.add("domain2"); JsonArray domains = new JsonArray(); for (String domain : domainList) { domains.add(new JsonPrimitive(domain)); } zeroRatingConfig.add(WHITE_LIST_OF_DOMAINS, domains); Config config = new Config(configBase); assertTrue(config.getZeroRatingConfig().isEnabled()); assertEquals(carrierList, config.getZeroRatingConfig().getCarriers()); assertEquals(domainList, config.getZeroRatingConfig().getWhiteListedDomains()); } @Test public void testEnrollmentNoConfig() { JsonObject configBase = new JsonObject(); Config config = new Config(configBase); assertFalse(config.getCourseDiscoveryConfig().isCourseDiscoveryEnabled()); assertFalse(config.getCourseDiscoveryConfig().isExploreSubjectsEnabled()); assertFalse(config.getCourseDiscoveryConfig().isWebviewCourseDiscoveryEnabled()); assertNull(config.getCourseDiscoveryConfig().getCourseSearchUrl()); assertNull(config.getCourseDiscoveryConfig().getCourseInfoUrlTemplate()); } @Test public void testEnrollmentEmptyConfig() { JsonObject configBase = new JsonObject(); JsonObject enrollmentConfig = new JsonObject(); configBase.add(COURSE_ENROLLMENT, enrollmentConfig); Config config = new Config(configBase); assertFalse(config.getCourseDiscoveryConfig().isCourseDiscoveryEnabled()); assertFalse(config.getCourseDiscoveryConfig().isExploreSubjectsEnabled()); assertFalse(config.getCourseDiscoveryConfig().isWebviewCourseDiscoveryEnabled()); assertNull(config.getCourseDiscoveryConfig().getCourseSearchUrl()); assertNull(config.getCourseDiscoveryConfig().getCourseInfoUrlTemplate()); } @Test(expected = IllegalArgumentException.class) public void testEnrollmentInvalidType() { JsonObject configBase = new JsonObject(); JsonObject enrollmentConfig = new JsonObject(); enrollmentConfig.add(TYPE, new JsonPrimitive("invalid type")); configBase.add(COURSE_ENROLLMENT, enrollmentConfig); Config config = new Config(configBase); assertFalse(config.getCourseDiscoveryConfig().isCourseDiscoveryEnabled()); } @RunWith(value = Parameterized.class) public static class EnrollmentConfigTests { private String course_enrollment_type; private boolean expected; public EnrollmentConfigTests(String course_enrollment_type, boolean expected) { this.course_enrollment_type = course_enrollment_type; this.expected = expected; } @Parameters(name= "{index}: willUseWebview({0})={1}") public static Iterable<Object[]> data() { return Arrays.asList(new Object[][]{ {"webview", true}, {"WEBVIEW", true}, {"native", false}, {"NATIVE", false}, }); } @Test public void testEnrollmentConfig() { JsonObject configBase = new JsonObject(); JsonObject enrollmentConfig = new JsonObject(); JsonObject webviewConfig = new JsonObject(); enrollmentConfig.add(TYPE, new JsonPrimitive(course_enrollment_type)); webviewConfig.add(COURSE_SEARCH_URL, new JsonPrimitive("fake-url")); webviewConfig.add(COURSE_INFO_URL_TEMPLATE, new JsonPrimitive("fake-url-template")); enrollmentConfig.add("WEBVIEW", webviewConfig); configBase.add(COURSE_ENROLLMENT, enrollmentConfig); Config config = new Config(configBase); assertTrue(config.getCourseDiscoveryConfig().isCourseDiscoveryEnabled()); assertFalse(config.getCourseDiscoveryConfig().isExploreSubjectsEnabled()); assertEquals(config.getCourseDiscoveryConfig().isWebviewCourseDiscoveryEnabled(), expected); assertEquals(config.getCourseDiscoveryConfig().getCourseSearchUrl(), "fake-url"); assertEquals(config.getCourseDiscoveryConfig().getCourseInfoUrlTemplate(), "fake-url-template"); } } @Test public void testEnrollmentConfig_withExploreSubjectsEnabled() { JsonObject configBase = new JsonObject(); JsonObject enrollmentConfig = new JsonObject(); JsonObject webviewConfig = new JsonObject(); enrollmentConfig.add(TYPE, new JsonPrimitive("WEBVIEW")); webviewConfig.add(COURSE_SEARCH_URL, new JsonPrimitive("fake-url")); webviewConfig.add(EXPLORE_SUBJECTS_URL, new JsonPrimitive("explore-subjects-url")); webviewConfig.add(COURSE_INFO_URL_TEMPLATE, new JsonPrimitive("fake-url-template")); enrollmentConfig.add("WEBVIEW", webviewConfig); configBase.add(COURSE_ENROLLMENT, enrollmentConfig); Config config = new Config(configBase); assertTrue(config.getCourseDiscoveryConfig().isCourseDiscoveryEnabled()); assertTrue(config.getCourseDiscoveryConfig().isExploreSubjectsEnabled()); assertTrue(config.getCourseDiscoveryConfig().isWebviewCourseDiscoveryEnabled()); assertEquals(config.getCourseDiscoveryConfig().getCourseSearchUrl(), "fake-url"); assertEquals(config.getCourseDiscoveryConfig().getCourseInfoUrlTemplate(), "fake-url-template"); } @Test public void testFacebookNoConfig() { JsonObject configBase = new JsonObject(); Config config = new Config(configBase); assertFalse(config.getFacebookConfig().isEnabled()); assertNull(config.getFacebookConfig().getFacebookAppId()); } @Test public void testFacebookEmptyConfig() { JsonObject fbConfig = new JsonObject(); JsonObject configBase = new JsonObject(); configBase.add(FACEBOOK, fbConfig); Config config = new Config(configBase); assertFalse(config.getFacebookConfig().isEnabled()); assertNull(config.getFacebookConfig().getFacebookAppId()); } @Test public void testFacebookConfig() { String appId = "fake-app-id"; JsonObject fbConfig = new JsonObject(); fbConfig.add(ENABLED, new JsonPrimitive(true)); fbConfig.add(FACEBOOK_APP_ID, new JsonPrimitive(appId)); JsonObject configBase = new JsonObject(); configBase.add(FACEBOOK, fbConfig); Config config = new Config(configBase); assertTrue(config.getFacebookConfig().isEnabled()); assertEquals(appId, config.getFacebookConfig().getFacebookAppId()); } @Test public void testGoogleNoConfig() { JsonObject configBase = new JsonObject(); Config config = new Config(configBase); assertFalse(config.getGoogleConfig().isEnabled()); } @Test public void testGoogleEmptyConfig() { JsonObject googleConfig = new JsonObject(); JsonObject configBase = new JsonObject(); configBase.add(GOOGLE, googleConfig); Config config = new Config(configBase); assertFalse(config.getGoogleConfig().isEnabled()); } @Test public void testGoogleConfig() { JsonObject googleConfig = new JsonObject(); googleConfig.add(ENABLED, new JsonPrimitive(true)); JsonObject configBase = new JsonObject(); configBase.add(GOOGLE, googleConfig); Config config = new Config(configBase); assertTrue(config.getGoogleConfig().isEnabled()); } @Test public void testFabricNoConfig() { JsonObject configBase = new JsonObject(); Config config = new Config(configBase); assertFalse(config.getFabricConfig().isEnabled()); assertNull(config.getFabricConfig().getFabricKey()); assertNull(config.getFabricConfig().getFabricBuildSecret()); } @Test public void testFabricEmptyConfig() { JsonObject fabricConfig = new JsonObject(); JsonObject configBase = new JsonObject(); configBase.add(FABRIC, fabricConfig); Config config = new Config(configBase); assertFalse(config.getFabricConfig().isEnabled()); assertNull(config.getFabricConfig().getFabricKey()); assertNull(config.getFabricConfig().getFabricBuildSecret()); } @Test public void testFabricConfig() { String key = "fake-key"; String secret = "fake-secret"; JsonObject fabricConfig = new JsonObject(); fabricConfig.add(ENABLED, new JsonPrimitive(true)); fabricConfig.add(FABRIC_KEY, new JsonPrimitive(key)); fabricConfig.add(FABRIC_BUILD_SECRET, new JsonPrimitive(secret)); JsonObject configBase = new JsonObject(); configBase.add(FABRIC, fabricConfig); Config config = new Config(configBase); assertTrue(config.getFabricConfig().isEnabled()); assertEquals(key, config.getFabricConfig().getFabricKey()); assertEquals(secret, config.getFabricConfig().getFabricBuildSecret()); } @Test public void testNewRelicNoConfig() { JsonObject configBase = new JsonObject(); Config config = new Config(configBase); assertFalse(config.getNewRelicConfig().isEnabled()); assertNull(config.getNewRelicConfig().getNewRelicKey()); } @Test public void testNewRelicEmptyConfig() { JsonObject fabricConfig = new JsonObject(); JsonObject configBase = new JsonObject(); configBase.add(NEW_RELIC, fabricConfig); Config config = new Config(configBase); assertFalse(config.getNewRelicConfig().isEnabled()); assertNull(config.getNewRelicConfig().getNewRelicKey()); } @Test public void testNewRelicConfig() { String key = "fake-key"; JsonObject newRelicConfig = new JsonObject(); newRelicConfig.add(ENABLED, new JsonPrimitive(true)); newRelicConfig.add(NEW_RELIC_KEY, new JsonPrimitive(key)); JsonObject configBase = new JsonObject(); configBase.add(NEW_RELIC, newRelicConfig); Config config = new Config(configBase); assertTrue(config.getNewRelicConfig().isEnabled()); assertEquals(key, config.getNewRelicConfig().getNewRelicKey()); } @Test public void testSegmentNoConfig() { JsonObject configBase = new JsonObject(); Config config = new Config(configBase); assertFalse(config.getSegmentConfig().isEnabled()); assertNull(config.getSegmentConfig().getSegmentWriteKey()); } @Test public void testSegmentEmptyConfig() { JsonObject segmentConfig = new JsonObject(); JsonObject configBase = new JsonObject(); configBase.add(SEGMENT_IO, segmentConfig); Config config = new Config(configBase); assertFalse(config.getSegmentConfig().isEnabled()); assertNull(config.getSegmentConfig().getSegmentWriteKey()); } @Test public void testSegmentConfig() { String key = "fake-key"; JsonObject segmentConfig = new JsonObject(); segmentConfig.add(ENABLED, new JsonPrimitive(true)); segmentConfig.add(SEGMENT_IO_WRITE_KEY, new JsonPrimitive(key)); JsonObject configBase = new JsonObject(); configBase.add(SEGMENT_IO, segmentConfig); Config config = new Config(configBase); assertTrue(config.getSegmentConfig().isEnabled()); assertEquals(key, config.getSegmentConfig().getSegmentWriteKey()); } }