package eu.musesproject.client.usercontexteventhandler;
/*
* #%L
* musesclient
* %%
* Copyright (C) 2013 - 2014 HITEC
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import android.content.Context;
import android.test.AndroidTestCase;
import eu.musesproject.client.contextmonitoring.sensors.AppSensor;
import eu.musesproject.client.contextmonitoring.sensors.ConnectivitySensor;
import eu.musesproject.client.db.handler.DBManager;
import eu.musesproject.client.model.decisiontable.Action;
import eu.musesproject.client.model.decisiontable.ActionType;
import eu.musesproject.contextmodel.ContextEvent;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserContextEventHandlerTest extends AndroidTestCase {
private DBManager dbManager;
private Action action;
private Map<String, String> actionProperties;
private Context context;
private UserContextEventHandler handler;
private List<ContextEvent> contextEvents;
private final long timestamp = 1337L;
public void setUp(){
context = getContext();
dbManager = new DBManager(context);
handler = UserContextEventHandler.getInstance();
handler.setContext(getContext());
// set up test data
action = new Action();
action.setTimestamp(timestamp);
action.setActionType(ActionType.UPDATE);
action.setDescription("test");
actionProperties = new HashMap<String, String>();
actionProperties.put("prop1","prop1");
actionProperties.put("prop2","prop2");
actionProperties.put("prop3","prop3");
contextEvents = new ArrayList<ContextEvent>();
ContextEvent event = new ContextEvent();
event.setTimestamp(timestamp);
event.setType(ConnectivitySensor.TYPE);
event.addProperty("wifiEnabled", "true");
event.addProperty("wifiConnected", "true");
event.addProperty("airplaneMode", "false");
contextEvents.add(event);
event = new ContextEvent();
event.setTimestamp(timestamp);
event.setType(AppSensor.TYPE);
event.addProperty("appName", "gmail");
contextEvents.add(event);
}
public void testStoreContextEvent() {
// handler.storeContextEvent(action, actionProperties, contextEvents);
// dbManager.openDB();
//
// // number of stored events
// assertEquals("no of stored context events", 2, dbManager.getNoOfContextEventsStored());
//
// // action
// List<eu.musesproject.client.db.entity.Action> entityActions = dbManager.getActionList();
// assertNotNull(entityActions);
// assertEquals(1, entityActions.size());
//
// eu.musesproject.client.db.entity.Action entityAction = entityActions.get(0);
// assertNotNull(entityAction);
// assertEquals(timestamp, entityAction.getTimestamp());
// assertEquals(ActionType.UPDATE, entityAction.getActionType());
// assertEquals("test", entityAction.getDescription());
//
// // action properties
// List<ActionProperty> dbActionProperties = dbManager.getActionPropertiesOfAction(1);
// assertNotNull(dbActionProperties);
// assertEquals(3, dbActionProperties.size());
// assertEquals("prop2", dbActionProperties.get(0).getValue());
// assertEquals("prop1", dbActionProperties.get(1).getValue());
// assertEquals("prop3", dbActionProperties.get(2).getValue());
//
//
// // context events in general
// List<eu.musesproject.client.db.entity.ContextEvent> storedContextEvents = dbManager.getStoredContextEventByActionId(entityAction.getId());
// assertEquals("no of stored context events", 2, storedContextEvents.size());
//
// // connectivity context event
// eu.musesproject.client.db.entity.ContextEvent connectivityContextEvent = storedContextEvents.get(0);
// assertEquals("Connectivity context event", timestamp, connectivityContextEvent.getTimestamp());
// assertEquals("Connectivity context event", ConnectivitySensor.TYPE, connectivityContextEvent.getType());
// List<Property> connectivityProperties = dbManager.getPropertiesOfContextEvent(storedContextEvents.get(0).getId());
// assertEquals("number of connectivity properties", 3, connectivityProperties.size());
// assertEquals("connectivity property: wifiConnected", "wifiConnected", connectivityProperties.get(0).getKey());
// assertEquals("connectivity property: wifiConnected", "true", connectivityProperties.get(0).getValue());
// assertEquals("connectivity property: wifiEnabled", "wifiEnabled", connectivityProperties.get(1).getKey());
// assertEquals("connectivity property: wifiEnabled", "true", connectivityProperties.get(1).getValue());
// assertEquals("connectivity property: airplaneMode", "airplaneMode", connectivityProperties.get(2).getKey());
// assertEquals("connectivity property: airplaneMode", "false", connectivityProperties.get(2).getValue());
//
//
// // app context event
// eu.musesproject.client.db.entity.ContextEvent appContextEvent = storedContextEvents.get(1);
// assertEquals("app context event", timestamp, appContextEvent.getTimestamp());
// assertEquals("app context event", AppSensor.TYPE, appContextEvent.getType());
// List<Property> appProperties = dbManager.getPropertiesOfContextEvent(storedContextEvents.get(1).getId());
// assertEquals("number of app properties", 1, appProperties.size());
// assertEquals("connectivity property: appName", "appName", appProperties.get(0).getKey());
// assertEquals("connectivity property: appName", "gmail", appProperties.get(0).getValue());
//
// dbManager.closeDB();
}
public void testSendOfflineStoredContextEventsToServer() {
//handler.sendOfflineStoredContextEventsToServer();
}
public void testSetContext() {
handler.setContext(context);
Field contextField = null;
try {
contextField = handler.getClass().getDeclaredField("context");
contextField.setAccessible(true);
assertNotNull(contextField);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
public void tearDown() throws Exception{
context.deleteDatabase("muses_client_db");
super.tearDown();
}
}