/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.logger;
import org.eclipse.che.ide.logger.AnalyticsEventLoggerImpl;
import org.eclipse.che.api.user.gwt.client.UserServiceClient;
import org.eclipse.che.ide.api.action.Action;
import org.eclipse.che.ide.api.action.ActionEvent;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.dto.DtoFactory;
import org.eclipse.che.ide.rest.DtoUnmarshallerFactory;
import org.eclipse.che.ide.websocket.MessageBus;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.anyMap;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
/** @author Anatoliy Bazko */
@RunWith(MockitoJUnitRunner.class)
public class AnalyticsEventLoggerTest {
@Mock
private DtoFactory dtoFactory;
@Mock
private UserServiceClient user;
@Mock
private AppContext appContext;
@Mock
private MessageBus messageBus;
@Mock
private DtoUnmarshallerFactory dtoUnmarshallerFactory;
@Spy
@InjectMocks
private AnalyticsEventLoggerImpl eventLogger;
@Before
public void setUp() throws Exception {
doReturn("workspaceId").when(eventLogger).getWorkspace();
}
@Test
public void shouldLogSimpleAction() {
doNothing().when(eventLogger).send(anyString(), anyMap());
ArgumentCaptor<String> eventParam = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Map> paramsParam = ArgumentCaptor.forClass(Map.class);
eventLogger.log(new TestedAction());
verify(eventLogger).send(eventParam.capture(), paramsParam.capture());
String event = eventParam.getValue();
assertEquals(event, "ide-usage");
Map<String, String> params = paramsParam.getValue();
assertEquals(params.size(), 2);
assertEquals(params.get(AnalyticsEventLoggerImpl.WS_PARAM), "workspaceId");
assertEquals(params.get(AnalyticsEventLoggerImpl.SOURCE_PARAM), "org.eclipse.che.ide.logger.AnalyticsEventLoggerTest$TestedAction");
}
@Test
public void shouldLogActionName() {
doNothing().when(eventLogger).send(anyString(), anyMap());
ArgumentCaptor<String> eventParam = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Map> paramsParam = ArgumentCaptor.forClass(Map.class);
eventLogger.log(new TestedAction(), "IDE: Action");
verify(eventLogger).send(eventParam.capture(), paramsParam.capture());
String event = eventParam.getValue();
assertEquals(event, "ide-usage");
Map<String, String> params = paramsParam.getValue();
assertEquals(params.size(), 3);
assertEquals(params.get(AnalyticsEventLoggerImpl.WS_PARAM), "workspaceId");
assertEquals(params.get(AnalyticsEventLoggerImpl.SOURCE_PARAM), "org.eclipse.che.ide.logger.AnalyticsEventLoggerTest$TestedAction");
assertEquals(params.get(AnalyticsEventLoggerImpl.ACTION_PARAM), "IDE: Action");
}
@Test
public void shouldAction() {
doNothing().when(eventLogger).send(anyString(), anyMap());
ArgumentCaptor<String> eventParam = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Map> paramsParam = ArgumentCaptor.forClass(Map.class);
eventLogger.log("Autocompleting");
verify(eventLogger).send(eventParam.capture(), paramsParam.capture());
String event = eventParam.getValue();
assertEquals(event, "ide-usage");
Map<String, String> params = paramsParam.getValue();
assertEquals(params.size(), 2);
assertEquals(params.get(AnalyticsEventLoggerImpl.WS_PARAM), "workspaceId");
assertEquals(params.get(AnalyticsEventLoggerImpl.SOURCE_PARAM), "Autocompleting");
}
@Test
public void shouldLogParams() {
doNothing().when(eventLogger).send(anyString(), anyMap());
ArgumentCaptor<String> eventParam = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Map> paramsParam = ArgumentCaptor.forClass(Map.class);
eventLogger.log(new TestedAction(), "IDE: Action",
new HashMap<String, String>() {{
put("a", "b");
}});
verify(eventLogger).send(eventParam.capture(), paramsParam.capture());
String event = eventParam.getValue();
assertEquals(event, "ide-usage");
Map<String, String> params = paramsParam.getValue();
assertEquals(params.size(), 4);
assertEquals(params.get(AnalyticsEventLoggerImpl.WS_PARAM), "workspaceId");
assertEquals(params.get(AnalyticsEventLoggerImpl.SOURCE_PARAM), "org.eclipse.che.ide.logger.AnalyticsEventLoggerTest$TestedAction");
assertEquals(params.get(AnalyticsEventLoggerImpl.ACTION_PARAM), "IDE: Action");
assertEquals(params.get("a"), "b");
}
@Test(expected = IllegalArgumentException.class)
public void shouldThrowExceptionIfParamNameExceededLimit() {
doNothing().when(eventLogger).send(anyString(), anyMap());
ArgumentCaptor<String> eventParam = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Map> paramsParam = ArgumentCaptor.forClass(Map.class);
eventLogger.log(new TestedAction(), "IDE: Action",
new HashMap<String, String>() {{
put("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "b");
}});
verify(eventLogger).send(eventParam.capture(), paramsParam.capture());
}
@Test(expected = IllegalArgumentException.class)
public void shouldThrowExceptionIfParamValueExceededLimit() {
doNothing().when(eventLogger).send(anyString(), anyMap());
ArgumentCaptor<String> eventParam = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Map> paramsParam = ArgumentCaptor.forClass(Map.class);
eventLogger.log(new TestedAction(), "IDE: Action",
new HashMap<String, String>() {{
put("a",
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" +
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" +
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" +
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" +
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
}});
verify(eventLogger).send(eventParam.capture(), paramsParam.capture());
}
private class TestedAction extends Action {
@Override
public void actionPerformed(ActionEvent e) {
}
}
}