Instantiator

This commit is contained in:
Milos Kozak 2022-12-09 16:49:33 +01:00
parent bc9ec4c9c5
commit c8113bf4fc
26 changed files with 121 additions and 119 deletions

View file

@ -7,13 +7,15 @@ import dagger.Module
import dagger.Provides
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.implementations.UiInteractionImpl
import info.nightscout.androidaps.implementations.ConfigImpl
import info.nightscout.androidaps.implementations.InstantiatorImpl
import info.nightscout.androidaps.implementations.UiInteractionImpl
import info.nightscout.androidaps.workflow.CalculationWorkflowImpl
import info.nightscout.androidaps.workflow.WorkerClassesImpl
import info.nightscout.core.workflow.CalculationWorkflow
import info.nightscout.interfaces.Config
import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.ui.UiInteraction
import info.nightscout.interfaces.workflow.WorkerClasses
@ -53,6 +55,8 @@ open class AppModule {
@Binds fun bindActivityNames(activityNames: UiInteractionImpl): UiInteraction
@Binds fun bindWorkerClasses(workerClassesImpl: WorkerClassesImpl): WorkerClasses
@Binds fun bindCalculationWorkflow(calculationWorkflow: CalculationWorkflowImpl): CalculationWorkflow
@Binds fun bindInstantiator(instantiatorImpl: InstantiatorImpl): Instantiator
}
}

View file

@ -0,0 +1,28 @@
package info.nightscout.androidaps.implementations
import dagger.Reusable
import dagger.android.HasAndroidInjector
import info.nightscout.implementation.profile.ProfileStoreObject
import info.nightscout.interfaces.aps.APSResult
import info.nightscout.interfaces.aps.AutosensData
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.profile.ProfileStore
import info.nightscout.plugins.aps.APSResultObject
import info.nightscout.plugins.iob.iobCobCalculator.data.AutosensDataObject
import info.nightscout.shared.utils.DateUtil
import org.json.JSONObject
import javax.inject.Inject
@Reusable
class InstantiatorImpl @Inject constructor(
private val injector: HasAndroidInjector,
private val dateUtil: DateUtil
) : Instantiator {
override fun provideProfileStore(jsonObject: JSONObject): ProfileStore =
ProfileStoreObject(injector, jsonObject, dateUtil)
override fun provideAPSResultObject(): APSResult = APSResultObject(injector)
override fun provideAutosensDataObject(): AutosensData = AutosensDataObject(injector)
}

View file

@ -20,7 +20,7 @@ import info.nightscout.interfaces.maintenance.PrefFileListProvider
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.profiling.Profiler
import info.nightscout.interfaces.pump.DetailedBolusInfoStorage
import info.nightscout.interfaces.pump.PumpEnactResult
@ -70,7 +70,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() {
@Mock lateinit var insightDatabaseDao: InsightDatabaseDao
@Mock lateinit var ruffyScripter: RuffyScripter
@Mock lateinit var uiInteraction: UiInteraction
@Mock lateinit var profileInstantiator: ProfileInstantiator
@Mock lateinit var instantiator: Instantiator
@Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase
@Mock lateinit var insightDatabase: InsightDatabase
@Mock lateinit var bgQualityCheck: BgQualityCheck
@ -145,7 +145,7 @@ class ConstraintsCheckerTest : TestBaseWithProfile() {
hardLimits = HardLimitsMock(sp, rh)
insightDbHelper = InsightDbHelper(insightDatabaseDao)
danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator)
danaPump = DanaPump(aapsLogger, sp, dateUtil, instantiator)
objectivesPlugin = ObjectivesPlugin(injector, aapsLogger, rh, activePlugin, sp, config)
comboPlugin = ComboPlugin(injector, aapsLogger, rxBus, rh, profileFunction, sp, commandQueue, pumpSync, dateUtil, ruffyScripter, uiInteraction)
danaRPlugin = DanaRPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePlugin, sp, commandQueue, danaPump, dateUtil, fabricPrivacy, pumpSync,

View file

@ -57,6 +57,4 @@ interface Loop {
runningConfiguration: RunningConfiguration,
version: String
): DeviceStatus?
fun provideEmptyAPSResultObject(): APSResult
}

View file

@ -104,6 +104,4 @@ interface IobCobCalculator {
* @return IobTotal
*/
fun calculateIobFromTempBasalsIncludingConvertedExtended(): IobTotal
fun provideEmptyAutosensDataObject(): AutosensData
}

View file

@ -0,0 +1,12 @@
package info.nightscout.interfaces.profile
import info.nightscout.interfaces.aps.APSResult
import info.nightscout.interfaces.aps.AutosensData
import org.json.JSONObject
interface Instantiator {
fun provideProfileStore(jsonObject: JSONObject): ProfileStore
fun provideAPSResultObject(): APSResult
fun provideAutosensDataObject(): AutosensData
}

View file

@ -1,7 +0,0 @@
package info.nightscout.interfaces.profile
import org.json.JSONObject
interface ProfileInstantiator {
fun storeInstance(jsonObject: JSONObject): ProfileStore
}

View file

@ -18,7 +18,6 @@ import info.nightscout.implementation.logging.LoggerUtilsImpl
import info.nightscout.implementation.overview.OverviewDataImpl
import info.nightscout.implementation.plugin.PluginStore
import info.nightscout.implementation.profile.ProfileFunctionImpl
import info.nightscout.implementation.profile.ProfileInstantiatorImpl
import info.nightscout.implementation.profile.ProfileStoreObject
import info.nightscout.implementation.profiling.ProfilerImpl
import info.nightscout.implementation.protection.PasswordCheckImpl
@ -49,7 +48,6 @@ import info.nightscout.interfaces.logging.UserEntryLogger
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.profile.DefaultValueHelper
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profiling.Profiler
import info.nightscout.interfaces.protection.PasswordCheck
import info.nightscout.interfaces.protection.ProtectionCheck
@ -100,7 +98,6 @@ abstract class ImplementationModule {
@Binds fun bindWarnColors(warnColorsImpl: WarnColorsImpl): WarnColors
@Binds fun bindHardLimits(hardLimitsImpl: HardLimitsImpl): HardLimits
@Binds fun bindResourceHelper(resourceHelperImpl: ResourceHelperImpl): ResourceHelper
@Binds fun bindProfileStoreInstantiator(profileStoreInstantiatorImpl: ProfileInstantiatorImpl): ProfileInstantiator
@Binds fun bindBlePreCheck(blePreCheckImpl: BlePreCheckImpl): BlePreCheck
@Binds fun bindTrendCalculatorInterface(trendCalculator: TrendCalculatorImpl): TrendCalculator

View file

@ -1,17 +0,0 @@
package info.nightscout.implementation.profile
import dagger.android.HasAndroidInjector
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.ProfileStore
import info.nightscout.shared.utils.DateUtil
import org.json.JSONObject
import javax.inject.Inject
class ProfileInstantiatorImpl @Inject constructor(
private val injector: HasAndroidInjector,
private val dateUtil: DateUtil
): ProfileInstantiator {
override fun storeInstance(jsonObject: JSONObject): ProfileStore =
ProfileStoreObject(injector, jsonObject, dateUtil)
}

View file

@ -57,7 +57,6 @@ import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.receivers.ReceiverStatusStore
import info.nightscout.interfaces.ui.UiInteraction
import info.nightscout.interfaces.utils.HardLimits
import info.nightscout.plugins.aps.APSResultObject
import info.nightscout.plugins.aps.R
import info.nightscout.plugins.aps.loop.events.EventLoopSetLastRunGui
import info.nightscout.plugins.aps.loop.extensions.json
@ -784,8 +783,6 @@ class LoopPlugin @Inject constructor(
)
}
override fun provideEmptyAPSResultObject(): APSResult = APSResultObject(injector)
companion object {
private const val CHANNEL_ID = "AAPS-OpenLoop"

View file

@ -30,7 +30,7 @@ import info.nightscout.interfaces.logging.UserEntryLogger
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.profile.Profile
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.profile.ProfileStore
import info.nightscout.interfaces.ui.UiInteraction
import info.nightscout.interfaces.utils.MidnightTime
@ -70,7 +70,7 @@ class AutotuneFragment : DaggerFragment() {
@Inject lateinit var injector: HasAndroidInjector
@Inject lateinit var aapsSchedulers: AapsSchedulers
@Inject lateinit var uiInteraction: UiInteraction
@Inject lateinit var profileInstantiator: ProfileInstantiator
@Inject lateinit var instantiator: Instantiator
private var disposable: CompositeDisposable = CompositeDisposable()
private var handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper)
@ -97,7 +97,7 @@ class AutotuneFragment : DaggerFragment() {
if (autotunePlugin.lastNbDays.isEmpty())
autotunePlugin.lastNbDays = sp.getInt(info.nightscout.core.utils.R.string.key_autotune_default_tune_days, 5).toString()
val defaultValue = sp.getInt(info.nightscout.core.utils.R.string.key_autotune_default_tune_days, 5).toDouble()
profileStore = activePlugin.activeProfileSource.profile ?: profileInstantiator.storeInstance(JSONObject())
profileStore = activePlugin.activeProfileSource.profile ?: instantiator.provideProfileStore(JSONObject())
profileName = if (binding.profileList.text.toString() == rh.gs(info.nightscout.core.ui.R.string.active)) "" else binding.profileList.text.toString()
profileFunction.getProfile()?.let { currentProfile ->
profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?: currentProfile, LocalInsulin(""), injector)
@ -295,7 +295,7 @@ class AutotuneFragment : DaggerFragment() {
@Synchronized
private fun updateGui() {
_binding ?: return
profileStore = activePlugin.activeProfileSource.profile ?: profileInstantiator.storeInstance(JSONObject())
profileStore = activePlugin.activeProfileSource.profile ?: instantiator.provideProfileStore(JSONObject())
profileName = if (binding.profileList.text.toString() == rh.gs(info.nightscout.core.ui.R.string.active)) "" else binding.profileList.text.toString()
profileFunction.getProfile()?.let { currentProfile ->
profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?: currentProfile, LocalInsulin(""), injector)

View file

@ -16,7 +16,7 @@ import info.nightscout.interfaces.plugin.PluginDescription
import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.interfaces.profile.Profile
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.utils.JsonHelper
import info.nightscout.interfaces.utils.MidnightTime
import info.nightscout.plugins.aps.R
@ -61,7 +61,7 @@ class AutotunePlugin @Inject constructor(
private val config: Config,
private val uel: UserEntryLogger,
aapsLogger: AAPSLogger,
private val profileInstantiator: ProfileInstantiator
private val instantiator: Instantiator
) : PluginBase(
PluginDescription()
.mainType(PluginType.GENERAL)
@ -325,7 +325,7 @@ class AutotunePlugin @Inject constructor(
if (newProfile == null) return
val profilePlugin = activePlugin.activeProfileSource
val circadian = sp.getBoolean(info.nightscout.core.utils.R.string.key_autotune_circadian_ic_isf, false)
val profileStore = activePlugin.activeProfileSource.profile ?: profileInstantiator.storeInstance(JSONObject())
val profileStore = activePlugin.activeProfileSource.profile ?: instantiator.provideProfileStore(JSONObject())
val profileList: ArrayList<CharSequence> = profileStore.getProfileList()
var indexLocalProfile = -1
for (p in profileList.indices)

View file

@ -12,7 +12,7 @@ import info.nightscout.interfaces.insulin.Insulin
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.profile.Profile
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.profile.ProfileStore
import info.nightscout.interfaces.profile.PureProfile
import info.nightscout.interfaces.utils.Round
@ -38,7 +38,7 @@ class ATProfile(profile: Profile, var localInsulin: LocalInsulin, val injector:
@Inject lateinit var config: Config
@Inject lateinit var rxBus: RxBus
@Inject lateinit var rh: ResourceHelper
@Inject lateinit var profileInstantiator: ProfileInstantiator
@Inject lateinit var instantiator: Instantiator
var profile: ProfileSealed
var circadianProfile: ProfileSealed
@ -179,7 +179,7 @@ class ATProfile(profile: Profile, var localInsulin: LocalInsulin, val injector:
json.put("defaultProfile", profilename)
json.put("store", store)
json.put("startDate", dateUtil.toISOAsUTC(dateUtil.now()))
profileStore = profileInstantiator.storeInstance(json)
profileStore = instantiator.provideProfileStore(json)
} catch (e: JSONException) {
}
return profileStore

View file

@ -10,7 +10,6 @@ import info.nightscout.database.entities.DeviceStatus
import info.nightscout.database.entities.OfflineEvent
import info.nightscout.interfaces.ConfigBuilder
import info.nightscout.interfaces.GlucoseUnit
import info.nightscout.interfaces.aps.APSResult
import info.nightscout.interfaces.aps.Loop
import info.nightscout.interfaces.configBuilder.RunningConfiguration
import info.nightscout.interfaces.constraints.Constraint
@ -43,8 +42,7 @@ ActionsTestBase : TestBaseWithProfile() {
aapsLogger: AAPSLogger,
rh: ResourceHelper,
injector: HasAndroidInjector,
pluginDescription: PluginDescription,
private val apsResult: APSResult
pluginDescription: PluginDescription
) : PluginBase(
pluginDescription, aapsLogger, rh, injector
), Loop {
@ -78,8 +76,6 @@ ActionsTestBase : TestBaseWithProfile() {
version: String
): DeviceStatus? = null
override fun provideEmptyAPSResultObject(): APSResult = apsResult
override fun setPluginEnabled(type: PluginType, newState: Boolean) {}
}
@ -92,7 +88,6 @@ ActionsTestBase : TestBaseWithProfile() {
@Mock lateinit var loopPlugin: TestLoopPlugin
@Mock lateinit var uel: UserEntryLogger
@Mock lateinit var context: Context
@Mock lateinit var apsResult: APSResult
private val pluginDescription = PluginDescription()
lateinit var testPumpPlugin: TestPumpPlugin

View file

@ -38,7 +38,6 @@ import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.utils.DecimalFormatter
import info.nightscout.interfaces.utils.MidnightTime
import info.nightscout.plugins.R
import info.nightscout.plugins.iob.iobCobCalculator.data.AutosensDataObject
import info.nightscout.plugins.iob.iobCobCalculator.data.AutosensDataStoreObject
import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.bus.RxBus
@ -600,8 +599,6 @@ class IobCobCalculatorPlugin @Inject constructor(
override fun calculateIobFromTempBasalsIncludingConvertedExtended(): IobTotal =
calculateIobToTimeFromTempBasalsIncludingConvertedExtended(dateUtil.now())
override fun provideEmptyAutosensDataObject(): AutosensData = AutosensDataObject(injector)
override fun calculateIobToTimeFromTempBasalsIncludingConvertedExtended(toTime: Long): IobTotal {
val total = IobTotal(toTime)
val now = dateUtil.now()

View file

@ -24,7 +24,7 @@ import info.nightscout.interfaces.plugin.PluginDescription
import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.interfaces.profile.Profile
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.profile.ProfileSource
import info.nightscout.interfaces.profile.ProfileStore
import info.nightscout.interfaces.profile.PureProfile
@ -60,7 +60,7 @@ class ProfilePlugin @Inject constructor(
private val hardLimits: HardLimits,
private val dateUtil: DateUtil,
private val config: Config,
private val profileInstantiator: ProfileInstantiator
private val instantiator: Instantiator
) : PluginBase(
PluginDescription()
.mainType(PluginType.PROFILE)
@ -419,7 +419,7 @@ class ProfilePlugin @Inject constructor(
aapsLogger.error("Unhandled exception", e)
}
return profileInstantiator.storeInstance(json)
return instantiator.provideProfileStore(json)
}
override val profile: ProfileStore?
@ -444,14 +444,14 @@ class ProfilePlugin @Inject constructor(
@Inject lateinit var config: Config
@Inject lateinit var profilePlugin: ProfilePlugin
@Inject lateinit var xDripBroadcast: XDripBroadcast
@Inject lateinit var profileInstantiator: ProfileInstantiator
@Inject lateinit var instantiator: Instantiator
override fun doWorkAndLog(): Result {
val profileJson = dataWorkerStorage.pickupJSONObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1))
?: return Result.failure(workDataOf("Error" to "missing input data"))
xDripBroadcast.sendProfile(profileJson)
if (sp.getBoolean(info.nightscout.core.utils.R.string.key_ns_receive_profile_store, true) || config.NSCLIENT) {
val store = profileInstantiator.storeInstance(profileJson)
val store = instantiator.provideProfileStore(profileJson)
val createdAt = store.getStartDate()
val lastLocalChange = sp.getLong(info.nightscout.core.utils.R.string.key_local_profile_last_change, 0)
aapsLogger.debug(LTag.PROFILE, "Received profileStore: createdAt: $createdAt Local last modification: $lastLocalChange")

View file

@ -1,12 +1,11 @@
package info.nightscout.plugins.sync.nsclient.data
import android.text.Spanned
import dagger.Lazy
import dagger.android.HasAndroidInjector
import info.nightscout.interfaces.aps.APSResult
import info.nightscout.interfaces.aps.Loop
import info.nightscout.interfaces.nsclient.NSSettingsStatus
import info.nightscout.interfaces.nsclient.ProcessedDeviceStatusData
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.utils.HtmlHelper
import info.nightscout.interfaces.utils.JsonHelper
import info.nightscout.interfaces.utils.Round
@ -24,7 +23,7 @@ class ProcessedDeviceStatusDataImpl @Inject constructor(
private val rh: ResourceHelper,
private val dateUtil: DateUtil,
private val sp: SP,
private val loop: Lazy<Loop>
private val instantiator: Instantiator
) : ProcessedDeviceStatusData {
override var pumpData: ProcessedDeviceStatusData.PumpData? = null
@ -116,7 +115,7 @@ class ProcessedDeviceStatusDataImpl @Inject constructor(
get() = if (openAPSData.clockSuggested != 0L) openAPSData.clockSuggested else -1
override fun getAPSResult(injector: HasAndroidInjector): APSResult =
loop.get().provideEmptyAPSResultObject().also {
instantiator.provideAPSResultObject().also {
it.json = openAPSData.suggested
it.date = openAPSData.clockSuggested
}

View file

@ -2,7 +2,7 @@ package info.nightscout.pump.dana
import info.nightscout.interfaces.Constants
import info.nightscout.interfaces.profile.Profile
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.profile.ProfileStore
import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.pump.defs.PumpType
@ -33,7 +33,7 @@ class DanaPump @Inject constructor(
private val aapsLogger: AAPSLogger,
private val sp: SP,
private val dateUtil: DateUtil,
private val profileInstantiator: ProfileInstantiator
private val instantiator: Instantiator
) {
@Suppress("unused")
@ -380,7 +380,7 @@ class DanaPump @Inject constructor(
} catch (e: Exception) {
return null
}
return profileInstantiator.storeInstance(json)
return instantiator.provideProfileStore(json)
}
return null
}

View file

@ -1,10 +1,10 @@
package info.nightscout.androidaps.dana
import info.nightscout.androidaps.TestBaseWithProfile
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.pump.dana.DanaPump
import info.nightscout.shared.sharedPreferences.SP
import org.junit.Assert
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.mockito.Mock
@ -12,18 +12,18 @@ import org.mockito.Mock
class DanaPumpTest : TestBaseWithProfile() {
@Mock lateinit var sp: SP
@Mock lateinit var profileInstantiator: ProfileInstantiator
@Mock lateinit var instantiator: Instantiator
private lateinit var sut: DanaPump
@BeforeEach
fun setup() {
sut = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator)
sut = DanaPump(aapsLogger, sp, dateUtil, instantiator)
}
@Test
fun detectDanaRS() {
sut.hwModel = 0x05
Assert.assertTrue(sut.modelFriendlyName().contains("DanaRS"))
Assertions.assertTrue(sut.modelFriendlyName().contains("DanaRS"))
}
}

View file

@ -8,14 +8,14 @@ import info.nightscout.interfaces.Constants
import info.nightscout.interfaces.constraints.Constraint
import info.nightscout.interfaces.constraints.Constraints
import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.ui.UiInteraction
import info.nightscout.pump.dana.DanaPump
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.shared.sharedPreferences.SP
import org.junit.Assert
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.mockito.Mock
@ -27,7 +27,7 @@ class DanaRPluginTest : TestBaseWithProfile() {
@Mock lateinit var sp: SP
@Mock lateinit var commandQueue: CommandQueue
@Mock lateinit var pumpSync: PumpSync
@Mock lateinit var profileInstantiator: ProfileInstantiator
@Mock lateinit var instantiator: Instantiator
@Mock lateinit var uiInteraction: UiInteraction
@Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase
@ -47,9 +47,11 @@ class DanaRPluginTest : TestBaseWithProfile() {
`when`(rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)).thenReturn("it must be positive value")
`when`(rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio)).thenReturn("Limiting max basal rate to %1\$.2f U/h because of %2\$s")
`when`(rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate)).thenReturn("Limiting max percent rate to %1\$d%% because of %2\$s")
danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator)
danaRPlugin = DanaRPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePluginProvider, sp, commandQueue, danaPump, dateUtil, fabricPrivacy, pumpSync,
uiInteraction, danaHistoryDatabase)
danaPump = DanaPump(aapsLogger, sp, dateUtil, instantiator)
danaRPlugin = DanaRPlugin(
injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePluginProvider, sp, commandQueue, danaPump, dateUtil, fabricPrivacy, pumpSync,
uiInteraction, danaHistoryDatabase
)
}
@Test @Throws(Exception::class)
@ -59,9 +61,9 @@ class DanaRPluginTest : TestBaseWithProfile() {
danaPump.maxBasal = 0.8
val c = Constraint(Constants.REALLYHIGHBASALRATE)
danaRPlugin.applyBasalConstraints(c, validProfile)
Assert.assertEquals(0.8, c.value(), 0.01)
Assert.assertEquals("DanaR: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons(aapsLogger))
Assert.assertEquals("DanaR: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons(aapsLogger))
Assertions.assertEquals(0.8, c.value(), 0.01)
Assertions.assertEquals("DanaR: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons(aapsLogger))
Assertions.assertEquals("DanaR: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons(aapsLogger))
}
@Test @Throws(Exception::class)
@ -71,8 +73,8 @@ class DanaRPluginTest : TestBaseWithProfile() {
danaPump.maxBasal = 0.8
val c = Constraint(Constants.REALLYHIGHPERCENTBASALRATE)
danaRPlugin.applyBasalPercentConstraints(c, validProfile)
Assert.assertEquals(200, c.value())
Assert.assertEquals("DanaR: Limiting max percent rate to 200% because of pump limit", c.getReasons(aapsLogger))
Assert.assertEquals("DanaR: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons(aapsLogger))
Assertions.assertEquals(200, c.value())
Assertions.assertEquals("DanaR: Limiting max percent rate to 200% because of pump limit", c.getReasons(aapsLogger))
Assertions.assertEquals("DanaR: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons(aapsLogger))
}
}

View file

@ -11,8 +11,7 @@ import info.nightscout.androidaps.danar.comm.MessageBase
import info.nightscout.interfaces.ConfigBuilder
import info.nightscout.interfaces.constraints.Constraints
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.pump.DetailedBolusInfoStorage
import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.queue.CommandQueue
@ -33,7 +32,6 @@ import org.mockito.kotlin.doNothing
open class DanaRTestBase : TestBase() {
@Mock lateinit var sp: SP
@Mock lateinit var profileFunction: ProfileFunction
@Mock lateinit var activePlugin: ActivePlugin
@Mock lateinit var dateUtil: DateUtil
@Mock lateinit var danaRPlugin: DanaRPlugin
@ -46,14 +44,14 @@ open class DanaRTestBase : TestBase() {
@Mock lateinit var constraintChecker: Constraints
@Mock lateinit var pumpSync: PumpSync
@Mock lateinit var danaHistoryRecordDao: DanaHistoryRecordDao
@Mock lateinit var profileInstantiator: ProfileInstantiator
@Mock lateinit var instantiator: Instantiator
@Mock lateinit var uiInteraction: UiInteraction
private lateinit var testPumpPlugin: TestPumpPlugin
@BeforeEach
fun setup() {
danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator)
danaPump = DanaPump(aapsLogger, sp, dateUtil, instantiator)
testPumpPlugin = TestPumpPlugin(injector)
`when`(activePlugin.activePump).thenReturn(testPumpPlugin)
doNothing().`when`(danaRKoreanPlugin).setPluginEnabled(anyObject(), anyBoolean())

View file

@ -8,14 +8,14 @@ import info.nightscout.interfaces.Constants
import info.nightscout.interfaces.constraints.Constraint
import info.nightscout.interfaces.constraints.Constraints
import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.ui.UiInteraction
import info.nightscout.pump.dana.DanaPump
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.shared.sharedPreferences.SP
import org.junit.Assert
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.mockito.Mock
@ -27,7 +27,7 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() {
@Mock lateinit var sp: SP
@Mock lateinit var commandQueue: CommandQueue
@Mock lateinit var pumpSync: PumpSync
@Mock lateinit var profileInstantiator: ProfileInstantiator
@Mock lateinit var instantiator: Instantiator
@Mock lateinit var uiInteraction: UiInteraction
@Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase
@ -47,7 +47,7 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() {
`when`(rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)).thenReturn("it must be positive value")
`when`(rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio)).thenReturn("Limiting max basal rate to %1\$.2f U/h because of %2\$s")
`when`(rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate)).thenReturn("Limiting max percent rate to %1\$d%% because of %2\$s")
danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator)
danaPump = DanaPump(aapsLogger, sp, dateUtil, instantiator)
danaRPlugin = DanaRKoreanPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePluginProvider, sp, commandQueue, danaPump, dateUtil, fabricPrivacy,
pumpSync, uiInteraction, danaHistoryDatabase)
}
@ -59,9 +59,9 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() {
danaPump.maxBasal = 0.8
val c = Constraint(Constants.REALLYHIGHBASALRATE)
danaRPlugin.applyBasalConstraints(c, validProfile)
Assert.assertEquals(0.8, c.value(), 0.01)
Assert.assertEquals("DanaRKorean: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons(aapsLogger))
Assert.assertEquals("DanaRKorean: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons(aapsLogger))
Assertions.assertEquals(0.8, c.value(), 0.01)
Assertions.assertEquals("DanaRKorean: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons(aapsLogger))
Assertions.assertEquals("DanaRKorean: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons(aapsLogger))
}
@Test @Throws(Exception::class)
@ -71,8 +71,8 @@ class DanaRKoreanPluginTest : TestBaseWithProfile() {
danaPump.maxBasal = 0.8
val c = Constraint(Constants.REALLYHIGHPERCENTBASALRATE)
danaRPlugin.applyBasalPercentConstraints(c, validProfile)
Assert.assertEquals(200, c.value())
Assert.assertEquals("DanaRKorean: Limiting max percent rate to 200% because of pump limit", c.getReasons(aapsLogger))
Assert.assertEquals("DanaRKorean: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons(aapsLogger))
Assertions.assertEquals(200, c.value())
Assertions.assertEquals("DanaRKorean: Limiting max percent rate to 200% because of pump limit", c.getReasons(aapsLogger))
Assertions.assertEquals("DanaRKorean: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons(aapsLogger))
}
}

View file

@ -8,7 +8,7 @@ import info.nightscout.interfaces.Constants
import info.nightscout.interfaces.constraints.Constraint
import info.nightscout.interfaces.constraints.Constraints
import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.pump.DetailedBolusInfoStorage
import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.pump.TemporaryBasalStorage
@ -17,6 +17,7 @@ import info.nightscout.interfaces.ui.UiInteraction
import info.nightscout.pump.dana.DanaPump
import info.nightscout.pump.dana.database.DanaHistoryDatabase
import info.nightscout.shared.sharedPreferences.SP
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.mockito.Mock
@ -30,7 +31,7 @@ class DanaRv2PluginTest : TestBaseWithProfile() {
@Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage
@Mock lateinit var temporaryBasalStorage: TemporaryBasalStorage
@Mock lateinit var pumpSync: PumpSync
@Mock lateinit var profileInstantiator: ProfileInstantiator
@Mock lateinit var instantiator: Instantiator
@Mock lateinit var uiInteraction: UiInteraction
@Mock lateinit var danaHistoryDatabase: DanaHistoryDatabase
@ -50,7 +51,7 @@ class DanaRv2PluginTest : TestBaseWithProfile() {
`when`(rh.gs(info.nightscout.core.ui.R.string.itmustbepositivevalue)).thenReturn("it must be positive value")
`when`(rh.gs(info.nightscout.core.ui.R.string.limitingbasalratio)).thenReturn("Limiting max basal rate to %1\$.2f U/h because of %2\$s")
`when`(rh.gs(info.nightscout.core.ui.R.string.limitingpercentrate)).thenReturn("Limiting max percent rate to %1\$d%% because of %2\$s")
danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator)
danaPump = DanaPump(aapsLogger, sp, dateUtil, instantiator)
danaRv2Plugin = DanaRv2Plugin(
injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePluginProvider, sp, commandQueue, danaPump, detailedBolusInfoStorage,
temporaryBasalStorage, dateUtil, fabricPrivacy, pumpSync, uiInteraction, danaHistoryDatabase
@ -64,9 +65,9 @@ class DanaRv2PluginTest : TestBaseWithProfile() {
danaPump.maxBasal = 0.8
val c = Constraint(Constants.REALLYHIGHBASALRATE)
danaRv2Plugin.applyBasalConstraints(c, validProfile)
org.junit.Assert.assertEquals(0.8, c.value(), 0.01)
org.junit.Assert.assertEquals("DanaRv2: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons(aapsLogger))
org.junit.Assert.assertEquals("DanaRv2: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons(aapsLogger))
Assertions.assertEquals(0.8, c.value(), 0.01)
Assertions.assertEquals("DanaRv2: Limiting max basal rate to 0.80 U/h because of pump limit", c.getReasons(aapsLogger))
Assertions.assertEquals("DanaRv2: Limiting max basal rate to 0.80 U/h because of pump limit", c.getMostLimitedReasons(aapsLogger))
}
@Test
@ -76,8 +77,8 @@ class DanaRv2PluginTest : TestBaseWithProfile() {
danaPump.maxBasal = 0.8
val c = Constraint(Constants.REALLYHIGHPERCENTBASALRATE)
danaRv2Plugin.applyBasalPercentConstraints(c, validProfile)
org.junit.Assert.assertEquals(200, c.value())
org.junit.Assert.assertEquals("DanaRv2: Limiting max percent rate to 200% because of pump limit", c.getReasons(aapsLogger))
org.junit.Assert.assertEquals("DanaRv2: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons(aapsLogger))
Assertions.assertEquals(200, c.value())
Assertions.assertEquals("DanaRv2: Limiting max percent rate to 200% because of pump limit", c.getReasons(aapsLogger))
Assertions.assertEquals("DanaRv2: Limiting max percent rate to 200% because of pump limit", c.getMostLimitedReasons(aapsLogger))
}
}

View file

@ -1,9 +1,7 @@
package info.nightscout.pump.danars
import dagger.android.AndroidInjector
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.TestBaseWithProfile
import info.nightscout.interfaces.profile.ProfileInstantiator
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.ui.UiInteraction
import info.nightscout.pump.dana.DanaPump
import info.nightscout.pump.danars.comm.DanaRSPacket
@ -16,11 +14,9 @@ import org.mockito.Mockito
open class DanaRSTestBase : TestBaseWithProfile() {
@Mock lateinit var sp: SP
@Mock lateinit var profileInstantiator: ProfileInstantiator
@Mock lateinit var instantiator: Instantiator
@Mock lateinit var uiInteraction: UiInteraction
val injector = HasAndroidInjector { AndroidInjector { } }
lateinit var danaPump: DanaPump
@BeforeEach
@ -58,6 +54,6 @@ open class DanaRSTestBase : TestBaseWithProfile() {
@BeforeEach
fun setup() {
danaPump = DanaPump(aapsLogger, sp, dateUtil, profileInstantiator)
danaPump = DanaPump(aapsLogger, sp, dateUtil, instantiator)
}
}

View file

@ -19,6 +19,7 @@ import info.nightscout.interfaces.aps.AutosensData
import info.nightscout.interfaces.aps.SMBDefaults
import info.nightscout.interfaces.iob.IobCobCalculator
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.profiling.Profiler
import info.nightscout.interfaces.utils.DecimalFormatter
@ -56,6 +57,7 @@ class IobCobOref1Worker(
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var repository: AppRepository
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var instantiator: Instantiator
class IobCobOref1WorkerData(
val injector: HasAndroidInjector,
@ -114,7 +116,7 @@ class IobCobOref1Worker(
}
aapsLogger.debug(LTag.AUTOSENS, "Processing calculation thread: ${data.reason} ($i/${bucketedData.size})")
val sens = profile.getIsfMgdl(bgTime)
val autosensData = data.iobCobCalculator.provideEmptyAutosensDataObject()
val autosensData = instantiator.provideAutosensDataObject()
autosensData.time = bgTime
if (previous != null) autosensData.activeCarbsList = previous.cloneCarbsList() else autosensData.activeCarbsList = ArrayList()

View file

@ -17,6 +17,7 @@ import info.nightscout.interfaces.aps.AutosensData
import info.nightscout.interfaces.aps.SMBDefaults
import info.nightscout.interfaces.iob.IobCobCalculator
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.profile.Instantiator
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.profiling.Profiler
import info.nightscout.interfaces.utils.DecimalFormatter
@ -52,6 +53,7 @@ class IobCobOrefWorker @Inject internal constructor(
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var repository: AppRepository
@Inject lateinit var dataWorkerStorage: DataWorkerStorage
@Inject lateinit var instantiator: Instantiator
class IobCobOrefWorkerData(
val injector: HasAndroidInjector,
@ -109,7 +111,7 @@ class IobCobOrefWorker @Inject internal constructor(
}
aapsLogger.debug(LTag.AUTOSENS, "Processing calculation thread: ${data.reason} ($i/${bucketedData.size})")
val sens = profile.getIsfMgdl(bgTime)
val autosensData = data.iobCobCalculator.provideEmptyAutosensDataObject()
val autosensData = instantiator.provideAutosensDataObject()
autosensData.time = bgTime
if (previous != null) autosensData.activeCarbsList = previous.cloneCarbsList() else autosensData.activeCarbsList = ArrayList()