2018-03-23 17:36:49 +01:00
package info ;
import android.content.Context ;
2018-04-12 21:45:59 +02:00
import android.content.Intent ;
2018-09-14 09:00:00 +02:00
import android.content.res.Resources ;
2018-03-23 17:36:49 +01:00
import com.squareup.otto.Bus ;
import org.json.JSONException ;
import org.json.JSONObject ;
2018-04-12 21:45:59 +02:00
import org.junit.Assert ;
2018-03-23 17:36:49 +01:00
import org.powermock.api.mockito.PowerMockito ;
import java.util.Locale ;
import info.nightscout.androidaps.Constants ;
import info.nightscout.androidaps.MainApp ;
import info.nightscout.androidaps.R ;
2018-03-25 23:56:52 +02:00
import info.nightscout.androidaps.data.ConstraintChecker ;
2018-03-23 17:36:49 +01:00
import info.nightscout.androidaps.data.Profile ;
2018-04-16 23:29:53 +02:00
import info.nightscout.androidaps.data.ProfileStore ;
2018-03-26 16:51:25 +02:00
import info.nightscout.androidaps.db.DatabaseHelper ;
2018-08-02 16:11:30 +02:00
import info.nightscout.androidaps.logging.L ;
2018-03-23 17:36:49 +01:00
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin ;
2018-09-04 19:55:31 +02:00
import info.nightscout.androidaps.plugins.ConfigBuilder.ProfileFunctions ;
2018-08-10 22:17:44 +02:00
import info.nightscout.androidaps.plugins.NSClientInternal.NSUpload ;
2018-04-16 23:29:53 +02:00
import info.nightscout.androidaps.plugins.Treatments.TreatmentService ;
2018-08-10 22:17:44 +02:00
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin ;
2018-09-14 09:00:00 +02:00
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin ;
import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin ;
2018-04-07 16:33:37 +02:00
import info.nightscout.androidaps.queue.CommandQueue ;
2018-03-23 17:36:49 +01:00
import info.nightscout.utils.SP ;
2018-08-02 16:11:30 +02:00
import static org.mockito.ArgumentMatchers.any ;
2018-03-23 17:36:49 +01:00
import static org.mockito.ArgumentMatchers.anyBoolean ;
import static org.mockito.ArgumentMatchers.anyInt ;
import static org.mockito.ArgumentMatchers.anyLong ;
import static org.mockito.Mockito.mock ;
import static org.mockito.Mockito.when ;
/ * *
* Created by mike on 23 . 03 . 2018 .
* /
public class AAPSMocker {
2018-03-31 00:36:03 +02:00
private static String validProfile = " { \" dia \" : \" 3 \" , \" carbratio \" :[{ \" time \" : \" 00:00 \" , \" value \" : \" 30 \" }], \" carbs_hr \" : \" 20 \" , \" delay \" : \" 20 \" , \" sens \" :[{ \" time \" : \" 00:00 \" , \" value \" : \" 100 \" },{ \" time \" : \" 2:00 \" , \" value \" : \" 110 \" }], \" timezone \" : \" UTC \" , \" basal \" :[{ \" time \" : \" 00:00 \" , \" value \" : \" 1 \" }], \" target_low \" :[{ \" time \" : \" 00:00 \" , \" value \" : \" 4 \" }], \" target_high \" :[{ \" time \" : \" 00:00 \" , \" value \" : \" 5 \" }], \" startDate \" : \" 1970-01-01T00:00:00.000Z \" , \" units \" : \" mmol \" } " ;
private static Profile profile ;
2018-04-16 23:29:53 +02:00
private static ProfileStore profileStore ;
public static final String TESTPROFILENAME = " someProfile " ;
2018-03-23 17:36:49 +01:00
2018-04-12 21:45:59 +02:00
public static Intent intentSent = null ;
2018-03-23 17:36:49 +01:00
public static void mockStrings ( ) {
Locale . setDefault ( new Locale ( " en " , " US " ) ) ;
when ( MainApp . gs ( R . string . closed_loop_disabled_on_dev_branch ) ) . thenReturn ( " Running dev version. Closed loop is disabled. " ) ;
when ( MainApp . gs ( R . string . closedmodedisabledinpreferences ) ) . thenReturn ( " Closed loop mode disabled in preferences " ) ;
when ( MainApp . gs ( R . string . objectivenotstarted ) ) . thenReturn ( " Objective %d not started " ) ;
when ( MainApp . gs ( R . string . novalidbasalrate ) ) . thenReturn ( " No valid basal rate read from pump " ) ;
when ( MainApp . gs ( R . string . autosensdisabledinpreferences ) ) . thenReturn ( " Autosens disabled in preferences " ) ;
when ( MainApp . gs ( R . string . smbdisabledinpreferences ) ) . thenReturn ( " SMB disabled in preferences " ) ;
when ( MainApp . gs ( R . string . limitingbasalratio ) ) . thenReturn ( " Limiting basal rate to %.2f U/h because of %s " ) ;
when ( MainApp . gs ( R . string . pumplimit ) ) . thenReturn ( " pump limit " ) ;
when ( MainApp . gs ( R . string . itmustbepositivevalue ) ) . thenReturn ( " it must be positive value " ) ;
when ( MainApp . gs ( R . string . maxvalueinpreferences ) ) . thenReturn ( " max value in preferences " ) ;
when ( MainApp . gs ( R . string . maxbasalmultiplier ) ) . thenReturn ( " max basal multiplier " ) ;
when ( MainApp . gs ( R . string . maxdailybasalmultiplier ) ) . thenReturn ( " max daily basal multiplier " ) ;
when ( MainApp . gs ( R . string . limitingpercentrate ) ) . thenReturn ( " Limiting percent rate to %d%% because of %s " ) ;
when ( MainApp . gs ( R . string . pumplimit ) ) . thenReturn ( " pump limit " ) ;
when ( MainApp . gs ( R . string . limitingbolus ) ) . thenReturn ( " Limiting bolus to %.1f U because of %s " ) ;
when ( MainApp . gs ( R . string . hardlimit ) ) . thenReturn ( " hard limit " ) ;
when ( MainApp . gs ( R . string . key_child ) ) . thenReturn ( " child " ) ;
when ( MainApp . gs ( R . string . limitingcarbs ) ) . thenReturn ( " Limiting carbs to %d g because of %s " ) ;
when ( MainApp . gs ( R . string . limitingiob ) ) . thenReturn ( " Limiting IOB to %.1f U because of %s " ) ;
when ( MainApp . gs ( R . string . pumpisnottempbasalcapable ) ) . thenReturn ( " Pump is not temp basal capable " ) ;
2018-03-23 20:10:45 +01:00
when ( MainApp . gs ( R . string . loop ) ) . thenReturn ( " Loop " ) ;
when ( MainApp . gs ( R . string . loop_shortname ) ) . thenReturn ( " LOOP " ) ;
2018-03-25 23:56:52 +02:00
when ( MainApp . gs ( R . string . smbalwaysdisabled ) ) . thenReturn ( " SMB always and after carbs disabled because active BG source doesn \\ 't support advanced filtering " ) ;
when ( MainApp . gs ( R . string . smbnotallowedinopenloopmode ) ) . thenReturn ( " SMB not allowed in open loop mode " ) ;
when ( MainApp . gs ( R . string . Glimp ) ) . thenReturn ( " Glimp " ) ;
2018-03-26 16:51:25 +02:00
when ( MainApp . gs ( R . string . glucose ) ) . thenReturn ( " Glucose " ) ;
when ( MainApp . gs ( R . string . delta ) ) . thenReturn ( " Delta " ) ;
when ( MainApp . gs ( R . string . short_avgdelta ) ) . thenReturn ( " Short avg. delta " ) ;
when ( MainApp . gs ( R . string . long_avgdelta ) ) . thenReturn ( " Long avg. delta " ) ;
2018-03-27 14:19:52 +02:00
when ( MainApp . gs ( R . string . zerovalueinprofile ) ) . thenReturn ( " Invalid profile: %s " ) ;
2018-03-29 18:44:16 +02:00
when ( MainApp . gs ( R . string . success ) ) . thenReturn ( " Success " ) ;
when ( MainApp . gs ( R . string . enacted ) ) . thenReturn ( " Enacted " ) ;
when ( MainApp . gs ( R . string . comment ) ) . thenReturn ( " Comment " ) ;
when ( MainApp . gs ( R . string . smb_shortname ) ) . thenReturn ( " SMB " ) ;
when ( MainApp . gs ( R . string . canceltemp ) ) . thenReturn ( " Cancel temp basal " ) ;
when ( MainApp . gs ( R . string . duration ) ) . thenReturn ( " Duration " ) ;
when ( MainApp . gs ( R . string . percent ) ) . thenReturn ( " Percent " ) ;
when ( MainApp . gs ( R . string . absolute ) ) . thenReturn ( " Absolute " ) ;
when ( MainApp . gs ( R . string . waitingforpumpresult ) ) . thenReturn ( " Waiting for result " ) ;
when ( MainApp . gs ( R . string . insulin_unit_shortname ) ) . thenReturn ( " U " ) ;
2018-03-31 11:31:09 +02:00
when ( MainApp . gs ( R . string . minimalbasalvaluereplaced ) ) . thenReturn ( " Basal value replaced by minimal supported value " ) ;
when ( MainApp . gs ( R . string . basalprofilenotaligned ) ) . thenReturn ( " Basal values not aligned to hours: %s " ) ;
2018-04-01 18:44:58 +02:00
when ( MainApp . gs ( R . string . minago ) ) . thenReturn ( " %d min ago " ) ;
when ( MainApp . gs ( R . string . hoursago ) ) . thenReturn ( " %.1fh ago " ) ;
2018-04-12 21:45:59 +02:00
when ( MainApp . gs ( R . string . careportal_profileswitch ) ) . thenReturn ( " Profile Switch " ) ;
2018-08-05 22:55:08 +02:00
when ( MainApp . gs ( R . string . configbuilder_insulin ) ) . thenReturn ( " Insulin " ) ;
2018-08-10 22:17:44 +02:00
when ( MainApp . gs ( R . string . bolusdelivering ) ) . thenReturn ( " Delivering 0.0U " ) ;
2018-03-23 17:36:49 +01:00
}
public static MainApp mockMainApp ( ) {
PowerMockito . mockStatic ( MainApp . class ) ;
MainApp mainApp = mock ( MainApp . class ) ;
when ( MainApp . instance ( ) ) . thenReturn ( mainApp ) ;
2018-09-14 09:00:00 +02:00
2018-03-23 17:36:49 +01:00
return mainApp ;
}
public static void mockConfigBuilder ( ) {
PowerMockito . mockStatic ( ConfigBuilderPlugin . class ) ;
ConfigBuilderPlugin configBuilderPlugin = mock ( ConfigBuilderPlugin . class ) ;
2018-09-17 17:43:42 +02:00
when ( ConfigBuilderPlugin . getPlugin ( ) ) . thenReturn ( configBuilderPlugin ) ;
2018-03-23 17:36:49 +01:00
}
2018-09-04 19:55:31 +02:00
public static ConstraintChecker mockConstraintsChecker ( ) {
2018-03-25 23:56:52 +02:00
ConstraintChecker constraintChecker = mock ( ConstraintChecker . class ) ;
when ( MainApp . getConstraintChecker ( ) ) . thenReturn ( constraintChecker ) ;
2018-09-04 19:55:31 +02:00
return constraintChecker ;
2018-03-25 23:56:52 +02:00
}
2018-03-23 17:36:49 +01:00
public static void mockBus ( ) {
Bus bus = PowerMockito . mock ( Bus . class ) ;
when ( MainApp . bus ( ) ) . thenReturn ( bus ) ;
}
public static void mockSP ( ) {
PowerMockito . mockStatic ( SP . class ) ;
when ( SP . getLong ( anyInt ( ) , anyLong ( ) ) ) . thenReturn ( 0L ) ;
when ( SP . getBoolean ( anyInt ( ) , anyBoolean ( ) ) ) . thenReturn ( false ) ;
when ( SP . getInt ( anyInt ( ) , anyInt ( ) ) ) . thenReturn ( 0 ) ;
}
2018-08-02 16:11:30 +02:00
public static void mockL ( ) {
PowerMockito . mockStatic ( L . class ) ;
when ( L . isEnabled ( any ( ) ) ) . thenReturn ( true ) ;
}
2018-09-14 09:00:00 +02:00
public static void mockNSUpload ( ) {
2018-08-10 22:17:44 +02:00
PowerMockito . mockStatic ( NSUpload . class ) ;
}
2018-03-23 17:36:49 +01:00
public static void mockApplicationContext ( ) {
2018-09-14 09:00:00 +02:00
Context mockedContext = mock ( Context . class ) ;
Resources mResources = mock ( Resources . class ) ;
when ( MainApp . instance ( ) . getApplicationContext ( ) ) . thenReturn ( mockedContext ) ;
when ( mockedContext . getResources ( ) ) . thenReturn ( mResources ) ;
2018-03-23 17:36:49 +01:00
}
2018-08-17 16:41:12 +02:00
public static DatabaseHelper mockDatabaseHelper ( ) {
2018-03-26 16:51:25 +02:00
DatabaseHelper databaseHelper = mock ( DatabaseHelper . class ) ;
when ( MainApp . getDbHelper ( ) ) . thenReturn ( databaseHelper ) ;
2018-08-17 16:41:12 +02:00
return databaseHelper ;
2018-03-26 16:51:25 +02:00
}
2018-04-07 16:33:37 +02:00
public static void mockCommandQueue ( ) {
CommandQueue queue = mock ( CommandQueue . class ) ;
2018-09-17 19:29:01 +02:00
when ( ConfigBuilderPlugin . getPlugin ( ) . getCommandQueue ( ) ) . thenReturn ( queue ) ;
2018-04-07 16:33:37 +02:00
}
2018-09-04 20:50:42 +02:00
public static TreatmentsPlugin mockTreatmentPlugin ( ) {
2018-09-04 19:55:31 +02:00
PowerMockito . mockStatic ( TreatmentsPlugin . class ) ;
2018-08-10 22:17:44 +02:00
TreatmentsPlugin treatmentsPlugin = PowerMockito . mock ( TreatmentsPlugin . class ) ;
when ( TreatmentsPlugin . getPlugin ( ) ) . thenReturn ( treatmentsPlugin ) ;
2018-09-04 19:55:31 +02:00
return treatmentsPlugin ;
2018-04-16 23:29:53 +02:00
}
2018-09-04 20:50:42 +02:00
public static void mockTreatmentService ( ) throws Exception {
TreatmentService treatmentService = PowerMockito . mock ( TreatmentService . class ) ;
PowerMockito . whenNew ( TreatmentService . class ) . withNoArguments ( ) . thenReturn ( treatmentService ) ;
}
2018-09-14 09:00:00 +02:00
public static DanaRPlugin mockDanaRPlugin ( ) {
PowerMockito . mockStatic ( DanaRPlugin . class ) ;
DanaRPlugin danaRPlugin = mock ( DanaRPlugin . class ) ;
DanaRKoreanPlugin danaRKoreanPlugin = mock ( DanaRKoreanPlugin . class ) ;
when ( MainApp . getSpecificPlugin ( DanaRPlugin . class ) ) . thenReturn ( danaRPlugin ) ;
when ( MainApp . getSpecificPlugin ( DanaRKoreanPlugin . class ) ) . thenReturn ( danaRKoreanPlugin ) ;
return danaRPlugin ;
}
2018-03-27 14:19:52 +02:00
public static Profile getValidProfile ( ) {
try {
if ( profile = = null )
profile = new Profile ( new JSONObject ( validProfile ) , Constants . MGDL ) ;
2018-04-07 16:33:37 +02:00
} catch ( JSONException ignored ) {
}
2018-03-23 17:36:49 +01:00
return profile ;
}
2018-03-31 11:31:09 +02:00
2018-04-16 23:29:53 +02:00
public static ProfileStore getValidProfileStore ( ) {
try {
if ( profileStore = = null ) {
JSONObject json = new JSONObject ( ) ;
JSONObject store = new JSONObject ( ) ;
JSONObject profile = new JSONObject ( validProfile ) ;
json . put ( " defaultProfile " , TESTPROFILENAME ) ;
json . put ( " store " , store ) ;
store . put ( TESTPROFILENAME , profile ) ;
profileStore = new ProfileStore ( json ) ;
}
} catch ( JSONException ignored ) {
Assert . fail ( " getValidProfileStore() failed " ) ;
}
return profileStore ;
}
2018-09-04 19:55:31 +02:00
public static void mockProfileFunctions ( ) {
PowerMockito . mockStatic ( ProfileFunctions . class ) ;
ProfileFunctions profileFunctions = PowerMockito . mock ( ProfileFunctions . class ) ;
PowerMockito . when ( ProfileFunctions . getInstance ( ) ) . thenReturn ( profileFunctions ) ;
profile = getValidProfile ( ) ;
PowerMockito . when ( ProfileFunctions . getInstance ( ) . getProfile ( ) ) . thenReturn ( profile ) ;
}
2018-03-31 11:31:09 +02:00
private static MockedBus bus = new MockedBus ( ) ;
public static void prepareMockedBus ( ) {
when ( MainApp . bus ( ) ) . thenReturn ( bus ) ;
}
public static class MockedBus extends Bus {
public boolean registered = false ;
public boolean notificationSent = false ;
@Override
public void register ( Object event ) {
registered = true ;
}
@Override
public void unregister ( Object event ) {
registered = false ;
}
@Override
public void post ( Object event ) {
notificationSent = true ;
}
}
2018-03-23 17:36:49 +01:00
}