Skip to content

Commit

Permalink
Replace inline launchQuestionnaire extension functions
Browse files Browse the repository at this point in the history
Since they're not getting tracked in our codcov
jacoco/jacoco#654
  • Loading branch information
LZRS committed Jul 29, 2023
1 parent 49c2108 commit 9d8ba4c
Show file tree
Hide file tree
Showing 10 changed files with 342 additions and 279 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package org.smartregister.fhircore.engine.ui.questionnaire

import android.app.Activity
import android.app.AlertDialog
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.MenuItem
Expand Down Expand Up @@ -514,5 +515,58 @@ open class QuestionnaireActivity : BaseMultiLanguageActivity(), View.OnClickList
)
}
}

fun launchQuestionnaire(
context: Context,
questionnaireId: String,
clientIdentifier: String? = null,
groupIdentifier: String? = null,
questionnaireType: QuestionnaireType = QuestionnaireType.DEFAULT,
intentBundle: Bundle = Bundle.EMPTY,
launchContexts: ArrayList<Resource>? = null,
populationResources: ArrayList<Resource>? = null
) {
context.startActivity(
Intent(context, QuestionnaireActivity::class.java)
.putExtras(intentBundle)
.putExtras(
intentArgs(
clientIdentifier = clientIdentifier,
groupIdentifier = groupIdentifier,
formName = questionnaireId,
questionnaireType = questionnaireType,
launchContexts = launchContexts,
populationResources = populationResources ?: ArrayList()
)
)
)
}

fun launchQuestionnaireForResult(
context: Activity,
questionnaireId: String,
clientIdentifier: String? = null,
questionnaireType: QuestionnaireType = QuestionnaireType.DEFAULT,
backReference: String? = null,
intentBundle: Bundle = Bundle.EMPTY,
launchContexts: ArrayList<Resource>? = null,
populationResources: ArrayList<Resource>? = null
) {
context.startActivityForResult(
Intent(context, QuestionnaireActivity::class.java)
.putExtras(intentBundle)
.putExtras(
intentArgs(
clientIdentifier = clientIdentifier,
formName = questionnaireId,
questionnaireType = questionnaireType,
backReference = backReference,
launchContexts = launchContexts,
populationResources = populationResources ?: ArrayList()
)
),
0
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,11 @@ import android.content.res.Configuration
import android.content.res.Resources
import android.graphics.drawable.Drawable
import android.os.Build
import android.os.Bundle
import android.os.LocaleList
import android.widget.Toast
import androidx.core.content.ContextCompat
import java.util.Locale
import org.hl7.fhir.r4.model.Resource
import org.smartregister.fhircore.engine.R
import org.smartregister.fhircore.engine.ui.questionnaire.QuestionnaireActivity
import org.smartregister.fhircore.engine.ui.questionnaire.QuestionnaireType
import timber.log.Timber

fun Context.showToast(message: String, toastLength: Int = Toast.LENGTH_LONG) =
Expand Down Expand Up @@ -90,54 +86,3 @@ fun Context.getDrawable(name: String): Drawable {
fun <T : Enum<T>> Enum<T>.isIn(vararg values: Enum<T>): Boolean {
return values.any { this == it }
}

inline fun <reified Q : QuestionnaireActivity> Context.launchQuestionnaire(
questionnaireId: String,
clientIdentifier: String? = null,
groupIdentifier: String? = null,
questionnaireType: QuestionnaireType = QuestionnaireType.DEFAULT,
intentBundle: Bundle = Bundle.EMPTY,
launchContexts: ArrayList<Resource>? = null,
populationResources: ArrayList<Resource>? = null
) {
this.startActivity(
Intent(this, Q::class.java)
.putExtras(intentBundle)
.putExtras(
QuestionnaireActivity.intentArgs(
clientIdentifier = clientIdentifier,
groupIdentifier = groupIdentifier,
formName = questionnaireId,
questionnaireType = questionnaireType,
launchContexts = launchContexts,
populationResources = populationResources ?: ArrayList()
)
)
)
}

inline fun <reified Q : QuestionnaireActivity> Context.launchQuestionnaireForResult(
questionnaireId: String,
clientIdentifier: String? = null,
questionnaireType: QuestionnaireType = QuestionnaireType.DEFAULT,
backReference: String? = null,
intentBundle: Bundle = Bundle.EMPTY,
launchContexts: ArrayList<Resource>? = null,
populationResources: ArrayList<Resource>? = null
) {
(this as Activity).startActivityForResult(
Intent(this, Q::class.java)
.putExtras(intentBundle)
.putExtras(
QuestionnaireActivity.intentArgs(
clientIdentifier = clientIdentifier,
formName = questionnaireId,
questionnaireType = questionnaireType,
backReference = backReference,
launchContexts = launchContexts,
populationResources = populationResources ?: ArrayList()
)
),
0
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ package org.smartregister.fhircore.engine.ui.questionnaire

import android.app.Activity
import android.app.AlertDialog
import android.app.Application
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.MenuItem
import android.widget.TextView
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
Expand Down Expand Up @@ -650,6 +652,213 @@ class QuestionnaireActivityTest : ActivityRobolectricTest() {
Assert.assertTrue(spiedActivity.isFinishing)
}

/** Launch Questionnaire tests */
@Test
fun launchQuestionnaireCallsStartActivity() {
val appContext = ApplicationProvider.getApplicationContext<Application>()
val ctx = mockk<Context>()
every { ctx.packageName } returns appContext.packageName
every { ctx.startActivity(any()) } just runs
QuestionnaireActivity.launchQuestionnaire(
ctx,
questionnaireId = "testQuestionnaire",
clientIdentifier = null,
populationResources = arrayListOf()
)

verify { ctx.startActivity(any()) }
}

@Test
fun launchQuestionnaireForResultCallsStartActivityForResultWithRequestCode() {
val appContext = ApplicationProvider.getApplicationContext<Application>()
val ctx = spyk<Activity>()
every { ctx.packageName } returns appContext.packageName
every { ctx.startActivityForResult(any(), any()) } just runs
QuestionnaireActivity.launchQuestionnaireForResult(
ctx,
questionnaireId = "testQuestionnaire",
clientIdentifier = null,
populationResources = arrayListOf()
)
verify { ctx.startActivityForResult(any(), withArg { Assert.assertEquals(0, it) }) }
}

@Test
fun launchQuestionnaireForResultCallsStartActivityForResultWithNullLaunchContexts() {
val appContext = ApplicationProvider.getApplicationContext<Application>()
val ctx = spyk<Activity>()
every { ctx.packageName } returns appContext.packageName
every { ctx.startActivityForResult(any(), any()) } just runs
QuestionnaireActivity.launchQuestionnaireForResult(
ctx,
questionnaireId = "testQuestionnaire",
launchContexts = null,
populationResources = arrayListOf()
)
verify { ctx.startActivityForResult(any(), withArg { Assert.assertEquals(0, it) }) }
}

@Test
fun launchQuestionnaireCallsStartActivityForResultWithNullLaunchContexts() {
val appContext = ApplicationProvider.getApplicationContext<Application>()
val ctx = spyk<Activity>()
every { ctx.packageName } returns appContext.packageName
every { ctx.startActivity(any()) } just runs
QuestionnaireActivity.launchQuestionnaire(
ctx,
questionnaireId = "testQuestionnaire",
launchContexts = null,
populationResources = arrayListOf()
)
verify { ctx.startActivity(any()) }
}

@Test
fun launchQuestionnaire_StartActivityCalledWithAllParameters() {
val appContext = ApplicationProvider.getApplicationContext<Application>()
val questionnaireId = "questionnaire_id"
val clientIdentifier = "client_identifier"
val groupIdentifier = "group_identifier"
val intentBundle = Bundle.EMPTY
val questionnaireType = QuestionnaireType.DEFAULT
val launchContexts = mockk<ArrayList<Resource>>(relaxed = true)
val populationResources = mockk<ArrayList<Resource>>(relaxed = true)

val ctx = spyk<Activity>()
every { ctx.packageName } returns appContext.packageName
every { ctx.startActivity(any()) } just runs

QuestionnaireActivity.launchQuestionnaire(
ctx,
questionnaireId = questionnaireId,
clientIdentifier = clientIdentifier,
groupIdentifier = groupIdentifier,
intentBundle = intentBundle,
questionnaireType = questionnaireType,
launchContexts = launchContexts,
populationResources = populationResources
)

val expectedIntent =
Intent(ctx, QuestionnaireActivity::class.java)
.putExtras(intentBundle)
.putExtras(
QuestionnaireActivity.intentArgs(
clientIdentifier = clientIdentifier,
groupIdentifier = groupIdentifier,
formName = questionnaireId,
questionnaireType = questionnaireType,
launchContexts = launchContexts,
populationResources = populationResources
)
)

verify {
ctx.startActivity(
withArg {
Assert.assertEquals(
expectedIntent.getStringExtra("clientIdentifier"),
it.getStringExtra("clientIdentifier")
)
Assert.assertEquals(
expectedIntent.getStringExtra("groupIdentifier"),
it.getStringExtra("groupIdentifier")
)
Assert.assertEquals(
expectedIntent.getStringExtra("formName"),
it.getStringExtra("formName")
)
Assert.assertEquals(
expectedIntent.getStringExtra("questionnaireType"),
it.getStringExtra("questionnaireType")
)
Assert.assertEquals(
expectedIntent.getStringArrayListExtra("launchContexts"),
it.getStringArrayListExtra("launchContexts")
)
Assert.assertEquals(
expectedIntent.getStringArrayListExtra("populationResources"),
it.getStringArrayListExtra("populationResources")
)
}
)
}
}

@Test
fun launchQuestionnaireCallsStartActivityForResultWithAllParameters() {
val appContext = ApplicationProvider.getApplicationContext<Application>()
val questionnaireId = "questionnaire_id"
val clientIdentifier = "client_identifier"
val backReference = "back_reference"
val intentBundle = Bundle.EMPTY
val questionnaireType = QuestionnaireType.DEFAULT
val launchContexts = mockk<ArrayList<Resource>>(relaxed = true)
val populationResources = mockk<ArrayList<Resource>>(relaxed = true)

val ctx = spyk<Activity>()
every { ctx.packageName } returns appContext.packageName
every { ctx.startActivityForResult(any(), any()) } just runs

QuestionnaireActivity.launchQuestionnaireForResult(
ctx,
questionnaireId = questionnaireId,
clientIdentifier = clientIdentifier,
questionnaireType = questionnaireType,
backReference = backReference,
intentBundle = intentBundle,
launchContexts = launchContexts,
populationResources = populationResources
)

val expectedIntent =
Intent(ctx, QuestionnaireActivity::class.java)
.putExtras(intentBundle)
.putExtras(
QuestionnaireActivity.intentArgs(
clientIdentifier = clientIdentifier,
backReference = backReference,
formName = questionnaireId,
questionnaireType = questionnaireType,
launchContexts = launchContexts,
populationResources = populationResources
),
)

verify {
ctx.startActivityForResult(
withArg {
Assert.assertEquals(
expectedIntent.getStringExtra("clientIdentifier"),
it.getStringExtra("clientIdentifier")
)
Assert.assertEquals(
expectedIntent.getStringExtra("backReference"),
it.getStringExtra("backReference")
)
Assert.assertEquals(
expectedIntent.getStringExtra("formName"),
it.getStringExtra("formName")
)
Assert.assertEquals(
expectedIntent.getStringExtra("questionnaireType"),
it.getStringExtra("questionnaireType")
)
Assert.assertEquals(
expectedIntent.getStringArrayListExtra("launchContexts"),
it.getStringArrayListExtra("launchContexts")
)
Assert.assertEquals(
expectedIntent.getStringArrayListExtra("populationResources"),
it.getStringArrayListExtra("populationResources")
)
},
0
)
}
}

private fun buildQuestionnaireWithConstraints(): Questionnaire {
return Questionnaire().apply {
addItem().apply {
Expand Down
Loading

0 comments on commit 9d8ba4c

Please sign in to comment.