AuthRequestTest
This commit is contained in:
parent
3da0defcd7
commit
5d745a2d9b
6 changed files with 138 additions and 122 deletions
|
@ -20,6 +20,7 @@ import info.nightscout.androidaps.plugins.general.automation.actions.*
|
||||||
import info.nightscout.androidaps.plugins.general.automation.elements.*
|
import info.nightscout.androidaps.plugins.general.automation.elements.*
|
||||||
import info.nightscout.androidaps.plugins.general.automation.triggers.*
|
import info.nightscout.androidaps.plugins.general.automation.triggers.*
|
||||||
import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationWithAction
|
import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationWithAction
|
||||||
|
import info.nightscout.androidaps.plugins.general.smsCommunicator.AuthRequest
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensData
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensData
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobOref1Thread
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobOref1Thread
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobThread
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobThread
|
||||||
|
@ -143,6 +144,8 @@ interface AppComponent : AndroidInjector<MainApp> {
|
||||||
fun injectBolusWizard(bolusWizard: BolusWizard)
|
fun injectBolusWizard(bolusWizard: BolusWizard)
|
||||||
fun injectQuickWizardEntry(quickWizardEntry: QuickWizardEntry)
|
fun injectQuickWizardEntry(quickWizardEntry: QuickWizardEntry)
|
||||||
|
|
||||||
|
fun injectAuthRequest(authRequest: AuthRequest)
|
||||||
|
|
||||||
@Component.Builder
|
@Component.Builder
|
||||||
interface Builder {
|
interface Builder {
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ import info.nightscout.androidaps.plugins.general.automation.actions.*
|
||||||
import info.nightscout.androidaps.plugins.general.automation.elements.*
|
import info.nightscout.androidaps.plugins.general.automation.elements.*
|
||||||
import info.nightscout.androidaps.plugins.general.automation.triggers.*
|
import info.nightscout.androidaps.plugins.general.automation.triggers.*
|
||||||
import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationWithAction
|
import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationWithAction
|
||||||
|
import info.nightscout.androidaps.plugins.general.smsCommunicator.AuthRequest
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensData
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensData
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobOref1Thread
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobOref1Thread
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobThread
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobThread
|
||||||
|
@ -194,6 +195,8 @@ open class AppModule {
|
||||||
@ContributesAndroidInjector fun loggerBolusWizard(): BolusWizard
|
@ContributesAndroidInjector fun loggerBolusWizard(): BolusWizard
|
||||||
@ContributesAndroidInjector fun loggerQuickWizardEntry(): QuickWizardEntry
|
@ContributesAndroidInjector fun loggerQuickWizardEntry(): QuickWizardEntry
|
||||||
|
|
||||||
|
@ContributesAndroidInjector fun authRequestInjector(): AuthRequest
|
||||||
|
|
||||||
@Binds fun bindContext(mainApp: MainApp): Context
|
@Binds fun bindContext(mainApp: MainApp): Context
|
||||||
@Binds fun bindInjector(mainApp: MainApp): HasAndroidInjector
|
@Binds fun bindInjector(mainApp: MainApp): HasAndroidInjector
|
||||||
|
|
||||||
|
|
|
@ -1,40 +1,50 @@
|
||||||
package info.nightscout.androidaps.plugins.general.smsCommunicator
|
package info.nightscout.androidaps.plugins.general.smsCommunicator
|
||||||
|
|
||||||
|
import dagger.android.HasAndroidInjector
|
||||||
import info.nightscout.androidaps.Constants
|
import info.nightscout.androidaps.Constants
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.logging.L
|
import info.nightscout.androidaps.logging.AAPSLogger
|
||||||
import info.nightscout.androidaps.logging.StacktraceLoggerWrapper
|
import info.nightscout.androidaps.logging.LTag
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
import org.slf4j.LoggerFactory
|
import javax.inject.Inject
|
||||||
|
|
||||||
class AuthRequest internal constructor(val plugin: SmsCommunicatorPlugin, val resourceHelper: ResourceHelper, var requester: Sms, requestText: String, var confirmCode: String, val action: SmsAction) {
|
class AuthRequest internal constructor(
|
||||||
private val log = StacktraceLoggerWrapper.getLogger(L.SMS)
|
injector: HasAndroidInjector,
|
||||||
|
var requester: Sms,
|
||||||
|
requestText: String,
|
||||||
|
var confirmCode: String,
|
||||||
|
val action: SmsAction) {
|
||||||
|
|
||||||
|
@Inject lateinit var aapsLogger: AAPSLogger
|
||||||
|
@Inject lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin
|
||||||
|
@Inject lateinit var resourceHelper: ResourceHelper
|
||||||
|
|
||||||
private val date = DateUtil.now()
|
private val date = DateUtil.now()
|
||||||
private var processed = false
|
private var processed = false
|
||||||
|
|
||||||
init {
|
init {
|
||||||
plugin.sendSMS(Sms(requester.phoneNumber, requestText))
|
injector.androidInjector().inject(this)
|
||||||
|
smsCommunicatorPlugin.sendSMS(Sms(requester.phoneNumber, requestText))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun action(codeReceived: String) {
|
fun action(codeReceived: String) {
|
||||||
if (processed) {
|
if (processed) {
|
||||||
if (L.isEnabled(L.SMS)) log.debug("Already processed")
|
aapsLogger.debug(LTag.SMS, "Already processed")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (confirmCode != codeReceived) {
|
if (confirmCode != codeReceived) {
|
||||||
processed = true
|
processed = true
|
||||||
if (L.isEnabled(L.SMS)) log.debug("Wrong code")
|
aapsLogger.debug(LTag.SMS, "Wrong code")
|
||||||
plugin.sendSMS(Sms(requester.phoneNumber, resourceHelper.gs(R.string.sms_wrongcode)))
|
smsCommunicatorPlugin.sendSMS(Sms(requester.phoneNumber, resourceHelper.gs(R.string.sms_wrongcode)))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (DateUtil.now() - date < Constants.SMS_CONFIRM_TIMEOUT) {
|
if (DateUtil.now() - date < Constants.SMS_CONFIRM_TIMEOUT) {
|
||||||
processed = true
|
processed = true
|
||||||
if (L.isEnabled(L.SMS)) log.debug("Processing confirmed SMS: " + requester.text)
|
aapsLogger.debug(LTag.SMS, "Processing confirmed SMS: " + requester.text)
|
||||||
action.run()
|
action.run()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (L.isEnabled(L.SMS)) log.debug("Timed out SMS: " + requester.text)
|
aapsLogger.debug(LTag.SMS, "Timed out SMS: " + requester.text)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -70,8 +70,8 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val disposable = CompositeDisposable()
|
private val disposable = CompositeDisposable()
|
||||||
var allowedNumbers: MutableList<String> = ArrayList()
|
private var allowedNumbers: MutableList<String> = ArrayList()
|
||||||
var messageToConfirm: AuthRequest? = null
|
private var messageToConfirm: AuthRequest? = null
|
||||||
var lastRemoteBolusTime: Long = 0
|
var lastRemoteBolusTime: Long = 0
|
||||||
var messages = ArrayList<Sms>()
|
var messages = ArrayList<Sms>()
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isCommand(command: String, number: String): Boolean {
|
private fun isCommand(command: String, number: String): Boolean {
|
||||||
var found = false
|
var found = false
|
||||||
commands.forEach { (k, _) ->
|
commands.forEach { (k, _) ->
|
||||||
if (k == command) found = true
|
if (k == command) found = true
|
||||||
|
@ -167,7 +167,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
return found || messageToConfirm?.requester?.phoneNumber == number
|
return found || messageToConfirm?.requester?.phoneNumber == number
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isAllowedNumber(number: String): Boolean {
|
private fun isAllowedNumber(number: String): Boolean {
|
||||||
for (num in allowedNumbers) {
|
for (num in allowedNumbers) {
|
||||||
if (num == number) return true
|
if (num == number) return true
|
||||||
}
|
}
|
||||||
|
@ -184,7 +184,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun processSms(receivedSms: Sms) {
|
private fun processSms(receivedSms: Sms) {
|
||||||
if (!isEnabled(PluginType.GENERAL)) {
|
if (!isEnabled(PluginType.GENERAL)) {
|
||||||
aapsLogger.debug(LTag.SMS, "Ignoring SMS. Plugin disabled.")
|
aapsLogger.debug(LTag.SMS, "Ignoring SMS. Plugin disabled.")
|
||||||
return
|
return
|
||||||
|
@ -356,7 +356,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePasscode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_suspendreplywithcode), duration, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_suspendreplywithcode), duration, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction(duration) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(duration) {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
commandQueue.cancelTempBasal(true, object : Callback() {
|
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
|
@ -471,7 +471,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_profilereplywithcode), list[pindex - 1], percentage, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_profilereplywithcode), list[pindex - 1], percentage, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
val finalPercentage = percentage
|
val finalPercentage = percentage
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction(list[pindex - 1] as String, finalPercentage) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(list[pindex - 1] as String, finalPercentage) {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
activePlugin.activeTreatments.doProfileSwitch(store, list[pindex - 1] as String, 0, finalPercentage, 0, DateUtil.now())
|
activePlugin.activeTreatments.doProfileSwitch(store, list[pindex - 1] as String, 0, finalPercentage, 0, DateUtil.now())
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.profileswitchcreated)))
|
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.profileswitchcreated)))
|
||||||
|
@ -488,7 +488,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePasscode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalstopreplywithcode), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalstopreplywithcode), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
commandQueue.cancelTempBasal(true, object : Callback() {
|
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
|
@ -518,7 +518,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePasscode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalpctreplywithcode), tempBasalPct, duration, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalpctreplywithcode), tempBasalPct, duration, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction(tempBasalPct, duration) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(tempBasalPct, duration) {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
commandQueue.tempBasalPercent(anInteger(), secondInteger(), true, profile, object : Callback() {
|
commandQueue.tempBasalPercent(anInteger(), secondInteger(), true, profile, object : Callback() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
|
@ -550,7 +550,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePasscode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalreplywithcode), tempBasal, duration, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalreplywithcode), tempBasal, duration, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction(tempBasal, duration) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(tempBasal, duration) {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
commandQueue.tempBasalAbsolute(aDouble(), secondInteger(), true, profile, object : Callback() {
|
commandQueue.tempBasalAbsolute(aDouble(), secondInteger(), true, profile, object : Callback() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
|
@ -577,7 +577,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePasscode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_extendedstopreplywithcode), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_extendedstopreplywithcode), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
commandQueue.cancelExtended(object : Callback() {
|
commandQueue.cancelExtended(object : Callback() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
|
@ -605,7 +605,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePasscode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_extendedreplywithcode), extended, duration, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_extendedreplywithcode), extended, duration, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction(extended, duration) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(extended, duration) {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
commandQueue.extendedBolus(aDouble(), secondInteger(), object : Callback() {
|
commandQueue.extendedBolus(aDouble(), secondInteger(), object : Callback() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
|
@ -640,7 +640,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
else
|
else
|
||||||
String.format(resourceHelper.gs(R.string.smscommunicator_bolusreplywithcode), bolus, passCode)
|
String.format(resourceHelper.gs(R.string.smscommunicator_bolusreplywithcode), bolus, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction(bolus) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(bolus) {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
val detailedBolusInfo = DetailedBolusInfo()
|
val detailedBolusInfo = DetailedBolusInfo()
|
||||||
detailedBolusInfo.insulin = aDouble()
|
detailedBolusInfo.insulin = aDouble()
|
||||||
|
@ -716,7 +716,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePasscode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_carbsreplywithcode), grams, DateUtil.timeString(time), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_carbsreplywithcode), grams, DateUtil.timeString(time), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction(grams, time) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(grams, time) {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
val detailedBolusInfo = DetailedBolusInfo()
|
val detailedBolusInfo = DetailedBolusInfo()
|
||||||
detailedBolusInfo.carbs = anInteger().toDouble()
|
detailedBolusInfo.carbs = anInteger().toDouble()
|
||||||
|
@ -748,7 +748,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePasscode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_temptargetwithcode), splitted[1].toUpperCase(Locale.getDefault()), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_temptargetwithcode), splitted[1].toUpperCase(Locale.getDefault()), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
val units = profileFunction.getUnits()
|
val units = profileFunction.getUnits()
|
||||||
var keyDuration = 0
|
var keyDuration = 0
|
||||||
|
@ -803,7 +803,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePasscode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_temptargetcancel), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_temptargetcancel), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
val tempTarget = TempTarget()
|
val tempTarget = TempTarget()
|
||||||
.source(Source.USER)
|
.source(Source.USER)
|
||||||
|
@ -827,7 +827,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePasscode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_stopsmswithcode), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_stopsmswithcode), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
sp.putBoolean(R.string.key_smscommunicator_remotecommandsallowed, false)
|
sp.putBoolean(R.string.key_smscommunicator_remotecommandsallowed, false)
|
||||||
val replyText = String.format(resourceHelper.gs(R.string.smscommunicator_stoppedsms))
|
val replyText = String.format(resourceHelper.gs(R.string.smscommunicator_stoppedsms))
|
||||||
|
@ -843,7 +843,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePasscode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_calibrationreplywithcode), cal, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_calibrationreplywithcode), cal, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(this, resourceHelper, receivedSms, reply, passCode, object : SmsAction(cal) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(cal) {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
val result = XdripCalibrations.sendIntent(aDouble)
|
val result = XdripCalibrations.sendIntent(aDouble)
|
||||||
if (result) sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_calibrationsent))) else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_calibrationfailed)))
|
if (result) sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_calibrationsent))) else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_calibrationfailed)))
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
package info.nightscout.androidaps.plugins.general.smsCommunicator;
|
|
||||||
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.stubbing.Answer;
|
|
||||||
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.logging.L;
|
|
||||||
import info.nightscout.androidaps.utils.DateUtil;
|
|
||||||
import info.nightscout.androidaps.utils.SP;
|
|
||||||
import info.nightscout.androidaps.utils.T;
|
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.powermock.api.mockito.PowerMockito.doAnswer;
|
|
||||||
import static org.powermock.api.mockito.PowerMockito.mock;
|
|
||||||
import static org.powermock.api.mockito.PowerMockito.mockStatic;
|
|
||||||
import static org.powermock.api.mockito.PowerMockito.when;
|
|
||||||
|
|
||||||
@RunWith(PowerMockRunner.class)
|
|
||||||
@PrepareForTest({SmsCommunicatorPlugin.class, L.class, SP.class, MainApp.class, DateUtil.class})
|
|
||||||
|
|
||||||
public class AuthRequestTest {
|
|
||||||
private SmsCommunicatorPlugin smsCommunicatorPlugin;
|
|
||||||
private Sms sentSms;
|
|
||||||
private boolean actionCalled = false;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void doTests() {
|
|
||||||
Sms requester = new Sms("aNumber", "aText");
|
|
||||||
SmsAction action = new SmsAction() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
actionCalled = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Check if SMS requesting code is sent
|
|
||||||
AuthRequest authRequest = new AuthRequest(smsCommunicatorPlugin, requester, "Request text", "ABC", action);
|
|
||||||
|
|
||||||
Assert.assertEquals(sentSms.getPhoneNumber(), "aNumber");
|
|
||||||
Assert.assertEquals(sentSms.getText(), "Request text");
|
|
||||||
|
|
||||||
// wrong reply
|
|
||||||
actionCalled = false;
|
|
||||||
authRequest.action("EFG");
|
|
||||||
Assert.assertEquals(sentSms.getPhoneNumber(), "aNumber");
|
|
||||||
Assert.assertEquals(sentSms.getText(), "Wrong code. Command cancelled.");
|
|
||||||
Assert.assertFalse(actionCalled);
|
|
||||||
|
|
||||||
// correct reply
|
|
||||||
authRequest = new AuthRequest(smsCommunicatorPlugin, requester, "Request text", "ABC", action);
|
|
||||||
actionCalled = false;
|
|
||||||
authRequest.action("ABC");
|
|
||||||
Assert.assertTrue(actionCalled);
|
|
||||||
// second time action should not be called
|
|
||||||
actionCalled = false;
|
|
||||||
authRequest.action("ABC");
|
|
||||||
Assert.assertFalse(actionCalled);
|
|
||||||
|
|
||||||
// test timed out message
|
|
||||||
long now = 10000;
|
|
||||||
when(DateUtil.now()).thenReturn(now);
|
|
||||||
authRequest = new AuthRequest(smsCommunicatorPlugin, requester, "Request text", "ABC", action);
|
|
||||||
actionCalled = false;
|
|
||||||
when(DateUtil.now()).thenReturn(now + T.mins(Constants.SMS_CONFIRM_TIMEOUT).msecs() + 1);
|
|
||||||
authRequest.action("ABC");
|
|
||||||
Assert.assertFalse(actionCalled);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void prepareTests() {
|
|
||||||
AAPSMocker.mockMainApp();
|
|
||||||
AAPSMocker.mockApplicationContext();
|
|
||||||
AAPSMocker.mockSP();
|
|
||||||
AAPSMocker.mockL();
|
|
||||||
AAPSMocker.mockStrings();
|
|
||||||
|
|
||||||
mockStatic(DateUtil.class);
|
|
||||||
|
|
||||||
smsCommunicatorPlugin = mock(SmsCommunicatorPlugin.class);
|
|
||||||
doAnswer((Answer) invocation -> {
|
|
||||||
sentSms = invocation.getArgument(0);
|
|
||||||
return null;
|
|
||||||
}).when(smsCommunicatorPlugin).sendSMS(any(Sms.class));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
package info.nightscout.androidaps.plugins.general.smsCommunicator
|
||||||
|
|
||||||
|
import dagger.android.AndroidInjector
|
||||||
|
import dagger.android.HasAndroidInjector
|
||||||
|
import info.TestBase
|
||||||
|
import info.nightscout.androidaps.Constants
|
||||||
|
import info.nightscout.androidaps.R
|
||||||
|
import info.nightscout.androidaps.logging.AAPSLogger
|
||||||
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
|
import info.nightscout.androidaps.utils.T
|
||||||
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
|
import org.junit.Assert
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito.`when`
|
||||||
|
import org.mockito.invocation.InvocationOnMock
|
||||||
|
import org.mockito.stubbing.Answer
|
||||||
|
import org.powermock.api.mockito.PowerMockito
|
||||||
|
import org.powermock.core.classloader.annotations.PrepareForTest
|
||||||
|
import org.powermock.modules.junit4.PowerMockRunner
|
||||||
|
|
||||||
|
@RunWith(PowerMockRunner::class)
|
||||||
|
@PrepareForTest(SmsCommunicatorPlugin::class, DateUtil::class)
|
||||||
|
class AuthRequestTest : TestBase() {
|
||||||
|
|
||||||
|
@Mock lateinit var aapsLogger: AAPSLogger
|
||||||
|
@Mock lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin
|
||||||
|
@Mock lateinit var resourceHelper: ResourceHelper
|
||||||
|
|
||||||
|
var injector: HasAndroidInjector = HasAndroidInjector {
|
||||||
|
AndroidInjector {
|
||||||
|
if (it is AuthRequest) {
|
||||||
|
it.aapsLogger = aapsLogger
|
||||||
|
it.resourceHelper = resourceHelper
|
||||||
|
it.smsCommunicatorPlugin = smsCommunicatorPlugin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var sentSms: Sms? = null
|
||||||
|
private var actionCalled = false
|
||||||
|
|
||||||
|
@Before fun prepareTests() {
|
||||||
|
`when`(resourceHelper.gs(R.string.sms_wrongcode)).thenReturn("Wrong code. Command cancelled.")
|
||||||
|
PowerMockito.doAnswer(Answer { invocation: InvocationOnMock ->
|
||||||
|
sentSms = invocation.getArgument(0)
|
||||||
|
null
|
||||||
|
} as Answer<*>).`when`(smsCommunicatorPlugin).sendSMS(anyObject())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun doTests() {
|
||||||
|
val requester = Sms("aNumber", "aText")
|
||||||
|
val action: SmsAction = object : SmsAction() {
|
||||||
|
override fun run() {
|
||||||
|
actionCalled = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if SMS requesting code is sent
|
||||||
|
var authRequest = AuthRequest(injector, requester, "Request text", "ABC", action)
|
||||||
|
Assert.assertEquals(sentSms!!.phoneNumber, "aNumber")
|
||||||
|
Assert.assertEquals(sentSms!!.text, "Request text")
|
||||||
|
|
||||||
|
// wrong reply
|
||||||
|
actionCalled = false
|
||||||
|
authRequest.action("EFG")
|
||||||
|
Assert.assertEquals(sentSms!!.phoneNumber, "aNumber")
|
||||||
|
Assert.assertEquals(sentSms!!.text, "Wrong code. Command cancelled.")
|
||||||
|
Assert.assertFalse(actionCalled)
|
||||||
|
|
||||||
|
// correct reply
|
||||||
|
authRequest = AuthRequest(injector, requester, "Request text", "ABC", action)
|
||||||
|
actionCalled = false
|
||||||
|
authRequest.action("ABC")
|
||||||
|
Assert.assertTrue(actionCalled)
|
||||||
|
// second time action should not be called
|
||||||
|
actionCalled = false
|
||||||
|
authRequest.action("ABC")
|
||||||
|
Assert.assertFalse(actionCalled)
|
||||||
|
|
||||||
|
// test timed out message
|
||||||
|
val now: Long = 10000
|
||||||
|
PowerMockito.mockStatic(DateUtil::class.java)
|
||||||
|
PowerMockito.`when`(DateUtil.now()).thenReturn(now)
|
||||||
|
authRequest = AuthRequest(injector, requester, "Request text", "ABC", action)
|
||||||
|
actionCalled = false
|
||||||
|
PowerMockito.`when`(DateUtil.now()).thenReturn(now + T.mins(Constants.SMS_CONFIRM_TIMEOUT).msecs() + 1)
|
||||||
|
authRequest.action("ABC")
|
||||||
|
Assert.assertFalse(actionCalled)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue