diff --git a/app/build.gradle b/app/build.gradle index cbcc428f25..716328c0be 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -174,6 +174,10 @@ dependencies { compile 'junit:junit:4.12' testCompile 'org.json:json:20140107' testCompile 'org.mockito:mockito-core:2.7.22' + testCompile 'org.powermock:powermock-api-mockito2:1.7.3' + testCompile 'org.powermock:powermock-module-junit4-rule-agent:1.7.3' + testCompile 'org.powermock:powermock-module-junit4-rule:1.7.3' + testCompile 'org.powermock:powermock-module-junit4:1.7.3' androidTestCompile 'org.mockito:mockito-core:2.7.22' androidTestCompile 'com.google.dexmaker:dexmaker:1.2' androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2' diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/services/NSClientService.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/services/NSClientService.java index abd0f2b26b..1ef71c2f75 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/services/NSClientService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/services/NSClientService.java @@ -114,6 +114,18 @@ public class NSClientService extends Service { initialize(); } + @Override + public void onCreate() { + super.onCreate(); + mWakeLock.acquire(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mWakeLock.release(); + } + public class LocalBinder extends Binder { public NSClientService getServiceInstance() { return NSClientService.this; @@ -182,8 +194,6 @@ public class NSClientService extends Service { public void initialize() { dataCounter = 0; - NSClientService.mWakeLock.acquire(); - readPreferences(); if (!nsAPISecret.equals("")) @@ -221,7 +231,6 @@ public class NSClientService extends Service { MainApp.bus().post(new EventNSClientNewLog("NSCLIENT", "No NS URL specified")); MainApp.bus().post(new EventNSClientStatus("Not configured")); } - NSClientService.mWakeLock.release(); } private Emitter.Listener onConnect = new Emitter.Listener() { @@ -242,6 +251,15 @@ public class NSClientService extends Service { public void destroy() { if (mSocket != null) { + mSocket.off(Socket.EVENT_CONNECT); + mSocket.off(Socket.EVENT_DISCONNECT); + mSocket.off(Socket.EVENT_PING); + mSocket.off("dataUpdate"); + mSocket.off("announcement"); + mSocket.off("alarm"); + mSocket.off("urgent_alarm"); + mSocket.off("clear_alarm"); + MainApp.bus().post(new EventNSClientNewLog("NSCLIENT", "destroy")); isConnected = false; hasWriteAuth = false; diff --git a/app/src/test/java/info/nightscout/utils/BolusWizardTest.java b/app/src/test/java/info/nightscout/utils/BolusWizardTest.java new file mode 100644 index 0000000000..21872f47bc --- /dev/null +++ b/app/src/test/java/info/nightscout/utils/BolusWizardTest.java @@ -0,0 +1,85 @@ +package info.nightscout.utils; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import info.nightscout.androidaps.MainApp; +import info.nightscout.androidaps.data.GlucoseStatus; +import info.nightscout.androidaps.data.IobTotal; +import info.nightscout.androidaps.data.Profile; +import info.nightscout.androidaps.db.Treatment; +import info.nightscout.androidaps.interfaces.PumpInterface; +import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; +import info.nightscout.androidaps.plugins.PumpMDI.MDIPlugin; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * Created by kuchjir on 12/12/2017. + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest( { MainApp.class, GlucoseStatus.class, ConfigBuilderPlugin.class }) +public class BolusWizardTest { + private static final double PUMP_BOLUS_STEP = 0.1; + + @Test + /** Should calculate the same bolus when different blood glucose but both in target range */ + public void shuldCalculateTheSameBolusWhenBGsInRange() throws Exception { + BolusWizard bw = new BolusWizard(); + Profile profile = setupProfile(4d, 8d, 20d, 12d); + + Double bolusForBg42 = bw.doCalc(profile, null, 20, 0.0,4.2, 0d, 100d, true, true, false, false); + Double bolusForBg54 = bw.doCalc(profile, null, 20, 0.0,5.4, 0d, 100d, true, true, false, false); + Assert.assertEquals(bolusForBg42, bolusForBg54); + } + + @Test + public void shuldCalculateHigherBolusWhenHighBG() throws Exception { + BolusWizard bw = new BolusWizard(); + Profile profile = setupProfile(4d, 8d, 20d, 12d); + + Double bolusForHighBg = bw.doCalc(profile, null, 20, 0d,9.8, 0d, 100d, true, true, false, false); + Double bolusForBgInRange = bw.doCalc(profile, null, 20, 0.0,5.4, 0d, 100d, true, true, false, false); + Assert.assertTrue(bolusForHighBg > bolusForBgInRange); + } + + @Test + public void shuldCalculateLowerBolusWhenLowBG() throws Exception { + BolusWizard bw = new BolusWizard(); + Profile profile = setupProfile(4d, 8d, 20d, 12d); + + Double bolusForLowBg = bw.doCalc(profile, null, 20, 0d,3.6, 0d, 100d, true, true, false, false); + Double bolusForBgInRange = bw.doCalc(profile, null, 20, 0.0,5.4, 0d, 100d, true, true, false, false); + Assert.assertTrue(bolusForLowBg < bolusForBgInRange); + } + + private Profile setupProfile(Double targetLow, Double targetHigh, Double insulinSensitivityFactor, Double insulinToCarbRatio) { + Profile profile = mock(Profile.class); + when(profile.getTargetLow()).thenReturn(targetLow); + when(profile.getTargetHigh()).thenReturn(targetHigh); + when(profile.getIsf()).thenReturn(insulinSensitivityFactor); + when(profile.getIc()).thenReturn(insulinToCarbRatio); + + PowerMockito.mockStatic(GlucoseStatus.class); + when(GlucoseStatus.getGlucoseStatusData()).thenReturn(null); + + ConfigBuilderPlugin treatment = mock(ConfigBuilderPlugin.class); + IobTotal iobTotalZero = new IobTotal(System.currentTimeMillis()); + when(treatment.getLastCalculationTreatments()).thenReturn(iobTotalZero); + when(treatment.getLastCalculationTempBasals()).thenReturn(iobTotalZero); + PowerMockito.mockStatic(MainApp.class); + when(MainApp.getConfigBuilder()).thenReturn(treatment); + + PowerMockito.mockStatic(ConfigBuilderPlugin.class); + PumpInterface pump = MDIPlugin.getPlugin(); + pump.getPumpDescription().bolusStep = PUMP_BOLUS_STEP; + when(ConfigBuilderPlugin.getActivePump()).thenReturn(pump); + + return profile; + } +} \ No newline at end of file