/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.core.analytics.client.google; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import org.junit.Test; import org.orcid.core.analytics.AnalyticsData; import org.springframework.test.util.ReflectionTestUtils; import com.fasterxml.jackson.dataformat.yaml.snakeyaml.util.UriEncoder; public class UniversalAnalyticsClientTest { @Test public void testSendAnalyticsData() { UniversalAnalyticsClient client = new UniversalAnalyticsClientStub(); ReflectionTestUtils.setField(client, "analyticsTrackingCode", "some-tracking-code"); AnalyticsData data = getData(); client.sendAnalyticsData(data); String payload = ((UniversalAnalyticsClientStub) client).getPayload(); assertNotNull(payload); String[] params = UriEncoder.decode(payload).split("&"); assertEquals(13, params.length); assertEquals(UniversalAnalyticsClient.PROTOCOL_VERSION_PARAM + "=1", params[0]); assertEquals(UniversalAnalyticsClient.TRACKING_ID_PARAM + "=some-tracking-code", params[1]); assertEquals(UniversalAnalyticsClient.CLIENT_ID_PARAM + "=" + data.getClientId(), params[2]); assertEquals(UniversalAnalyticsClient.IP_ADDRESS_PARAM + "=" + data.getIpAddress(), params[3]); assertEquals(UniversalAnalyticsClient.USER_AGENT_PARAM + "=" + data.getUserAgent(), params[4]); assertEquals(UniversalAnalyticsClient.HIT_TYPE_PARAM + "=event", params[5]); assertEquals(UniversalAnalyticsClient.EVENT_ACTION_PARAM + "=" + data.getMethod(), params[6]); assertEquals(UniversalAnalyticsClient.EVENT_CATEGORY_PARAM + "=" + data.getCategory(), params[7]); assertEquals(UniversalAnalyticsClient.EVENT_LABEL_PARAM + "=" + data.getUrl(), params[8]); assertEquals(UniversalAnalyticsClient.API_VERSION_PARAM + "=" + data.getApiVersion(), params[9]); assertEquals(UniversalAnalyticsClient.CONTENT_TYPE_PARAM + "=" + data.getContentType(), params[10]); assertEquals(UniversalAnalyticsClient.RESPONSE_CODE_PARAM + "=" + data.getResponseCode(), params[11]); assertEquals(UniversalAnalyticsClient.CLIENT_PARAM + "=" + data.getClientDetailsString(), params[12]); } @Test public void testSendAnalyticsDataNoTrackingCode() { UniversalAnalyticsClient client = new UniversalAnalyticsClientStub(); AnalyticsData data = getData(); client.sendAnalyticsData(data); String payload = ((UniversalAnalyticsClientStub) client).getPayload(); assertNull(payload); // didn't get sent } private AnalyticsData getData() { AnalyticsData data = new AnalyticsData(); data.setApiVersion("v2.0"); data.setCategory("works"); data.setUrl("https://localhost:8443/orcid-api-web/v2.0/1234-4321-1234-4321/works"); data.setClientId("client id"); data.setClientDetailsString("Client name - client id"); data.setContentType("application/xml"); data.setUserAgent("blah"); data.setResponseCode(200); data.setIpAddress("37.14.150.0"); data.setMethod("GET"); return data; } /** * Use this class to get access to the string passed to the postData method, which is what we are testing * */ private class UniversalAnalyticsClientStub extends UniversalAnalyticsClient { private String payload; @Override protected void postData(String payload) { this.payload = payload; } public String getPayload() { return payload; } } }