From 04c90302bdcc32ecd9d2e9a78331d58c6afb4233 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 9 Mar 2020 23:24:46 +0100 Subject: [PATCH] Actions tests --- app/src/test/java/info/TestBase.kt | 11 ++ .../actions/ActionLoopDisableTest.kt | 43 +----- .../actions/ActionLoopEnableTest.java | 80 ----------- .../actions/ActionLoopEnableTest.kt | 65 +++++++++ .../actions/ActionLoopResumeTest.java | 73 ---------- .../actions/ActionLoopResumeTest.kt | 58 ++++++++ .../actions/ActionLoopSuspendTest.java | 90 ------------ .../actions/ActionLoopSuspendTest.kt | 72 ++++++++++ .../actions/ActionNotificationTest.java | 80 ----------- .../actions/ActionNotificationTest.kt | 70 +++++++++ .../ActionProfileSwitchPercentTest.java | 84 ----------- .../actions/ActionProfileSwitchPercentTest.kt | 70 +++++++++ .../actions/ActionProfileSwitchTest.java | 119 ---------------- .../actions/ActionProfileSwitchTest.kt | 133 ++++++++++++++++++ .../automation/actions/ActionSendSMSTest.java | 86 ----------- .../automation/actions/ActionSendSMSTest.kt | 66 +++++++++ .../actions/ActionStartTempTargetTest.java | 103 -------------- .../actions/ActionStartTempTargetTest.kt | 75 ++++++++++ .../actions/ActionStopTempTargetTest.java | 87 ------------ .../actions/ActionStopTempTargetTest.kt | 64 +++++++++ .../automation/actions/ActionTest.java | 60 -------- .../general/automation/actions/ActionTest.kt | 19 +++ .../automation/actions/ActionsTestBase.kt | 102 ++++++++++++++ 23 files changed, 808 insertions(+), 902 deletions(-) delete mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopEnableTest.java create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopEnableTest.kt delete mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopResumeTest.java create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopResumeTest.kt delete mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopSuspendTest.java create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopSuspendTest.kt delete mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionNotificationTest.java create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionNotificationTest.kt delete mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchPercentTest.java create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchPercentTest.kt delete mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchTest.java create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchTest.kt delete mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionSendSMSTest.java create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionSendSMSTest.kt delete mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTargetTest.java create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTargetTest.kt delete mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStopTempTargetTest.java create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStopTempTargetTest.kt delete mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionTest.java create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionTest.kt create mode 100644 app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionsTestBase.kt diff --git a/app/src/test/java/info/TestBase.kt b/app/src/test/java/info/TestBase.kt index 182da68d13..519f12decb 100644 --- a/app/src/test/java/info/TestBase.kt +++ b/app/src/test/java/info/TestBase.kt @@ -2,6 +2,7 @@ package info import info.nightscout.androidaps.Constants import info.nightscout.androidaps.data.Profile +import info.nightscout.androidaps.data.ProfileStore import org.json.JSONObject import org.junit.Rule import org.mockito.Mockito @@ -11,6 +12,16 @@ import org.mockito.junit.MockitoRule open class TestBase { val validProfileJSON = "{\"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\"}" val validProfile: Profile = Profile(JSONObject(validProfileJSON), Constants.MGDL) + val TESTPROFILENAME = "someProfile" + + fun getValidProfileStore(): ProfileStore { + val json = JSONObject() + val store = JSONObject() + store.put(TESTPROFILENAME, JSONObject(validProfileJSON)) + json.put("defaultProfile", TESTPROFILENAME) + json.put("store", store) + return ProfileStore(json) + } // Add a JUnit rule that will setup the @Mock annotated vars and log. // Another possibility would be to add `MockitoAnnotations.initMocks(this) to the setup method. diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopDisableTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopDisableTest.kt index df36aefb80..3878d6a2aa 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopDisableTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopDisableTest.kt @@ -1,63 +1,26 @@ package info.nightscout.androidaps.plugins.general.automation.actions -import dagger.android.AndroidInjector -import dagger.android.HasAndroidInjector -import info.TestBase import info.nightscout.androidaps.R -import info.nightscout.androidaps.data.PumpEnactResult -import info.nightscout.androidaps.interfaces.CommandQueueProvider import info.nightscout.androidaps.interfaces.PluginType import info.nightscout.androidaps.interfaces.PumpDescription -import info.nightscout.androidaps.logging.AAPSLogger -import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin import info.nightscout.androidaps.plugins.bus.RxBusWrapper -import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin import info.nightscout.androidaps.queue.Callback -import info.nightscout.androidaps.utils.resources.ResourceHelper -import info.nightscout.androidaps.utils.sharedPreferences.SP import org.junit.Assert import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.eq -import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.`when` import org.powermock.core.classloader.annotations.PrepareForTest import org.powermock.modules.junit4.PowerMockRunner @RunWith(PowerMockRunner::class) -@PrepareForTest(VirtualPumpPlugin::class, RxBusWrapper::class) -class ActionLoopDisableTest : TestBase() { - - @Mock lateinit var aapsLogger: AAPSLogger - @Mock lateinit var rxBus: RxBusWrapper - @Mock lateinit var sp: SP - @Mock lateinit var resourceHelper: ResourceHelper - @Mock lateinit var commandQueue: CommandQueueProvider - @Mock lateinit var configBuilderPlugin: ConfigBuilderPlugin - @Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin - @Mock lateinit var loopPlugin: LoopPlugin +class ActionLoopDisableTest : ActionsTestBase() { lateinit var sut: ActionLoopDisable - private var injector: HasAndroidInjector = HasAndroidInjector { - AndroidInjector { - if (it is ActionLoopDisable) { - it.loopPlugin = loopPlugin - it.resourceHelper = resourceHelper - it.configBuilderPlugin = configBuilderPlugin - it.commandQueue = commandQueue - it.rxBus = rxBus - } - if (it is PumpEnactResult) { - it.aapsLogger = aapsLogger - it.resourceHelper = resourceHelper - } - } - } - @Before fun setup() { @@ -68,12 +31,12 @@ class ActionLoopDisableTest : TestBase() { `when`(resourceHelper.gs(R.string.disableloop)).thenReturn("Disable loop") `when`(resourceHelper.gs(R.string.alreadydisabled)).thenReturn("Disable loop") - sut = ActionLoopDisable(injector) // do nothing injector + sut = ActionLoopDisable(injector) } @Test fun friendlyNameTest() { - Assert.assertEquals(R.string.disableloop.toLong(), sut.friendlyName().toLong()) + Assert.assertEquals(R.string.disableloop, sut.friendlyName()) } @Test diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopEnableTest.java b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopEnableTest.java deleted file mode 100644 index d42549d222..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopEnableTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package info.nightscout.androidaps.plugins.general.automation.actions; - -import com.google.common.base.Optional; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import info.AAPSMocker; -import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.interfaces.PluginType; -import info.nightscout.androidaps.interfaces.PumpDescription; -import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin; -import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin; -import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin; -import info.nightscout.androidaps.queue.Callback; -import info.nightscout.androidaps.utils.SP; - -import static org.powermock.api.mockito.PowerMockito.mock; -import static org.powermock.api.mockito.PowerMockito.when; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({MainApp.class, ConfigBuilderPlugin.class, SP.class}) -public class ActionLoopEnableTest { - ActionLoopEnable actionLoopEnable = new ActionLoopEnable(); - - @Test - public void friendlyNameTest() { - Assert.assertEquals(R.string.enableloop, actionLoopEnable.friendlyName()); - } - - @Test - public void shortDescriptionTest() { - Assert.assertEquals(MainApp.gs(R.string.enableloop), actionLoopEnable.shortDescription()); - } - - @Test - public void iconTest() { - Assert.assertEquals(Optional.of(R.drawable.ic_play_circle_outline_24dp), actionLoopEnable.icon()); - } - - @Test - public void doActionTest() { - LoopPlugin.getPlugin().setPluginEnabled(PluginType.LOOP, false); - actionLoopEnable.doAction(new Callback() { - @Override - public void run() { - } - }); - Assert.assertEquals(true, LoopPlugin.getPlugin().isEnabled(PluginType.LOOP)); - // another call should keep it enabled - actionLoopEnable.doAction(new Callback() { - @Override - public void run() { - } - }); - Assert.assertEquals(true, LoopPlugin.getPlugin().isEnabled(PluginType.LOOP)); - } - - @Before - public void prepareTest() { - AAPSMocker.mockMainApp(); - AAPSMocker.mockApplicationContext(); - AAPSMocker.mockSP(); - AAPSMocker.mockConfigBuilder(); - AAPSMocker.mockCommandQueue(); - - VirtualPumpPlugin pump = mock(VirtualPumpPlugin.class); - when(pump.specialEnableCondition()).thenReturn(true); - PumpDescription pumpDescription = new PumpDescription(); - pumpDescription.isTempBasalCapable = true; - when(pump.getPumpDescription()).thenReturn(pumpDescription); - when(AAPSMocker.configBuilderPlugin.getActivePump()).thenReturn(pump); - - } -} diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopEnableTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopEnableTest.kt new file mode 100644 index 0000000000..b7a93b8449 --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopEnableTest.kt @@ -0,0 +1,65 @@ +package info.nightscout.androidaps.plugins.general.automation.actions + +import info.nightscout.androidaps.R +import info.nightscout.androidaps.interfaces.PluginType +import info.nightscout.androidaps.interfaces.PumpDescription +import info.nightscout.androidaps.plugins.bus.RxBusWrapper +import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin +import info.nightscout.androidaps.queue.Callback +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito +import org.mockito.Mockito.`when` +import org.powermock.core.classloader.annotations.PrepareForTest +import org.powermock.modules.junit4.PowerMockRunner + +@RunWith(PowerMockRunner::class) +class ActionLoopEnableTest : ActionsTestBase() { + + lateinit var sut: ActionLoopEnable + + @Before + fun setup() { + + `when`(virtualPumpPlugin.specialEnableCondition()).thenReturn(true) + val pumpDescription = PumpDescription().apply { isTempBasalCapable = true } + `when`(virtualPumpPlugin.pumpDescription).thenReturn(pumpDescription) + `when`(configBuilderPlugin.activePump).thenReturn(virtualPumpPlugin) + `when`(resourceHelper.gs(R.string.enableloop)).thenReturn("Enable loop") + `when`(resourceHelper.gs(R.string.alreadyenabled)).thenReturn("Already enabled") + + sut = ActionLoopEnable(injector) + } + + @Test fun friendlyNameTest() { + Assert.assertEquals(R.string.enableloop, sut.friendlyName()) + } + + @Test fun shortDescriptionTest() { + Assert.assertEquals("Enable loop", sut.shortDescription()) + } + + @Test fun iconTest() { + Assert.assertEquals(R.drawable.ic_play_circle_outline_24dp, sut.icon()) + } + + @Test fun doActionTest() { + `when`(loopPlugin.isEnabled(PluginType.LOOP)).thenReturn(false) + sut.doAction(object : Callback() { + override fun run() {} + }) + Mockito.verify(loopPlugin, Mockito.times(1)).setPluginEnabled(PluginType.LOOP, true) + Mockito.verify(configBuilderPlugin, Mockito.times(1)).storeSettings("ActionLoopEnable") + + `when`(loopPlugin.isEnabled(PluginType.LOOP)).thenReturn(true) + + // another call should keep it disabled, no new invocation + sut.doAction(object : Callback() { + override fun run() {} + }) + Mockito.verify(loopPlugin, Mockito.times(1)).setPluginEnabled(PluginType.LOOP, true) + Mockito.verify(configBuilderPlugin, Mockito.times(1)).storeSettings("ActionLoopEnable") + } +} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopResumeTest.java b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopResumeTest.java deleted file mode 100644 index 5e367942ea..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopResumeTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package info.nightscout.androidaps.plugins.general.automation.actions; - -import com.google.common.base.Optional; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import info.AAPSMocker; -import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin; -import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin; -import info.nightscout.androidaps.plugins.general.nsclient.NSUpload; -import info.nightscout.androidaps.queue.Callback; -import info.nightscout.androidaps.utils.DateUtil; -import info.nightscout.androidaps.utils.SP; -import info.nightscout.androidaps.utils.T; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({MainApp.class, ConfigBuilderPlugin.class, SP.class, NSUpload.class}) -public class ActionLoopResumeTest { - ActionLoopResume actionLoopResume = new ActionLoopResume(); - - @Test - public void friendlyNameTest() { - Assert.assertEquals(R.string.resumeloop, actionLoopResume.friendlyName()); - } - - @Test - public void shortDescriptionTest() { - Assert.assertEquals("Resume loop", actionLoopResume.shortDescription()); - } - - @Test - public void iconTest() { - Assert.assertEquals(Optional.of(R.drawable.ic_replay_24dp), actionLoopResume.icon()); - } - - @Test - public void doActionTest() { - LoopPlugin.getPlugin().suspendTo(DateUtil.now() + T.hours(1).msecs()); - actionLoopResume.doAction(new Callback() { - @Override - public void run() { - } - }); - Assert.assertEquals(false, LoopPlugin.getPlugin().isSuspended()); - // another call should keep it resumed - actionLoopResume.doAction(new Callback() { - @Override - public void run() { - } - }); - Assert.assertEquals(false, LoopPlugin.getPlugin().isSuspended()); - } - - @Before - public void prepareTest() { - AAPSMocker.mockMainApp(); - AAPSMocker.mockApplicationContext(); - AAPSMocker.mockDatabaseHelper(); - AAPSMocker.mockStrings(); - AAPSMocker.mockSP(); - AAPSMocker.mockConfigBuilder(); - AAPSMocker.mockNSUpload(); - AAPSMocker.mockCommandQueue(); - - } -} diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopResumeTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopResumeTest.kt new file mode 100644 index 0000000000..c7c9e3b6e6 --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopResumeTest.kt @@ -0,0 +1,58 @@ +package info.nightscout.androidaps.plugins.general.automation.actions + +import info.nightscout.androidaps.R +import info.nightscout.androidaps.queue.Callback +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito +import org.mockito.Mockito.`when` +import org.powermock.modules.junit4.PowerMockRunner + +@RunWith(PowerMockRunner::class) +class ActionLoopResumeTest : ActionsTestBase() { + + lateinit var sut: ActionLoopResume + + @Before + fun setup() { + + `when`(virtualPumpPlugin.specialEnableCondition()).thenReturn(true) + `when`(resourceHelper.gs(R.string.resumeloop)).thenReturn("Resume loop") + `when`(resourceHelper.gs(R.string.notsuspended)).thenReturn("Not suspended") + + sut = ActionLoopResume(injector) + } + + @Test fun friendlyNameTest() { + Assert.assertEquals(R.string.resumeloop, sut.friendlyName()) + } + + @Test fun shortDescriptionTest() { + Assert.assertEquals("Resume loop", sut.shortDescription()) + } + + @Test fun iconTest() { + Assert.assertEquals(R.drawable.ic_replay_24dp, sut.icon()) + } + + @Test fun doActionTest() { + `when`(loopPlugin.isSuspended).thenReturn(true) + sut.doAction(object : Callback() { + override fun run() {} + }) + Mockito.verify(loopPlugin, Mockito.times(1)).suspendTo(0) + Mockito.verify(configBuilderPlugin, Mockito.times(1)).storeSettings("ActionLoopResume") + Mockito.verify(loopPlugin, Mockito.times(1)).createOfflineEvent(0) + + // another call should keep it resumed, , no new invocation + `when`(loopPlugin.isSuspended).thenReturn(false) + sut.doAction(object : Callback() { + override fun run() {} + }) + Mockito.verify(loopPlugin, Mockito.times(1)).suspendTo(0) + Mockito.verify(configBuilderPlugin, Mockito.times(1)).storeSettings("ActionLoopResume") + Mockito.verify(loopPlugin, Mockito.times(1)).createOfflineEvent(0) + } +} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopSuspendTest.java b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopSuspendTest.java deleted file mode 100644 index 142536681d..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopSuspendTest.java +++ /dev/null @@ -1,90 +0,0 @@ -package info.nightscout.androidaps.plugins.general.automation.actions; - -import com.google.common.base.Optional; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import info.AAPSMocker; -import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin; -import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin; -import info.nightscout.androidaps.plugins.general.automation.elements.InputDuration; -import info.nightscout.androidaps.plugins.general.nsclient.NSUpload; -import info.nightscout.androidaps.queue.Callback; -import info.nightscout.androidaps.utils.SP; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({MainApp.class, ConfigBuilderPlugin.class, SP.class, NSUpload.class}) -public class ActionLoopSuspendTest { - ActionLoopSuspend actionLoopSuspend = new ActionLoopSuspend(); - - @Test - public void friendlyNameTest() { - Assert.assertEquals(R.string.suspendloop, actionLoopSuspend.friendlyName()); - } - - @Test - public void shortDescriptionTest() { - actionLoopSuspend.minutes = new InputDuration(30, InputDuration.TimeUnit.MINUTES); - Assert.assertEquals(null, actionLoopSuspend.shortDescription()); // string not in AAPSMocker - } - - @Test - public void iconTest() { - Assert.assertEquals(Optional.of(R.drawable.ic_pause_circle_outline_24dp), actionLoopSuspend.icon()); - } - - @Test - public void doActionTest() { - actionLoopSuspend.minutes = new InputDuration(30, InputDuration.TimeUnit.MINUTES); - - LoopPlugin.getPlugin().suspendTo(0); - actionLoopSuspend.doAction(new Callback() { - @Override - public void run() { - } - }); - Assert.assertEquals(true, LoopPlugin.getPlugin().isSuspended()); - // another call should keep it suspended - actionLoopSuspend.doAction(new Callback() { - @Override - public void run() { - } - }); - Assert.assertEquals(true, LoopPlugin.getPlugin().isSuspended()); - } - - @Test - public void applyTest() { - ActionLoopSuspend a = new ActionLoopSuspend(); - a.minutes = new InputDuration(20, InputDuration.TimeUnit.MINUTES); - ActionLoopSuspend b = new ActionLoopSuspend(); - b.apply(a); - Assert.assertEquals(20, b.minutes.getMinutes()); - } - - @Test - public void hasDialogTest() { - ActionLoopSuspend a = new ActionLoopSuspend(); - Assert.assertTrue(a.hasDialog()); - } - - @Before - public void prepareTest() { - AAPSMocker.mockMainApp(); - AAPSMocker.mockApplicationContext(); - AAPSMocker.mockDatabaseHelper(); - AAPSMocker.mockStrings(); - AAPSMocker.mockSP(); - AAPSMocker.mockConfigBuilder(); - AAPSMocker.mockNSUpload(); - AAPSMocker.mockCommandQueue(); - - } -} diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopSuspendTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopSuspendTest.kt new file mode 100644 index 0000000000..855bb121f7 --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionLoopSuspendTest.kt @@ -0,0 +1,72 @@ +package info.nightscout.androidaps.plugins.general.automation.actions + +import info.nightscout.androidaps.R +import info.nightscout.androidaps.plugins.general.automation.elements.InputDuration +import info.nightscout.androidaps.queue.Callback +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers +import org.mockito.Mockito +import org.mockito.Mockito.`when` +import org.powermock.modules.junit4.PowerMockRunner + +@RunWith(PowerMockRunner::class) +class ActionLoopSuspendTest : ActionsTestBase() { + + lateinit var sut: ActionLoopSuspend + + @Before + fun setup() { + + `when`(virtualPumpPlugin.specialEnableCondition()).thenReturn(true) + `when`(configBuilderPlugin.activePump).thenReturn(virtualPumpPlugin) + `when`(resourceHelper.gs(R.string.suspendloop)).thenReturn("Suspend loop") + `when`(resourceHelper.gs(ArgumentMatchers.eq(R.string.suspendloopforXmin), ArgumentMatchers.anyInt())).thenReturn("Suspend loop for %d min") + + sut = ActionLoopSuspend(injector) + } + + @Test fun friendlyNameTest() { + Assert.assertEquals(R.string.suspendloop, sut.friendlyName()) + } + + @Test fun shortDescriptionTest() { + sut.minutes = InputDuration(injector, 30, InputDuration.TimeUnit.MINUTES) + Assert.assertEquals("Suspend loop for %d min", sut.shortDescription()) + } + + @Test fun iconTest() { + Assert.assertEquals(R.drawable.ic_pause_circle_outline_24dp, sut.icon()) + } + + @Test fun doActionTest() { + `when`(loopPlugin.isSuspended).thenReturn(false) + sut.minutes = InputDuration(injector, 30, InputDuration.TimeUnit.MINUTES) + sut.doAction(object : Callback() { + override fun run() {} + }) + Mockito.verify(loopPlugin, Mockito.times(1)).suspendLoop(30) + + // another call should keep it suspended, no more invocations + `when`(loopPlugin.isSuspended).thenReturn(true) + sut.doAction(object : Callback() { + override fun run() {} + }) + Mockito.verify(loopPlugin, Mockito.times(1)).suspendLoop(30) + } + + @Test fun applyTest() { + val a = ActionLoopSuspend(injector) + a.minutes = InputDuration(injector, 20, InputDuration.TimeUnit.MINUTES) + val b = ActionLoopSuspend(injector) + b.apply(a) + Assert.assertEquals(20, b.minutes.getMinutes().toLong()) + } + + @Test fun hasDialogTest() { + val a = ActionLoopSuspend(injector) + Assert.assertTrue(a.hasDialog()) + } +} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionNotificationTest.java b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionNotificationTest.java deleted file mode 100644 index d1393c6824..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionNotificationTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package info.nightscout.androidaps.plugins.general.automation.actions; - -import com.google.common.base.Optional; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import info.AAPSMocker; -import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.general.automation.elements.InputString; -import info.nightscout.androidaps.plugins.general.nsclient.NSUpload; -import info.nightscout.androidaps.queue.Callback; -import info.nightscout.androidaps.utils.SP; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({MainApp.class, SP.class, NSUpload.class}) -public class ActionNotificationTest { - private ActionNotification actionNotification; - - @Test - public void friendlyNameTest() { - Assert.assertEquals(R.string.notification, actionNotification.friendlyName()); - } - - @Test - public void shortDescriptionTest() { - actionNotification = new ActionNotification(); - actionNotification.text = new InputString().setValue("Asd"); - Assert.assertEquals(null, actionNotification.shortDescription()); // not mocked - } - - @Test - public void iconTest() { - Assert.assertEquals(Optional.of(R.drawable.ic_notifications), actionNotification.icon()); - } - - @Test - public void doActionTest() { - actionNotification.doAction(new Callback() { - @Override - public void run() { - Assert.assertTrue(result.success); - } - }); - } - - @Test - public void hasDialogTest() { - Assert.assertTrue(actionNotification.hasDialog()); - } - - @Test - public void toJSONTest() { - actionNotification = new ActionNotification(); - actionNotification.text = new InputString().setValue("Asd"); - Assert.assertEquals("{\"data\":{\"text\":\"Asd\"},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionNotification\"}", actionNotification.toJSON()); - } - - @Test - public void fromJSONTest() { - actionNotification = new ActionNotification(); - actionNotification.fromJSON("{\"text\":\"Asd\"}"); - Assert.assertEquals("Asd", actionNotification.text.getValue()); - } - - @Before - public void prepareTest() { - AAPSMocker.mockMainApp(); - AAPSMocker.mockSP(); - AAPSMocker.mockStrings(); - AAPSMocker.mockNSUpload(); - - actionNotification = new ActionNotification(); - } -} diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionNotificationTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionNotificationTest.kt new file mode 100644 index 0000000000..c45a07bc71 --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionNotificationTest.kt @@ -0,0 +1,70 @@ +package info.nightscout.androidaps.plugins.general.automation.actions + +import info.nightscout.androidaps.R +import info.nightscout.androidaps.plugins.general.automation.elements.InputString +import info.nightscout.androidaps.plugins.general.nsclient.NSUpload +import info.nightscout.androidaps.queue.Callback +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers +import org.mockito.Mockito +import org.mockito.Mockito.`when` +import org.powermock.api.mockito.PowerMockito +import org.powermock.core.classloader.annotations.PrepareForTest +import org.powermock.modules.junit4.PowerMockRunner + +@RunWith(PowerMockRunner::class) +@PrepareForTest(NSUpload::class) +class ActionNotificationTest : ActionsTestBase() { + + private lateinit var sut: ActionNotification + + @Before + fun setup() { + PowerMockito.mockStatic(NSUpload::class.java) + `when`(resourceHelper.gs(R.string.notification)).thenReturn("Notification") + `when`(resourceHelper.gs(ArgumentMatchers.eq(R.string.notification_message), ArgumentMatchers.anyString())).thenReturn("Notification: %s") + + sut = ActionNotification(injector) + } + + @Test fun friendlyNameTest() { + Assert.assertEquals(R.string.notification, sut.friendlyName()) + } + + @Test fun shortDescriptionTest() { + sut.text = InputString(injector, "Asd") + Assert.assertEquals("Notification: %s", sut.shortDescription()) + } + + @Test fun iconTest() { + Assert.assertEquals(R.drawable.ic_notifications, sut.icon()) + } + + @Test fun doActionTest() { + sut.doAction(object : Callback() { + override fun run() { + Assert.assertTrue(result.success) + } + }) + Mockito.verify(rxBus, Mockito.times(2)).send(anyObject()) + PowerMockito.verifyStatic(NSUpload::class.java, Mockito.times(1)) + } + + @Test fun hasDialogTest() { + Assert.assertTrue(sut.hasDialog()) + } + + @Test fun toJSONTest() { + sut.text = InputString(injector, "Asd") + Assert.assertEquals("{\"data\":{\"text\":\"Asd\"},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionNotification\"}", sut.toJSON()) + } + + @Test fun fromJSONTest() { + sut.text = InputString(injector, "Asd") + sut.fromJSON("{\"text\":\"Asd\"}") + Assert.assertEquals("Asd", sut.text.value) + } +} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchPercentTest.java b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchPercentTest.java deleted file mode 100644 index da1ce78cc7..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchPercentTest.java +++ /dev/null @@ -1,84 +0,0 @@ -package info.nightscout.androidaps.plugins.general.automation.actions; - -import com.google.common.base.Optional; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import info.AAPSMocker; -import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions; -import info.nightscout.androidaps.plugins.general.automation.elements.InputDuration; -import info.nightscout.androidaps.plugins.general.automation.elements.InputPercent; -import info.nightscout.androidaps.queue.Callback; -import info.nightscout.androidaps.utils.SP; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({MainApp.class, SP.class, ProfileFunctions.class}) -public class ActionProfileSwitchPercentTest { - private ActionProfileSwitchPercent actionProfileSwitchPercent; - - @Test - public void friendlyNameTest() { - Assert.assertEquals(R.string.profilepercentage, actionProfileSwitchPercent.friendlyName()); - } - - @Test - public void shortDescriptionTest() { - actionProfileSwitchPercent = new ActionProfileSwitchPercent(); - actionProfileSwitchPercent.pct = new InputPercent().setValue(100); - actionProfileSwitchPercent.duration = new InputDuration(30, InputDuration.TimeUnit.MINUTES); - Assert.assertNull(actionProfileSwitchPercent.shortDescription()); // not mocked - } - - @Test - public void iconTest() { - Assert.assertEquals(Optional.of(R.drawable.icon_actions_profileswitch), actionProfileSwitchPercent.icon()); - } - - @Test - public void doActionTest() { - actionProfileSwitchPercent.doAction(new Callback() { - @Override - public void run() { - Assert.assertTrue(result.success); - } - }); - } - - @Test - public void hasDialogTest() { - Assert.assertTrue(actionProfileSwitchPercent.hasDialog()); - } - - @Test - public void toJSONTest() { - actionProfileSwitchPercent = new ActionProfileSwitchPercent(); - actionProfileSwitchPercent.pct = new InputPercent().setValue(100); - actionProfileSwitchPercent.duration = new InputDuration(30, InputDuration.TimeUnit.MINUTES); - Assert.assertEquals("{\"data\":{\"percentage\":100,\"durationInMinutes\":30},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionProfileSwitchPercent\"}", actionProfileSwitchPercent.toJSON()); - } - - @Test - public void fromJSONTest() { - actionProfileSwitchPercent = new ActionProfileSwitchPercent(); - actionProfileSwitchPercent.fromJSON("{\"percentage\":100,\"durationInMinutes\":30}"); - Assert.assertEquals(100, actionProfileSwitchPercent.pct.getValue(), 0.001d); - Assert.assertEquals(30, actionProfileSwitchPercent.duration.getMinutes(), 0.001); - } - - @Before - public void prepareTest() { - AAPSMocker.mockMainApp(); - AAPSMocker.mockSP(); - AAPSMocker.mockStrings(); - AAPSMocker.mockProfileFunctions(); - - actionProfileSwitchPercent = new ActionProfileSwitchPercent(); - } -} diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchPercentTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchPercentTest.kt new file mode 100644 index 0000000000..1cc417276e --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchPercentTest.kt @@ -0,0 +1,70 @@ +package info.nightscout.androidaps.plugins.general.automation.actions + +import info.nightscout.androidaps.R +import info.nightscout.androidaps.plugins.general.automation.elements.InputDuration +import info.nightscout.androidaps.plugins.general.automation.elements.InputPercent +import info.nightscout.androidaps.queue.Callback +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito +import org.mockito.Mockito.`when` +import org.powermock.modules.junit4.PowerMockRunner + +@RunWith(PowerMockRunner::class) +class ActionProfileSwitchPercentTest : ActionsTestBase() { + + private lateinit var sut: ActionProfileSwitchPercent + + @Before + fun setup() { + + `when`(activePlugin.activeTreatments).thenReturn(treatmentsPlugin) + `when`(resourceHelper.gs(R.string.startprofileforever)).thenReturn("Start profile %d%%") + `when`(resourceHelper.gs(R.string.startprofile)).thenReturn("Start profile %d%% for %d min") + + sut = ActionProfileSwitchPercent(injector) + } + + @Test fun friendlyNameTest() { + Assert.assertEquals(R.string.profilepercentage, sut.friendlyName()) + } + + @Test fun shortDescriptionTest() { + sut.pct = InputPercent(injector, 100.0) + sut.duration = InputDuration(injector, 30, InputDuration.TimeUnit.MINUTES) + Assert.assertNull(sut.shortDescription()) // not mocked + } + + @Test fun iconTest() { + Assert.assertEquals(R.drawable.icon_actions_profileswitch, sut.icon()) + } + + @Test fun doActionTest() { + sut.pct = InputPercent(injector, 110.0) + sut.duration = InputDuration(injector, 30, InputDuration.TimeUnit.MINUTES) + sut.doAction(object : Callback() { + override fun run() { + Assert.assertTrue(result.success) + } + }) + Mockito.verify(treatmentsPlugin, Mockito.times(1)).doProfileSwitch(30, 110, 0) + } + + @Test fun hasDialogTest() { + Assert.assertTrue(sut.hasDialog()) + } + + @Test fun toJSONTest() { + sut.pct = InputPercent(injector, 100.0) + sut.duration = InputDuration(injector, 30, InputDuration.TimeUnit.MINUTES) + Assert.assertEquals("{\"data\":{\"percentage\":100,\"durationInMinutes\":30},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionProfileSwitchPercent\"}", sut.toJSON()) + } + + @Test fun fromJSONTest() { + sut.fromJSON("{\"percentage\":100,\"durationInMinutes\":30}") + Assert.assertEquals(100.0, sut.pct.value, 0.001) + Assert.assertEquals(30.0, sut.duration.getMinutes().toDouble(), 0.001) + } +} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchTest.java b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchTest.java deleted file mode 100644 index 28f0278887..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchTest.java +++ /dev/null @@ -1,119 +0,0 @@ -package info.nightscout.androidaps.plugins.general.automation.actions; - -import com.google.common.base.Optional; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import info.AAPSMocker; -import info.SPMocker; -import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.db.ProfileSwitch; -import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin; -import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions; -import info.nightscout.androidaps.plugins.profile.ns.NSProfilePlugin; -import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin; -import info.nightscout.androidaps.queue.Callback; -import info.nightscout.androidaps.utils.SP; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.anyString; -import static org.powermock.api.mockito.PowerMockito.when; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({MainApp.class, SP.class, TreatmentsPlugin.class, ProfileFunctions.class, ConfigBuilderPlugin.class, NSProfilePlugin.class}) -public class ActionProfileSwitchTest { - TreatmentsPlugin treatmentsPlugin; - ProfileSwitch profileAdded; - private ActionProfileSwitch actionProfileSwitch; - private String stringJson = "{\"data\":{\"profileToSwitchTo\":\"Test\"},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionProfileSwitch\"}"; - - @Before - public void setUp() { - AAPSMocker.mockMainApp(); - SPMocker.prepareMock(); - SP.putString("profile", AAPSMocker.getValidProfileStore().getData().toString()); - AAPSMocker.mockConfigBuilder(); - AAPSMocker.mockApplicationContext(); - AAPSMocker.mockStrings(); - AAPSMocker.mockTreatmentService(); - AAPSMocker.mockDatabaseHelper(); - AAPSMocker.mockProfileFunctions(); - - treatmentsPlugin = AAPSMocker.mockTreatmentPlugin(); - NSProfilePlugin profilePlugin = NSProfilePlugin.getPlugin(); - when(ConfigBuilderPlugin.getPlugin().getActiveProfileInterface()) - .thenReturn(profilePlugin); - - Mockito.doAnswer(invocation -> { - profileAdded = invocation.getArgument(0); - return null; - }).when(treatmentsPlugin).addToHistoryProfileSwitch(any(ProfileSwitch.class)); - } - - @Test - public void friendlyName() { - actionProfileSwitch = new ActionProfileSwitch(); - Assert.assertEquals(R.string.profilename, actionProfileSwitch.friendlyName()); - } - - @Test - public void shortDescriptionTest() { - actionProfileSwitch = new ActionProfileSwitch(); - actionProfileSwitch.inputProfileName.setValue("Test"); - when(MainApp.gs(anyInt(), anyString())).thenReturn("Change profile to Test"); - Assert.assertEquals("Change profile to Test", actionProfileSwitch.shortDescription()); - } - - @Test - public void doAction() { - PowerMockito.when(ProfileFunctions.getInstance().getProfileName()).thenReturn("Test"); - - actionProfileSwitch = new ActionProfileSwitch(); - actionProfileSwitch.inputProfileName.setValue("someOtherProfile"); - actionProfileSwitch.profileName = "someProfile"; - - actionProfileSwitch.doAction(new Callback() { - @Override - public void run() { - Assert.assertTrue(result.success); - } - }); - - } - - @Test - public void hasDialogTest() { - actionProfileSwitch = new ActionProfileSwitch(); - Assert.assertTrue(actionProfileSwitch.hasDialog()); - } - - @Test - public void toJSONTest() { - actionProfileSwitch = new ActionProfileSwitch(); - actionProfileSwitch.inputProfileName.setValue("Test"); - Assert.assertEquals(stringJson, actionProfileSwitch.toJSON()); - } - - @Test - public void fromJSONTest() { - String data = "{\"profileToSwitchTo\":\"Test\"}"; - actionProfileSwitch = new ActionProfileSwitch(); - actionProfileSwitch.fromJSON(data); - Assert.assertEquals("Test", actionProfileSwitch.profileName); - } - - @Test - public void iconTest() { - actionProfileSwitch = new ActionProfileSwitch(); - Assert.assertEquals(Optional.of(R.drawable.icon_actions_profileswitch), actionProfileSwitch.icon()); - } -} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchTest.kt new file mode 100644 index 0000000000..05e1062859 --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitchTest.kt @@ -0,0 +1,133 @@ +package info.nightscout.androidaps.plugins.general.automation.actions + +import com.google.common.base.Optional +import info.AAPSMocker +import info.SPMocker +import info.nightscout.androidaps.MainApp +import info.nightscout.androidaps.R +import info.nightscout.androidaps.db.ProfileSwitch +import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin +import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions +import info.nightscout.androidaps.plugins.general.automation.elements.InputProfileName +import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin +import info.nightscout.androidaps.plugins.profile.ns.NSProfilePlugin +import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin +import info.nightscout.androidaps.queue.Callback +import info.nightscout.androidaps.utils.SP +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers +import org.mockito.ArgumentMatchers.anyLong +import org.mockito.Mockito +import org.mockito.Mockito.`when` +import org.mockito.Mockito.anyInt +import org.mockito.Mockito.anyString +import org.mockito.invocation.InvocationOnMock +import org.powermock.api.mockito.PowerMockito +import org.powermock.core.classloader.annotations.PrepareForTest +import org.powermock.modules.junit4.PowerMockRunner + +@RunWith(PowerMockRunner::class) +@PrepareForTest(LocalProfilePlugin::class) +class ActionProfileSwitchTest : ActionsTestBase() { + + private lateinit var sut: ActionProfileSwitch + + private val stringJson = "{\"data\":{\"profileToSwitchTo\":\"Test\"},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionProfileSwitch\"}" + + @Before fun setUp() { + `when`(activePlugin.activeTreatments).thenReturn(treatmentsPlugin) + `when`(resourceHelper.gs(R.string.profilename)).thenReturn("Change profile to") + `when`(resourceHelper.gs(ArgumentMatchers.eq(R.string.changengetoprofilename), ArgumentMatchers.anyString())).thenReturn("Change profile to %s") + `when`(resourceHelper.gs(R.string.alreadyset)).thenReturn("Already set") + `when`(resourceHelper.gs(R.string.notexists)).thenReturn("not exists") + `when`(resourceHelper.gs(R.string.ok)).thenReturn("OK") + + sut = ActionProfileSwitch(injector) + } + + @Test fun friendlyName() { + Assert.assertEquals(R.string.profilename, sut.friendlyName()) + } + + @Test fun shortDescriptionTest() { + Assert.assertEquals("Change profile to %s", sut.shortDescription()) + } + + @Test fun doAction() { + //Empty input + `when`(profileFunction.getProfileName()).thenReturn("Test") + sut.inputProfileName = InputProfileName(injector, "") + sut.doAction(object : Callback() { + override fun run() { + Assert.assertFalse(result.success) + } + }) + + //Not initialized profileStore + `when`(profileFunction.getProfile()).thenReturn(null) + sut.inputProfileName = InputProfileName(injector, "someProfile") + sut.doAction(object : Callback() { + override fun run() { + Assert.assertFalse(result.success) + } + }) + + //profile already set + `when`(profileFunction.getProfile()).thenReturn(validProfile) + `when`(profileFunction.getProfileName()).thenReturn("Test") + sut.inputProfileName = InputProfileName(injector, "Test") + sut.doAction(object : Callback() { + override fun run() { + Assert.assertTrue(result.success) + Assert.assertEquals("Already set", result.comment) + } + }) + + // profile doesn't exists + `when`(activePlugin.activeProfileInterface).thenReturn(localProfilePlugin) + `when`(localProfilePlugin.profile).thenReturn(getValidProfileStore()) + `when`(profileFunction.getProfileName()).thenReturn("Active") + sut.inputProfileName = InputProfileName(injector, "Test") + sut.doAction(object : Callback() { + override fun run() { + Assert.assertFalse(result.success) + Assert.assertEquals("not exists", result.comment) + } + }) + + // do profileswitch + `when`(activePlugin.activeProfileInterface).thenReturn(localProfilePlugin) + `when`(localProfilePlugin.profile).thenReturn(getValidProfileStore()) + `when`(profileFunction.getProfileName()).thenReturn("Test") + sut.inputProfileName = InputProfileName(injector, TESTPROFILENAME) + sut.doAction(object : Callback() { + override fun run() { + Assert.assertTrue(result.success) + Assert.assertEquals("OK", result.comment) + } + }) + Mockito.verify(treatmentsPlugin, Mockito.times(1)).doProfileSwitch(anyObject(), anyString(), anyInt(), anyInt(), anyInt(), anyLong()) + } + + @Test fun hasDialogTest() { + Assert.assertTrue(sut.hasDialog()) + } + + @Test fun toJSONTest() { + sut.inputProfileName = InputProfileName(injector, "Test") + Assert.assertEquals(stringJson, sut.toJSON()) + } + + @Test fun fromJSONTest() { + val data = "{\"profileToSwitchTo\":\"Test\"}" + sut.fromJSON(data) + Assert.assertEquals("Test", sut.inputProfileName.value) + } + + @Test fun iconTest() { + Assert.assertEquals(R.drawable.icon_actions_profileswitch, sut.icon()) + } +} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionSendSMSTest.java b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionSendSMSTest.java deleted file mode 100644 index 7254d85192..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionSendSMSTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package info.nightscout.androidaps.plugins.general.automation.actions; - -import android.telephony.SmsManager; - -import com.google.common.base.Optional; - -import org.junit.Assert; -import org.junit.Before; -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.AAPSMocker; -import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.general.automation.elements.InputString; -import info.nightscout.androidaps.queue.Callback; -import info.nightscout.androidaps.utils.SP; - -import static org.powermock.api.mockito.PowerMockito.mock; -import static org.powermock.api.mockito.PowerMockito.mockStatic; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({MainApp.class, SP.class, SmsManager.class}) -public class ActionSendSMSTest { - private ActionSendSMS actionSendSMS; - - @Test - public void friendlyNameTest() { - Assert.assertEquals(R.string.sendsmsactiondescription, actionSendSMS.friendlyName()); - } - - @Test - public void shortDescriptionTest() { - actionSendSMS = new ActionSendSMS(); - Assert.assertEquals(null, actionSendSMS.shortDescription()); // not mocked - } - - @Test - public void iconTest() { - Assert.assertEquals(Optional.of(R.drawable.ic_notifications), actionSendSMS.icon()); - } - - @Test - public void doActionTest() { - actionSendSMS.text = new InputString().setValue("Asd"); - actionSendSMS.doAction(new Callback() { - @Override - public void run() { - Assert.assertTrue(result.success); - } - }); - } - - @Test - public void hasDialogTest() { - Assert.assertTrue(actionSendSMS.hasDialog()); - } - - @Test - public void toJSONTest() { - actionSendSMS = new ActionSendSMS(); - actionSendSMS.text = new InputString().setValue("Asd"); - Assert.assertEquals("{\"data\":{\"text\":\"Asd\"},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionSendSMS\"}", actionSendSMS.toJSON()); - } - - @Test - public void fromJSONTest() { - actionSendSMS = new ActionSendSMS(); - actionSendSMS.fromJSON("{\"text\":\"Asd\"}"); - Assert.assertEquals("Asd", actionSendSMS.text.getValue()); - } - - @Before - public void prepareTest() { - AAPSMocker.mockMainApp(); - AAPSMocker.mockSP(); - mockStatic(SmsManager.class); - SmsManager smsManager = mock(SmsManager.class); - PowerMockito.when(SmsManager.getDefault()).thenReturn(smsManager); - PowerMockito.when(SP.getString(R.string.key_smscommunicator_allowednumbers, "")).thenReturn("1234;5678"); - actionSendSMS = new ActionSendSMS(); - } -} diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionSendSMSTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionSendSMSTest.kt new file mode 100644 index 0000000000..0c1a9a1245 --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionSendSMSTest.kt @@ -0,0 +1,66 @@ +package info.nightscout.androidaps.plugins.general.automation.actions + +import android.widget.LinearLayout +import info.nightscout.androidaps.R +import info.nightscout.androidaps.plugins.general.automation.elements.InputString +import info.nightscout.androidaps.queue.Callback +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers.anyString +import org.mockito.ArgumentMatchers.eq +import org.mockito.Mockito +import org.mockito.Mockito.`when` +import org.powermock.modules.junit4.PowerMockRunner + +@RunWith(PowerMockRunner::class) +class ActionSendSMSTest : ActionsTestBase() { + + private lateinit var sut: ActionSendSMS + + @Before + fun setup() { + + `when`(resourceHelper.gs(eq(R.string.sendsmsactionlabel), anyString())).thenReturn("Send SMS: %s") + `when`(resourceHelper.gs(R.string.sendsmsactiondescription)).thenReturn("Send SMS to all numbers") + + sut = ActionSendSMS(injector) + } + + @Test fun friendlyNameTest() { + Assert.assertEquals(R.string.sendsmsactiondescription, sut.friendlyName()) + } + + @Test fun shortDescriptionTest() { + Assert.assertEquals("Send SMS: %s", sut.shortDescription()) + } + + @Test fun iconTest() { + Assert.assertEquals(R.drawable.ic_notifications, sut.icon()) + } + + @Test fun doActionTest() { + `when`(smsCommunicatorPlugin.sendNotificationToAllNumbers(anyString())).thenReturn(true) + sut.text = InputString(injector, "Asd") + sut.doAction(object : Callback() { + override fun run() { + Assert.assertTrue(result.success) + } + }) + } + + @Test fun hasDialogTest() { + Assert.assertTrue(sut.hasDialog()) + } + + @Test fun toJSONTest() { + sut.text = InputString(injector, "Asd") + Assert.assertEquals("{\"data\":{\"text\":\"Asd\"},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionSendSMS\"}", sut.toJSON()) + } + + @Test fun fromJSONTest() { + sut.fromJSON("{\"text\":\"Asd\"}") + Assert.assertEquals("Asd", sut.text.value) + } +} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTargetTest.java b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTargetTest.java deleted file mode 100644 index ed1141f0a4..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTargetTest.java +++ /dev/null @@ -1,103 +0,0 @@ -package info.nightscout.androidaps.plugins.general.automation.actions; - -import com.google.common.base.Optional; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import info.AAPSMocker; -import info.nightscout.androidaps.Constants; -import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.db.TempTarget; -import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions; -import info.nightscout.androidaps.plugins.general.automation.elements.InputDuration; -import info.nightscout.androidaps.plugins.general.automation.elements.InputTempTarget; -import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin; -import info.nightscout.androidaps.queue.Callback; -import info.nightscout.androidaps.utils.SP; - -import static org.mockito.ArgumentMatchers.any; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({MainApp.class, SP.class, TreatmentsPlugin.class, ProfileFunctions.class}) -public class ActionStartTempTargetTest { - private ActionStartTempTarget actionStartTempTarget; - private TreatmentsPlugin treatmentsPlugin; - private TempTarget tempTargetAdded; - - @Test - public void friendlyNameTest() { - Assert.assertEquals(R.string.starttemptarget, actionStartTempTarget.friendlyName()); - } - - @Test - public void shortDescriptionTest() { - actionStartTempTarget = new ActionStartTempTarget(); - actionStartTempTarget.reason = "Test"; - actionStartTempTarget.value = new InputTempTarget().setValue(100).setUnits(Constants.MGDL); - actionStartTempTarget.duration = new InputDuration(30, InputDuration.TimeUnit.MINUTES); - Assert.assertEquals("Start temp target: 100mg/dl@null(Test)", actionStartTempTarget.shortDescription()); - } - - @Test - public void iconTest() { - Assert.assertEquals(Optional.of(R.drawable.icon_cp_cgm_target), actionStartTempTarget.icon()); - } - - @Test - public void doActionTest() { - - actionStartTempTarget.doAction(new Callback() { - @Override - public void run() { - } - }); - Assert.assertNotEquals(null, tempTargetAdded); - } - - @Test - public void hasDialogTest() { - Assert.assertTrue(actionStartTempTarget.hasDialog()); - } - - @Test - public void toJSONTest() { - actionStartTempTarget = new ActionStartTempTarget(); - actionStartTempTarget.reason = "Test"; - actionStartTempTarget.value = new InputTempTarget().setValue(100).setUnits(Constants.MGDL); - actionStartTempTarget.duration = new InputDuration(30, InputDuration.TimeUnit.MINUTES); - Assert.assertEquals("{\"data\":{\"reason\":\"Test\",\"durationInMinutes\":30,\"units\":\"mg/dl\",\"value\":100},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionStartTempTarget\"}", actionStartTempTarget.toJSON()); - } - - @Test - public void fromJSONTest() { - actionStartTempTarget = new ActionStartTempTarget(); - actionStartTempTarget.fromJSON("{\"reason\":\"Test\",\"value\":100,\"durationInMinutes\":30,\"units\":\"mg/dl\"}"); - Assert.assertEquals(Constants.MGDL, actionStartTempTarget.value.getUnits()); - Assert.assertEquals(100, actionStartTempTarget.value.getValue(), 0.001d); - Assert.assertEquals(30, actionStartTempTarget.duration.getMinutes(), 0.001); - Assert.assertEquals("Test", actionStartTempTarget.reason); - } - - @Before - public void prepareTest() { - AAPSMocker.mockMainApp(); - AAPSMocker.mockSP(); - AAPSMocker.mockStrings(); - AAPSMocker.mockProfileFunctions(); - treatmentsPlugin = AAPSMocker.mockTreatmentPlugin(); - - Mockito.doAnswer(invocation -> { - tempTargetAdded = invocation.getArgument(0); - return null; - }).when(treatmentsPlugin).addToHistoryTempTarget(any(TempTarget.class)); - - actionStartTempTarget = new ActionStartTempTarget(); - } -} diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTargetTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTargetTest.kt new file mode 100644 index 0000000000..46c885bf99 --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTargetTest.kt @@ -0,0 +1,75 @@ +package info.nightscout.androidaps.plugins.general.automation.actions + +import info.AAPSMocker +import info.nightscout.androidaps.Constants +import info.nightscout.androidaps.MainApp +import info.nightscout.androidaps.R +import info.nightscout.androidaps.plugins.general.automation.elements.InputDuration +import info.nightscout.androidaps.plugins.general.automation.elements.InputTempTarget +import info.nightscout.androidaps.queue.Callback +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito +import org.mockito.Mockito.`when` +import org.powermock.core.classloader.annotations.PrepareForTest +import org.powermock.modules.junit4.PowerMockRunner + +@RunWith(PowerMockRunner::class) +@PrepareForTest(MainApp::class) +class ActionStartTempTargetTest : ActionsTestBase() { + + private lateinit var sut: ActionStartTempTarget + + @Before + fun setup() { + AAPSMocker.mockMainApp() + `when`(resourceHelper.gs(R.string.starttemptarget)).thenReturn("Start temp target") + + sut = ActionStartTempTarget(injector) + } + + @Test fun friendlyNameTest() { + Assert.assertEquals(R.string.starttemptarget, sut.friendlyName()) + } + + @Test fun shortDescriptionTest() { + sut.value = InputTempTarget(injector) + sut.value.value = 100.0 + sut.duration = InputDuration(injector, 30, InputDuration.TimeUnit.MINUTES) + Assert.assertEquals("Start temp target: 100mg/dl@null(Automation)", sut.shortDescription()) + } + + @Test fun iconTest() { + Assert.assertEquals(R.drawable.icon_cp_cgm_target, sut.icon()) + } + + @Test fun doActionTest() { + `when`(activePlugin.activeTreatments).thenReturn(treatmentsPlugin) + sut.doAction(object : Callback() { + override fun run() { + Assert.assertTrue(result.success) + } + }) + Mockito.verify(treatmentsPlugin, Mockito.times(1)).addToHistoryTempTarget(anyObject()) + } + + @Test fun hasDialogTest() { + Assert.assertTrue(sut.hasDialog()) + } + + @Test fun toJSONTest() { + sut.value = InputTempTarget(injector) + sut.value.value = 100.0 + sut.duration = InputDuration(injector, 30, InputDuration.TimeUnit.MINUTES) + Assert.assertEquals("{\"data\":{\"durationInMinutes\":30,\"units\":\"mg/dl\",\"value\":100},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionStartTempTarget\"}", sut.toJSON()) + } + + @Test fun fromJSONTest() { + sut.fromJSON("{\"value\":100,\"durationInMinutes\":30,\"units\":\"mg/dl\"}") + Assert.assertEquals(Constants.MGDL, sut.value.units) + Assert.assertEquals(100.0, sut.value.value, 0.001) + Assert.assertEquals(30.0, sut.duration.getMinutes().toDouble(), 0.001) + } +} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStopTempTargetTest.java b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStopTempTargetTest.java deleted file mode 100644 index 4ec52c6c5b..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStopTempTargetTest.java +++ /dev/null @@ -1,87 +0,0 @@ -package info.nightscout.androidaps.plugins.general.automation.actions; - -import com.google.common.base.Optional; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import info.AAPSMocker; -import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.db.TempTarget; -import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin; -import info.nightscout.androidaps.queue.Callback; -import info.nightscout.androidaps.utils.SP; - -import static org.mockito.ArgumentMatchers.any; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({MainApp.class, SP.class, TreatmentsPlugin.class}) -public class ActionStopTempTargetTest { - ActionStopTempTarget actionStopTempTarget = new ActionStopTempTarget(); - TreatmentsPlugin treatmentsPlugin; - TempTarget tempTargetAdded; - - @Test - public void friendlyNameTest() { - Assert.assertEquals(R.string.stoptemptarget, actionStopTempTarget.friendlyName()); - } - - @Test - public void shortDescriptionTest() { - Assert.assertEquals("Stop temp target", actionStopTempTarget.shortDescription()); - } - - @Test - public void iconTest() { - Assert.assertEquals(Optional.of(R.drawable.ic_stop_24dp), actionStopTempTarget.icon()); - } - - @Test - public void doActionTest() { - - actionStopTempTarget.doAction(new Callback() { - @Override - public void run() { - } - }); - Assert.assertNotEquals(null, tempTargetAdded); - } - - @Test - public void hasDialogTest() { - Assert.assertFalse(actionStopTempTarget.hasDialog()); - } - - @Test - public void toJSONTest() { - actionStopTempTarget = new ActionStopTempTarget(); - actionStopTempTarget.reason = "Test"; - Assert.assertEquals("{\"data\":{\"reason\":\"Test\"},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionStopTempTarget\"}", actionStopTempTarget.toJSON()); - } - - @Test - public void fromJSONTest() { - actionStopTempTarget = new ActionStopTempTarget(); - actionStopTempTarget.fromJSON("{\"reason\":\"Test\"}"); - Assert.assertEquals("Test", actionStopTempTarget.reason); - } - - @Before - public void prepareTest() { - AAPSMocker.mockMainApp(); - AAPSMocker.mockSP(); - AAPSMocker.mockStrings(); - treatmentsPlugin = AAPSMocker.mockTreatmentPlugin(); - - Mockito.doAnswer(invocation -> { - tempTargetAdded = invocation.getArgument(0); - return null; - }).when(treatmentsPlugin).addToHistoryTempTarget(any(TempTarget.class)); - } -} diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStopTempTargetTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStopTempTargetTest.kt new file mode 100644 index 0000000000..ae4bd63747 --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStopTempTargetTest.kt @@ -0,0 +1,64 @@ +package info.nightscout.androidaps.plugins.general.automation.actions + +import info.AAPSMocker +import info.nightscout.androidaps.MainApp +import info.nightscout.androidaps.R +import info.nightscout.androidaps.queue.Callback +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito +import org.mockito.Mockito.`when` +import org.powermock.core.classloader.annotations.PrepareForTest +import org.powermock.modules.junit4.PowerMockRunner + +@RunWith(PowerMockRunner::class) +@PrepareForTest(MainApp::class) +class ActionStopTempTargetTest : ActionsTestBase() { + + private lateinit var sut: ActionStopTempTarget + + @Before + fun setup() { + AAPSMocker.mockMainApp() + `when`(resourceHelper.gs(R.string.stoptemptarget)).thenReturn("Stop temp target") + + sut = ActionStopTempTarget(injector) + } + + @Test fun friendlyNameTest() { + Assert.assertEquals(R.string.stoptemptarget, sut.friendlyName()) + } + + @Test fun shortDescriptionTest() { + Assert.assertEquals("Stop temp target", sut.shortDescription()) + } + + @Test fun iconTest() { + Assert.assertEquals(R.drawable.ic_stop_24dp, sut.icon()) + } + + @Test fun doActionTest() { + `when`(activePlugin.activeTreatments).thenReturn(treatmentsPlugin) + sut.doAction(object : Callback() { + override fun run() { + Assert.assertTrue(result.success) + } + }) + Mockito.verify(treatmentsPlugin, Mockito.times(1)).addToHistoryTempTarget(anyObject()) + } + + @Test fun hasDialogTest() { + Assert.assertFalse(sut.hasDialog()) + } + + @Test fun toJSONTest() { + Assert.assertEquals("{\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionStopTempTarget\"}", sut.toJSON()) + } + + @Test fun fromJSONTest() { + sut.fromJSON("{\"reason\":\"Test\"}") + Assert.assertNotNull(sut) + } +} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionTest.java b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionTest.java deleted file mode 100644 index 4014457c99..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionTest.java +++ /dev/null @@ -1,60 +0,0 @@ -package info.nightscout.androidaps.plugins.general.automation.actions; - -import com.google.common.base.Optional; - -import org.json.JSONException; -import org.json.JSONObject; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import info.nightscout.androidaps.queue.Callback; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({}) -public class ActionTest extends Action { - - @Override - public int friendlyName() { - return 0; - } - - @Override - public String shortDescription() { - return null; - } - - @Override - public void doAction(Callback callback) { - } - - @Override - public Optional icon() { - return Optional.absent(); - } - - @Test - public void hasDialogTest() { - Assert.assertEquals(false, hasDialog()); - generateDialog(null); // coverage only - } - - @Test - public void toJSONTest() { - Assert.assertEquals("{\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionTest\"}", toJSON()); - } - - @Test - public void fromJSONTest() { - Assert.assertEquals(this, fromJSON("any")); - } - - @Test - public void instantiateTest() throws JSONException { - Action action = Action.instantiate(new JSONObject("{\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionTest\"}")); - Assert.assertNotEquals(null, action); - } - -} diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionTest.kt new file mode 100644 index 0000000000..ca61579dd8 --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionTest.kt @@ -0,0 +1,19 @@ +package info.nightscout.androidaps.plugins.general.automation.actions + +import org.json.JSONObject +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith +import org.powermock.core.classloader.annotations.PrepareForTest +import org.powermock.modules.junit4.PowerMockRunner + +@RunWith(PowerMockRunner::class) +@PrepareForTest +class ActionTest : ActionsTestBase() { + + @Test + fun instantiateTest() { + val action: Action? = ActionDummy(injector).instantiate(JSONObject("{\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionDummy\"}")) + Assert.assertNotEquals(null, action) + } +} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionsTestBase.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionsTestBase.kt new file mode 100644 index 0000000000..ab26f2e78d --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionsTestBase.kt @@ -0,0 +1,102 @@ +package info.nightscout.androidaps.plugins.general.automation.actions + +import dagger.android.AndroidInjector +import dagger.android.HasAndroidInjector +import info.TestBase +import info.nightscout.androidaps.data.PumpEnactResult +import info.nightscout.androidaps.interfaces.ActivePluginProvider +import info.nightscout.androidaps.interfaces.CommandQueueProvider +import info.nightscout.androidaps.logging.AAPSLogger +import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin +import info.nightscout.androidaps.plugins.bus.RxBusWrapper +import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin +import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction +import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin +import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin +import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin +import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin +import info.nightscout.androidaps.utils.resources.ResourceHelper +import info.nightscout.androidaps.utils.sharedPreferences.SP +import org.mockito.Mock +import org.powermock.core.classloader.annotations.PrepareForTest + +@PrepareForTest(VirtualPumpPlugin::class, RxBusWrapper::class, LocalProfilePlugin::class, SmsCommunicatorPlugin::class) +open class ActionsTestBase : TestBase() { + + @Mock lateinit var aapsLogger: AAPSLogger + @Mock lateinit var rxBus: RxBusWrapper + @Mock lateinit var sp: SP + @Mock lateinit var resourceHelper: ResourceHelper + @Mock lateinit var commandQueue: CommandQueueProvider + @Mock lateinit var configBuilderPlugin: ConfigBuilderPlugin + @Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin + @Mock lateinit var treatmentsPlugin: TreatmentsPlugin + @Mock lateinit var loopPlugin: LoopPlugin + @Mock lateinit var activePlugin: ActivePluginProvider + @Mock lateinit var profileFunction: ProfileFunction + @Mock lateinit var localProfilePlugin : LocalProfilePlugin + @Mock lateinit var smsCommunicatorPlugin : SmsCommunicatorPlugin + + var injector: HasAndroidInjector = HasAndroidInjector { + AndroidInjector { + if (it is ActionStopTempTarget) { + it.aapsLogger = aapsLogger + it.resourceHelper = resourceHelper + it.activePlugin = activePlugin + } + if (it is ActionStartTempTarget) { + it.aapsLogger = aapsLogger + it.resourceHelper = resourceHelper + it.activePlugin = activePlugin + } + if (it is ActionSendSMS) { + it.aapsLogger = aapsLogger + it.resourceHelper = resourceHelper + it.smsCommunicatorPlugin = smsCommunicatorPlugin + } + if (it is ActionProfileSwitch) { + it.aapsLogger = aapsLogger + it.resourceHelper = resourceHelper + it.activePlugin = activePlugin + it.profileFunction = profileFunction + } + if (it is ActionProfileSwitchPercent) { + it.resourceHelper = resourceHelper + it.activePlugin = activePlugin + } + if (it is ActionNotification) { + it.resourceHelper = resourceHelper + it.rxBus = rxBus + } + if (it is ActionLoopSuspend) { + it.loopPlugin = loopPlugin + it.resourceHelper = resourceHelper + it.rxBus = rxBus + } + if (it is ActionLoopResume) { + it.loopPlugin = loopPlugin + it.resourceHelper = resourceHelper + it.configBuilderPlugin = configBuilderPlugin + it.rxBus = rxBus + } + if (it is ActionLoopEnable) { + it.loopPlugin = loopPlugin + it.resourceHelper = resourceHelper + it.configBuilderPlugin = configBuilderPlugin + it.rxBus = rxBus + } + if (it is ActionLoopDisable) { + it.loopPlugin = loopPlugin + it.resourceHelper = resourceHelper + it.configBuilderPlugin = configBuilderPlugin + it.commandQueue = commandQueue + it.rxBus = rxBus + } + if (it is PumpEnactResult) { + it.aapsLogger = aapsLogger + it.resourceHelper = resourceHelper + } + } + } + +} \ No newline at end of file