159 lines
6 KiB
Java
159 lines
6 KiB
Java
package info.nightscout.androidaps.queue;
|
|
|
|
import android.content.Context;
|
|
|
|
import com.squareup.otto.Bus;
|
|
import com.squareup.otto.ThreadEnforcer;
|
|
|
|
import junit.framework.Assert;
|
|
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
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.Constants;
|
|
import info.nightscout.androidaps.MainApp;
|
|
import info.nightscout.androidaps.data.ConstraintChecker;
|
|
import info.nightscout.androidaps.data.DetailedBolusInfo;
|
|
import info.nightscout.androidaps.data.Profile;
|
|
import info.nightscout.androidaps.interfaces.Constraint;
|
|
import info.nightscout.androidaps.interfaces.PumpInterface;
|
|
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
|
|
import info.nightscout.androidaps.plugins.PumpMDI.MDIPlugin;
|
|
import info.nightscout.androidaps.queue.commands.Command;
|
|
import info.nightscout.utils.ToastUtils;
|
|
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.mockito.Mockito.when;
|
|
|
|
/**
|
|
* Created by mike on 14.01.2018.
|
|
*/
|
|
|
|
@RunWith(PowerMockRunner.class)
|
|
@PrepareForTest({MainApp.class, ConfigBuilderPlugin.class, ToastUtils.class, Context.class})
|
|
public class CommandQueueTest extends CommandQueue {
|
|
|
|
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\":\"0.1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"4\"}],\"target_high\":[{\"time\":\"00:00\",\"value\":\"5\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}";
|
|
Profile profile = new Profile(new JSONObject(validProfile), Constants.MGDL);
|
|
|
|
public CommandQueueTest() throws JSONException {
|
|
}
|
|
|
|
@Test
|
|
public void doTests() throws Exception {
|
|
prepareMock(0d, 0);
|
|
|
|
// start with empty queue
|
|
Assert.assertEquals(0, size());
|
|
|
|
// add bolus command
|
|
bolus(new DetailedBolusInfo(), null);
|
|
Assert.assertEquals(1, size());
|
|
|
|
// add READSTATUS
|
|
readStatus("anyString", null);
|
|
Assert.assertEquals(2, size());
|
|
|
|
// adding another bolus should remove the first one (size still == 2)
|
|
bolus(new DetailedBolusInfo(), null);
|
|
Assert.assertEquals(2, size());
|
|
|
|
// clear the queue should reset size
|
|
clear();
|
|
Assert.assertEquals(0, size());
|
|
|
|
// add tempbasal
|
|
tempBasalAbsolute(0, 30, true, profile, null);
|
|
Assert.assertEquals(1, size());
|
|
|
|
// add tempbasal percent. it should replace previous TEMPBASAL
|
|
tempBasalPercent(0, 30, true, profile, null);
|
|
Assert.assertEquals(1, size());
|
|
|
|
// add extended bolus
|
|
extendedBolus(1, 30, null);
|
|
Assert.assertEquals(2, size());
|
|
|
|
// add cancel temp basal should remove previous 2 temp basal setting
|
|
extendedBolus(1, 30, null);
|
|
Assert.assertEquals(2, size());
|
|
|
|
// cancel extended bolus should replace previous extended
|
|
extendedBolus(1, 30, null);
|
|
Assert.assertEquals(2, size());
|
|
|
|
// add setProfile
|
|
setProfile(profile, null);
|
|
Assert.assertEquals(3, size());
|
|
|
|
// add loadHistory
|
|
loadHistory((byte) 0, null);
|
|
Assert.assertEquals(4, size());
|
|
|
|
// add loadEvents
|
|
loadEvents(null);
|
|
Assert.assertEquals(5, size());
|
|
|
|
clear();
|
|
tempBasalAbsolute(0, 30, true, profile, null);
|
|
pickup();
|
|
Assert.assertEquals(0, size());
|
|
Assert.assertNotNull(performing);
|
|
Assert.assertEquals(Command.CommandType.TEMPBASAL, performing.commandType);
|
|
resetPerforming();
|
|
Assert.assertNull(performing);
|
|
}
|
|
|
|
private void prepareMock(Double insulin, Integer carbs) throws Exception {
|
|
ConfigBuilderPlugin configBuilderPlugin = mock(ConfigBuilderPlugin.class);
|
|
ConstraintChecker constraintChecker = mock(ConstraintChecker.class);
|
|
|
|
PowerMockito.mockStatic(ConfigBuilderPlugin.class);
|
|
PumpInterface pump = MDIPlugin.getPlugin();
|
|
when(ConfigBuilderPlugin.getActivePump()).thenReturn(pump);
|
|
|
|
PowerMockito.mockStatic(MainApp.class);
|
|
MainApp mainApp = mock(MainApp.class);
|
|
when(MainApp.getConfigBuilder()).thenReturn(configBuilderPlugin);
|
|
when(MainApp.getConstraintChecker()).thenReturn(constraintChecker);
|
|
when(MainApp.isEngineeringModeOrRelease()).thenReturn(true);
|
|
when(MainApp.instance()).thenReturn(mainApp);
|
|
Constraint<Double> bolusConstraint = new Constraint<>(0d);
|
|
when(MainApp.getConstraintChecker().applyBolusConstraints(any())).thenReturn(bolusConstraint);
|
|
Constraint<Integer> carbsConstraint = new Constraint<>(0);
|
|
when(MainApp.getConstraintChecker().applyCarbsConstraints(any())).thenReturn(carbsConstraint);
|
|
Constraint<Double> rateConstraint = new Constraint<>(0d);
|
|
when(MainApp.getConstraintChecker().applyBasalConstraints(any(), any())).thenReturn(rateConstraint);
|
|
Constraint<Integer> percentageConstraint = new Constraint<>(0);
|
|
when(MainApp.getConstraintChecker().applyBasalPercentConstraints(any(), any())).thenReturn(percentageConstraint);
|
|
|
|
PowerMockito.mockStatic(ToastUtils.class);
|
|
Context context = mock(Context.class);
|
|
String message = null;
|
|
PowerMockito.doNothing().when(ToastUtils.class, "showToastInUiThread", context, message);
|
|
|
|
Bus bus = new Bus(ThreadEnforcer.ANY);
|
|
|
|
when(MainApp.bus()).thenReturn(bus);
|
|
when(MainApp.gs(0)).thenReturn("");
|
|
}
|
|
|
|
@Override
|
|
protected synchronized void notifyAboutNewCommand() {
|
|
}
|
|
|
|
@Override
|
|
protected void showBolusProgressDialog(Double insulin, Context context) {
|
|
}
|
|
|
|
@Override
|
|
public boolean isThisProfileSet(Profile profile) {
|
|
return false;
|
|
}
|
|
}
|