Skip to content

Commit 615ca50

Browse files
authored
Merge pull request #118 from Y-Note-SAS/feature-35262
Unit tests for MapItems class
2 parents c4030af + c4b1878 commit 615ca50

File tree

8 files changed

+211
-9
lines changed

8 files changed

+211
-9
lines changed

claimManagement/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ android {
185185
testOptions {
186186
unitTests {
187187
includeAndroidResources = true
188+
returnDefaultValues = true
188189
}
189190
}
190191
}

claimManagement/fakedatabase

12 KB
Binary file not shown.

claimManagement/fakemapping

12 KB
Binary file not shown.

claimManagement/src/main/java/org/openimis/imisclaims/Global.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,15 @@ public class Global extends Application {
7777
private Token JWTToken;
7878
private String[] permissions;
7979

80+
public static boolean isRunningTest() {
81+
try {
82+
Class.forName("org.robolectric.RobolectricTestRunner");
83+
return true;
84+
} catch (ClassNotFoundException e) {
85+
return false;
86+
}
87+
}
88+
8089
@Override
8190
public void onCreate() {
8291
super.onCreate();

claimManagement/src/main/java/org/openimis/imisclaims/MapItems.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ public class MapItems extends ImisActivity {
3939
ListView lvMapItems;
4040
CheckBox chkAll, chk;
4141
EditText etSearchItems;
42-
4342
ArrayList<HashMap<String, Object>> ItemsList = new ArrayList<HashMap<String, Object>>();
4443

4544
HashMap<String, Object> oItem;
@@ -118,12 +117,10 @@ public void BindItemList() {
118117
//String[] Items = {"Item1","Item2","Item3","Item4","Item5"};
119118

120119
//SQLHandler sql = new SQLHandler(null, null, null, 3);
121-
SQLHandler sql = new SQLHandler(this);
122120

123-
Cursor c = sql.getMapping("I");
121+
Cursor c = sqlHandler.getMapping("I");
124122
boolean isMapped = false;
125123

126-
127124
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
128125
HashMap<String, Object> item = new HashMap<String, Object>();
129126
item.put("Code", c.getString(0));
@@ -154,7 +151,7 @@ public void BindItemList() {
154151
}
155152
}
156153

157-
private void CheckUncheckAll(boolean isChecked) {
154+
protected void CheckUncheckAll(boolean isChecked) {
158155
for (int i = 0; i < ItemsList.size(); i++) {
159156
oItem = (HashMap<String, Object>) ItemsList.get(i);
160157
oItem.put("isMapped", isChecked);
@@ -224,7 +221,7 @@ public void run() {
224221
}
225222
}
226223

227-
private int Save() {
224+
protected int Save() {
228225
int count = 0;
229226
sqlHandler.ClearMapping("I");
230227
for (int i = 0; i < ItemsList.size(); i++) {
@@ -258,7 +255,7 @@ public void onClick(DialogInterface dialog, int which) {
258255
}
259256

260257

261-
private class ItemAdapter extends SimpleAdapter {
258+
protected class ItemAdapter extends SimpleAdapter {
262259

263260
private ArrayList<HashMap<String, Object>> OriginalList, FilteredList;
264261
private ArrayList<HashMap<String, Object>> ItemList;

claimManagement/src/main/java/org/openimis/imisclaims/SQLHandler.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ public class SQLHandler extends SQLiteOpenHelper {
3232
public static final String CLAIM_UPLOAD_STATUS_ENTERED = "Entered";
3333
public static final String CLAIM_UPLOAD_STATUS_ARCHIVED = "Archived";
3434

35-
public static final String DB_NAME_MAPPING = Global.getGlobal().getSubdirectory("Databases") + "/" + "Mapping.db3";
36-
public static final String DB_NAME_DATA = Global.getGlobal().getSubdirectory("Databases") + "/" + "ImisData.db3";
35+
public static final String DB_NAME_MAPPING = isRunningTest() ? "fakemapping" : Global.getGlobal().getSubdirectory("Databases") + "/" + "Mapping.db3";
36+
public static final String DB_NAME_DATA = isRunningTest() ? "fakedatabase" : Global.getGlobal().getSubdirectory("Databases") + "/" + "ImisData.db3";
3737

3838
private static final String CreateTableMapping = "CREATE TABLE IF NOT EXISTS tblMapping(Code TEXT,Name TEXT,Type TEXT);";
3939
private static final String createTablePolicyInquiry = "CREATE TABLE IF NOT EXISTS tblPolicyInquiry(InsureeNumber text,Photo BLOB, InsureeName Text, DOB Text, Gender Text, ProductCode Text, ProductName Text, ExpiryDate Text, Status Text, DedType Int, Ded1 Int, Ded2 Int, Ceiling1 Int, Ceiling2 Int);";
@@ -79,6 +79,15 @@ public void onCreate(SQLiteDatabase db) {
7979
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
8080
}
8181

82+
public static boolean isRunningTest() {
83+
try {
84+
Class.forName("org.robolectric.RobolectricTestRunner");
85+
return true;
86+
} catch (ClassNotFoundException e) {
87+
return false;
88+
}
89+
}
90+
8291
@Nullable
8392
public Cursor getMapping(String Type) {
8493
try {
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
package org.openimis.imisclaims;
2+
3+
import static org.junit.Assert.*;
4+
import static org.mockito.Mockito.*;
5+
6+
import android.app.AlertDialog;
7+
import android.app.Application;
8+
import androidx.test.core.app.ApplicationProvider;
9+
import android.database.Cursor;
10+
import android.database.MatrixCursor;
11+
12+
import org.junit.Before;
13+
import org.junit.Test;
14+
import org.junit.runner.RunWith;
15+
import org.robolectric.Robolectric;
16+
import org.robolectric.RobolectricTestRunner;
17+
import org.robolectric.annotation.Config;
18+
19+
import java.util.HashMap;
20+
21+
@RunWith(RobolectricTestRunner.class)
22+
@Config(sdk = {28}, application = Global.class)
23+
public class MapItemsTest {
24+
25+
SQLHandler mockSqlHandler;
26+
Cursor mockCursor;
27+
MapItems activity;
28+
29+
@Before
30+
public void setup() {
31+
// Création des mocks avec la syntaxe moderne
32+
mockSqlHandler = mock(SQLHandler.class);
33+
mockCursor = mock(Cursor.class);
34+
35+
activity = Robolectric.buildActivity(MapItems.class).create().get();
36+
activity.sqlHandler = mockSqlHandler;
37+
}
38+
39+
@Test
40+
public void bindItemList_loadsItemsCorrectly() {
41+
doReturn(mockCursor).when(activity.sqlHandler).getMapping("I");
42+
when(mockCursor.moveToFirst()).thenReturn(true);
43+
when(mockCursor.isAfterLast()).thenReturn(false, true);
44+
when(mockCursor.getString(0)).thenReturn("ITEM001");
45+
when(mockCursor.getString(1)).thenReturn("Paracetamol");
46+
when(mockCursor.getString(2)).thenReturn(null);
47+
48+
activity.BindItemList();
49+
50+
assertEquals(1, activity.ItemsList.size());
51+
HashMap<String, Object> item = activity.ItemsList.get(0);
52+
assertEquals("ITEM001", item.get("Code"));
53+
assertEquals("Paracetamol", item.get("Name"));
54+
assertFalse((Boolean) item.get("isMapped"));
55+
verify(mockCursor).close();
56+
}
57+
58+
@Test
59+
public void clickingItem_togglesIsMapped() {
60+
HashMap<String, Object> item = new HashMap<>();
61+
item.put("Code", "ITEM001");
62+
item.put("Name", "Test");
63+
item.put("isMapped", false);
64+
activity.ItemsList.add(item);
65+
66+
activity.alAdapter = activity.new ItemAdapter(activity, activity.ItemsList,
67+
R.layout.mappinglist,
68+
new String[]{"Code", "Name", "isMapped"},
69+
new int[]{R.id.tvMapCode,R.id.tvMapName,R.id.chkMap});
70+
71+
activity.lvMapItems.setAdapter(activity.alAdapter);
72+
73+
activity.lvMapItems.performItemClick(null, 0, 0);
74+
75+
assertTrue((Boolean) activity.ItemsList.get(0).get("isMapped"));
76+
}
77+
78+
@Test
79+
public void checkAll_setsAllItemsMapped() {
80+
for (int i = 0; i < 3; i++) {
81+
HashMap<String, Object> item = new HashMap<>();
82+
item.put("Code", "ITEM00" + i);
83+
item.put("Name", "Item " + i);
84+
item.put("isMapped", false);
85+
activity.ItemsList.add(item);
86+
}
87+
88+
activity.alAdapter = activity.new ItemAdapter(activity, activity.ItemsList,
89+
R.layout.mappinglist,
90+
new String[]{"Code", "Name", "isMapped"},
91+
new int[]{R.id.tvMapCode,R.id.tvMapName,R.id.chkMap});
92+
93+
activity.CheckUncheckAll(true);
94+
95+
for (HashMap<String, Object> item : activity.ItemsList) {
96+
assertTrue((Boolean)item.get("isMapped"));
97+
}
98+
}
99+
100+
@Test
101+
public void save_returnsCorrectCodes() {
102+
HashMap<String,Object> item = new HashMap<>();
103+
item.put("Code","ITEM001");
104+
item.put("Name","Test");
105+
item.put("isMapped",false);
106+
activity.ItemsList.add(item);
107+
108+
when(mockSqlHandler.InsertMapping(anyString(), anyString(), anyString())).thenReturn(true);
109+
110+
int result = activity.Save();
111+
assertEquals(1, result);
112+
113+
item.put("isMapped", true);
114+
result = activity.Save();
115+
assertEquals(0, result);
116+
}
117+
118+
@Test
119+
public void save_returns2_whenInsertFails() {
120+
HashMap<String,Object> item = new HashMap<>();
121+
item.put("Code","ITEM001");
122+
item.put("Name","Test");
123+
item.put("isMapped", true);
124+
activity.ItemsList.add(item);
125+
126+
when(mockSqlHandler.InsertMapping(anyString(), anyString(), anyString())).thenReturn(false);
127+
doNothing().when(mockSqlHandler).ClearMapping(anyString());
128+
129+
130+
int result = activity.Save();
131+
assertEquals(2, result);
132+
}
133+
134+
@Test
135+
public void filter_searchWorksCorrectly() {
136+
HashMap<String,Object> item1 = new HashMap<>();
137+
item1.put("Code","ITEM001");
138+
item1.put("Name","Paracetamol");
139+
item1.put("isMapped", false);
140+
activity.ItemsList.add(item1);
141+
142+
HashMap<String,Object> item2 = new HashMap<>();
143+
item2.put("Code","ITEM002");
144+
item2.put("Name","Aspirin");
145+
item2.put("isMapped", false);
146+
activity.ItemsList.add(item2);
147+
148+
activity.alAdapter = activity.new ItemAdapter(activity, activity.ItemsList,
149+
R.layout.mappinglist,
150+
new String[]{"Code","Name","isMapped"},
151+
new int[]{R.id.tvMapCode,R.id.tvMapName,R.id.chkMap});
152+
153+
activity.alAdapter.getFilter().filter("para");
154+
155+
assertEquals(1, activity.ItemsList.size());
156+
assertEquals("Paracetamol", activity.ItemsList.get(0).get("Name"));
157+
}
158+
159+
@Test
160+
public void adapter_getView_setsCorrectValues() {
161+
HashMap<String,Object> item = new HashMap<>();
162+
item.put("Code","ITEM001");
163+
item.put("Name","Test");
164+
item.put("isMapped", true);
165+
activity.ItemsList.add(item);
166+
167+
MapItems.ItemAdapter adapter = activity.new ItemAdapter(activity, activity.ItemsList,
168+
R.layout.mappinglist,
169+
new String[]{"Code","Name","isMapped"},
170+
new int[]{R.id.tvMapCode,R.id.tvMapName,R.id.chkMap});
171+
172+
assertNotNull(adapter.getView(0, null, null));
173+
}
174+
175+
@Test
176+
public void showDialog_createsAlertDialog() {
177+
AlertDialog dialog = activity.ShowDialog("Test message");
178+
assertNotNull(dialog);
179+
}
180+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# app/src/test/resources/robolectric.properties
2+
3+
# this line force Robolectric to use the legacy SQLite implementation
4+
# which is more stable and does not depend on native binaries.
5+
sqliteMode=LEGACY
6+

0 commit comments

Comments
 (0)