package com.amazonaws.mobileconnectors.pinpoint.internal.event;
import android.database.Cursor;
import android.net.Uri;
import com.amazonaws.mobileconnectors.pinpoint.analytics.AnalyticsEvent;
import com.amazonaws.mobileconnectors.pinpoint.analytics.utils.AnalyticsContextBuilder;
import com.amazonaws.mobileconnectors.pinpoint.internal.core.PinpointContext;
import com.amazonaws.mobileconnectors.pinpoint.internal.core.system.MockDeviceDetails;
import com.amazonaws.mobileconnectors.pinpoint.internal.event.PinpointDBUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class PinpointDBUtilTest {
private int id;
private PinpointDBUtil dbUtil;
PinpointContext mockContext;
MockDeviceDetails testDeviceDetails;
private static final String SDK_NAME = "AppIntelligenceSDK-Analytics";
private static final String SDK_VERSION = "test";
private static final String UNIQUE_ID = "abc123";
private static final String SESSION_ID = "testSessionId";
private static final long SESSION_START = 100L;
private static final long SESSION_END = 1000L;
private static final long SESSION_DURATION = 900L;
private static final Long TIME_STAMP = 1370111901909l;
private static final String EVENT_NAME = "event_name";
@Before
public void setup() {
testDeviceDetails = new MockDeviceDetails();
mockContext = new AnalyticsContextBuilder()
.withSdkInfo(SDK_NAME, SDK_VERSION)
.withUniqueIdValue(UNIQUE_ID)
.withDeviceDetails(testDeviceDetails)
.withContext(Robolectric.application.getApplicationContext())
.build();
dbUtil = new PinpointDBUtil(Robolectric.application.getApplicationContext());
}
@After
public void tearDown() {
dbUtil.closeDB();
}
@Test
public void testInsertSingleEvent() throws Exception {
AnalyticsEvent analyticsEvent = AnalyticsEvent.newInstance(mockContext, SESSION_ID, SESSION_START, SESSION_END,
SESSION_DURATION, TIME_STAMP, EVENT_NAME);
Uri uri = dbUtil.saveEvent(analyticsEvent);
int idInserted = Integer.parseInt(uri.getLastPathSegment());
assertNotEquals(idInserted, 0);
}
@Test
public void testQueryById() {
AnalyticsEvent analyticsEvent = AnalyticsEvent.newInstance(mockContext, SESSION_ID, SESSION_START, SESSION_END,
SESSION_DURATION, TIME_STAMP, EVENT_NAME);
Uri uri = dbUtil.saveEvent(analyticsEvent);
int idInserted = Integer.parseInt(uri.getLastPathSegment());
assertNotEquals(idInserted, 0);
Cursor c = dbUtil.queryEventById(idInserted);
assertNotNull(c);
assertEquals(c.getCount(), 1);
c.close();
}
@Test
public void testQueryAll() {
AnalyticsEvent analyticsEvent = AnalyticsEvent.newInstance(mockContext, SESSION_ID, SESSION_START, SESSION_END,
SESSION_DURATION, TIME_STAMP, EVENT_NAME);
Uri uri1 = dbUtil.saveEvent(analyticsEvent);
Uri uri2 = dbUtil.saveEvent(analyticsEvent);
int idInserted1 = Integer.parseInt(uri1.getLastPathSegment());
int idInserted2 = Integer.parseInt(uri2.getLastPathSegment());
assertNotEquals(idInserted1, 0);
assertNotEquals(idInserted2, 0);
Cursor c = dbUtil.queryAllEvents();
assertNotNull(c);
assertEquals(c.getCount(), 2);
c.close();
}
@Test
public void testDelete() {
AnalyticsEvent analyticsEvent = AnalyticsEvent.newInstance(mockContext, SESSION_ID, SESSION_START, SESSION_END,
SESSION_DURATION, TIME_STAMP, EVENT_NAME);
Uri uri1 = dbUtil.saveEvent(analyticsEvent);
Uri uri2 = dbUtil.saveEvent(analyticsEvent);
int idInserted1 = Integer.parseInt(uri1.getLastPathSegment());
int idInserted2 = Integer.parseInt(uri2.getLastPathSegment());
assertNotEquals(idInserted1, 0);
assertNotEquals(idInserted2, 0);
Cursor c = dbUtil.queryAllEvents();
assertNotNull(c);
assertEquals(c.getCount(), 2);
c.close();
int delete1 = dbUtil.deleteEvent(idInserted1, null);
Cursor c1 = dbUtil.queryAllEvents();
assertNotNull(c1);
assertEquals(c1.getCount(), 1);
c1.close();
int delete2 = dbUtil.deleteEvent(idInserted2, null);
Cursor c2 = dbUtil.queryAllEvents();
assertNotNull(c2);
assertEquals(c2.getCount(), 0);
c2.close();
}
}