Skip to content

Commit dfd289a

Browse files
committed
Add Tests for Notes
1 parent 325eaf8 commit dfd289a

3 files changed

Lines changed: 225 additions & 0 deletions

File tree

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package net.osmtracker.db;
2+
3+
import android.database.Cursor;
4+
import android.location.Location;
5+
import android.os.Bundle;
6+
7+
import androidx.test.core.app.ApplicationProvider;
8+
9+
import org.junit.Assert;
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
import org.junit.runner.RunWith;
13+
import org.robolectric.RobolectricTestRunner;
14+
import org.robolectric.annotation.Config;
15+
16+
import java.util.UUID;
17+
18+
@RunWith(RobolectricTestRunner.class)
19+
@Config(sdk = 25)
20+
public class DataHelperNoteTest {
21+
22+
private DataHelper dataHelper;
23+
24+
@Before
25+
public void setup() {
26+
// Initialize DataHelper with the Robolectric application context
27+
dataHelper = new DataHelper(ApplicationProvider.getApplicationContext());
28+
}
29+
30+
@Test
31+
public void testDeleteNote_RemovesFromDatabase() {
32+
String noteUUID = UUID.randomUUID().toString();
33+
long trackId = 1L;
34+
35+
// 1. Insert a note
36+
Location loc = new Location("gps");
37+
loc.setLatitude(1.23);
38+
loc.setLongitude(4.56);
39+
loc.setTime(System.currentTimeMillis());
40+
41+
// Initialize extras to avoid NullPointerException if logic accesses location extras
42+
loc.setExtras(new Bundle());
43+
44+
dataHelper.trackNote(trackId, loc, "Note to delete", noteUUID);
45+
46+
// 2. Verify it exists before deletion
47+
Assert.assertTrue("Note should exist after insertion", noteExists(trackId));
48+
49+
// 3. Delete note
50+
dataHelper.deleteNote(noteUUID);
51+
52+
// 4. Verify it is gone
53+
Assert.assertFalse("Note should have been deleted from DB", noteExists(trackId));
54+
}
55+
56+
private boolean noteExists(long TrackId) {
57+
// Query using the content resolver provided by the Robolectric environment
58+
Cursor c = ApplicationProvider.getApplicationContext().getContentResolver().query(
59+
TrackContentProvider.notesUri(TrackId),
60+
null,null,null,null);
61+
62+
boolean exists = (c != null && c.getCount() > 0);
63+
if (c != null) {
64+
c.close();
65+
}
66+
return exists;
67+
}
68+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package net.osmtracker.db.model;
2+
3+
import android.content.Context;
4+
5+
import androidx.test.core.app.ApplicationProvider;
6+
7+
import org.junit.Assert;
8+
import org.junit.Before;
9+
import org.junit.Test;
10+
import org.junit.runner.RunWith;
11+
import org.robolectric.RobolectricTestRunner;
12+
import org.robolectric.annotation.Config;
13+
14+
import net.osmtracker.R;
15+
import net.osmtracker.db.model.Track;
16+
17+
@RunWith(RobolectricTestRunner.class)
18+
//Min SDK of the App
19+
@Config(sdk = 25)
20+
public class OSMVisibilityTest {
21+
22+
private Context context;
23+
24+
@Before
25+
public void setUp() {
26+
context = ApplicationProvider.getApplicationContext();
27+
}
28+
29+
30+
@Test
31+
public void testEnumMappingToName() {
32+
// Database stores the .name() of the enum
33+
Assert.assertEquals("Private" , Track.OSMVisibility.Private.name());
34+
Assert.assertEquals("Public" , Track.OSMVisibility.Public.name());
35+
Assert.assertEquals("Trackable" , Track.OSMVisibility.Trackable.name());
36+
Assert.assertEquals("Identifiable", Track.OSMVisibility.Identifiable.name());
37+
}
38+
39+
@Test
40+
public void testFromPosition() {
41+
// Verifies the Spinner index mapping (0 -> Private, 3 -> Identifiable)
42+
Assert.assertEquals(Track.OSMVisibility.Private, Track.OSMVisibility.fromPosition(0));
43+
Assert.assertEquals(Track.OSMVisibility.Public, Track.OSMVisibility.fromPosition(1));
44+
Assert.assertEquals(Track.OSMVisibility.Trackable, Track.OSMVisibility.fromPosition(2));
45+
Assert.assertEquals(Track.OSMVisibility.Identifiable, Track.OSMVisibility.fromPosition(3));
46+
}
47+
48+
@Test
49+
public void testResourceIdsMapToCorrectStrings() {
50+
Assert.assertEquals(context.getString(R.string.osm_visibility_private),
51+
context.getString(Track.OSMVisibility.Private.resId));
52+
Assert.assertEquals(context.getString(R.string.osm_visibility_public),
53+
context.getString(Track.OSMVisibility.Public.resId));
54+
Assert.assertEquals(context.getString(R.string.osm_visibility_trackable),
55+
context.getString(Track.OSMVisibility.Trackable.resId));
56+
Assert.assertEquals(context.getString(R.string.osm_visibility_identifiable),
57+
context.getString(Track.OSMVisibility.Identifiable.resId));
58+
}
59+
60+
@Test(expected = IllegalArgumentException.class)
61+
public void testFromPosition_Invalid() {
62+
// Verifies that an invalid index throws the expected exception
63+
Track.OSMVisibility.fromPosition(99);
64+
}
65+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package net.osmtracker.db.model;
2+
3+
import android.content.ContentResolver;
4+
import android.database.Cursor;
5+
6+
import net.osmtracker.db.TrackContentProvider;
7+
import net.osmtracker.db.model.Track;
8+
import static net.osmtracker.db.TrackContentProvider.Schema.*;
9+
10+
import org.junit.Test;
11+
12+
import java.lang.reflect.Field;
13+
import java.util.Arrays;
14+
import java.util.List;
15+
16+
import static org.junit.Assert.assertEquals;
17+
import static org.powermock.api.mockito.PowerMockito.*;
18+
19+
//@RunWith(PowerMockRunner.class)
20+
public class TrackTest {
21+
22+
final long START_DATE = 123;
23+
final String NAME = "some name";
24+
final String DESCRIPTION = "foo desc";
25+
final String TAGS = "tag1,tag2,tag3";
26+
final List TAGS_LIST = Arrays.asList("tag1","tag2","tag3");
27+
final String VISIBILITY = Track.OSMVisibility.Public.name();
28+
final int TRACKPOINT_COUNT = 10;
29+
final int WAYPOINT_COUNT = 20;
30+
31+
public Cursor initMockCursor(){
32+
Cursor mockCursor = mock(Cursor.class);
33+
34+
// Columns mocks
35+
when(mockCursor.getColumnIndex(COL_START_DATE)).thenReturn(1);
36+
when(mockCursor.getLong(1)).thenReturn(START_DATE);
37+
38+
39+
when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_NAME)).thenReturn(2);
40+
when(mockCursor.getString(2)).thenReturn(NAME);
41+
42+
when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_DESCRIPTION)).thenReturn(3);
43+
when(mockCursor.getString(3)).thenReturn(DESCRIPTION);
44+
45+
when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_TAGS)).thenReturn(4);
46+
when(mockCursor.getString(4)).thenReturn(TAGS);
47+
48+
when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_OSM_VISIBILITY)).thenReturn(5);
49+
when(mockCursor.getString(5)).thenReturn(VISIBILITY);
50+
51+
when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_TRACKPOINT_COUNT)).thenReturn(6);
52+
when(mockCursor.getInt(6)).thenReturn(TRACKPOINT_COUNT);
53+
54+
when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_WAYPOINT_COUNT)).thenReturn(7);
55+
when(mockCursor.getInt(7)).thenReturn(WAYPOINT_COUNT);
56+
57+
return mockCursor;
58+
}
59+
60+
@Test
61+
public void testBuild(){
62+
63+
int trackId = 1;
64+
ContentResolver resolver = null; // Not used in the method
65+
Cursor mockCursor = initMockCursor();
66+
boolean withExtraInfo = false;
67+
68+
Track t = Track.build(1, mockCursor, resolver, withExtraInfo);
69+
70+
71+
try {
72+
Field startDateField = t.getClass().getDeclaredField("trackDate");
73+
startDateField.setAccessible(true);
74+
75+
Field tagsField = t.getClass().getDeclaredField("tags");
76+
tagsField.setAccessible(true);
77+
78+
79+
assertEquals(START_DATE, startDateField.get(t));
80+
assertEquals(NAME, t.getName());
81+
assertEquals(DESCRIPTION, t.getDescription());
82+
assertEquals(TAGS_LIST, tagsField.get(t));
83+
assertEquals(Track.OSMVisibility.valueOf(VISIBILITY), t.getVisibility());
84+
assertEquals( TRACKPOINT_COUNT, (long) t.getTpCount() );
85+
assertEquals( WAYPOINT_COUNT, (long) t.getWpCount() );
86+
87+
88+
}catch (Exception e){
89+
e.printStackTrace();
90+
}
91+
}
92+
}

0 commit comments

Comments
 (0)