Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement inequality operators (<, >, <=, >=) in the enable when statement #848

Merged
merged 20 commits into from
Nov 25, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update operators.
  • Loading branch information
santosh-pingle committed Nov 19, 2021
commit 000fa9e1400677fa7d551657acacebb4fc1d8433
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package com.google.android.fhir.datacapture.enablement

import com.google.android.fhir.compareTo
import com.google.android.fhir.equals
import java.lang.IllegalStateException
import org.hl7.fhir.r4.model.Questionnaire
import org.hl7.fhir.r4.model.QuestionnaireResponse

Expand Down Expand Up @@ -129,24 +128,16 @@ private val Questionnaire.QuestionnaireItemEnableWhenComponent.predicate:
!equals(it.value, answer)
}
Questionnaire.QuestionnaireItemOperator.GREATER_THAN -> {
// True if whether at least no answer has a value that is greater than the enableWhen
// answer.
answer >= it.value
it.value > answer
}
Questionnaire.QuestionnaireItemOperator.GREATER_OR_EQUAL -> {
// True if whether at least no answer has a value that is greater or equal to the
// enableWhen answer.
answer > it.value
it.value >= answer
}
Questionnaire.QuestionnaireItemOperator.LESS_THAN -> {
// True if whether at least no answer has a value that is less than the enableWhen
// answer.
answer <= it.value
it.value < answer
}
Questionnaire.QuestionnaireItemOperator.LESS_OR_EQUAL -> {
// True if whether at least no answer has a value that is less or equal to the
// enableWhen answer.
answer < it.value
it.value <= answer
}
else -> throw NotImplementedError("Enable when operator $operator is not implemented.")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -386,117 +386,117 @@ class EnablementEvaluatorTest {
}

@Test
santosh-pingle marked this conversation as resolved.
Show resolved Hide resolved
fun evaluate_greaterThan_noAnswersGreaterThanEnableWhenAnswer_shouldReturnTrue() {
fun evaluate_greaterThan_answersGreaterThanEnableWhenAnswer_shouldReturnTrue() {
santosh-pingle marked this conversation as resolved.
Show resolved Hide resolved
evaluateEnableWhen(
behavior = null,
EnableWhen(
operator = Questionnaire.QuestionnaireItemOperator.GREATER_THAN,
expected = IntegerType(10),
actual = listOf(IntegerType(5))
actual = listOf(IntegerType(20))
)
)
.isTrue()
}

@Test
fun evaluate_greaterThan_answersGreaterThanEnableWhenAnswer_shouldReturnFalse() {
fun evaluate_greaterThan_noAnswersGreaterThanEnableWhenAnswer_shouldReturnFalse() {
santosh-pingle marked this conversation as resolved.
Show resolved Hide resolved
evaluateEnableWhen(
behavior = null,
EnableWhen(
operator = Questionnaire.QuestionnaireItemOperator.GREATER_THAN,
expected = IntegerType(10),
actual = listOf(IntegerType(20))
actual = listOf(IntegerType(5))
)
)
.isFalse()
}

@Test
fun evaluate_greaterOrEqual_noAnswersGreaterOrEqualEnableWhenAnswer_shouldReturnTrue() {
fun evaluate_greaterOrEqual_answersGreaterOrEqualEnableWhenAnswer_shouldReturnTrue() {
santosh-pingle marked this conversation as resolved.
Show resolved Hide resolved
evaluateEnableWhen(
behavior = null,
EnableWhen(
operator = Questionnaire.QuestionnaireItemOperator.GREATER_OR_EQUAL,
expected = IntegerType(10),
actual = listOf(IntegerType(5))
actual = listOf(IntegerType(10))
)
)
.isTrue()
}

@Test
fun evaluate_greaterOrEqual_answersGreaterOrEqualEnableWhenAnswer_shouldReturnFalse() {
fun evaluate_greaterOrEqual_noAnswersGreaterOrEqualEnableWhenAnswer_shouldReturnFalse() {
santosh-pingle marked this conversation as resolved.
Show resolved Hide resolved
evaluateEnableWhen(
behavior = null,
EnableWhen(
operator = Questionnaire.QuestionnaireItemOperator.GREATER_OR_EQUAL,
expected = IntegerType(10),
actual = listOf(IntegerType(10))
actual = listOf(IntegerType(5))
)
)
.isFalse()
}

@Test
fun evaluate_lessThan_noAnswersLessThanEnableWhenAnswer_shouldReturnTrue() {
fun evaluate_lessThan_answersLessThanEnableWhenAnswer_shouldReturnTrue() {
santosh-pingle marked this conversation as resolved.
Show resolved Hide resolved
evaluateEnableWhen(
behavior = null,
EnableWhen(
operator = Questionnaire.QuestionnaireItemOperator.LESS_THAN,
expected = IntegerType(10),
actual = listOf(IntegerType(20))
actual = listOf(IntegerType(5))
)
)
.isTrue()
}

@Test
fun evaluate_lessThan_answersLessThanEnableWhenAnswer_shouldReturnFalse() {
fun evaluate_lessThan_noAnswersLessThanEnableWhenAnswer_shouldReturnFalse() {
santosh-pingle marked this conversation as resolved.
Show resolved Hide resolved
evaluateEnableWhen(
behavior = null,
EnableWhen(
operator = Questionnaire.QuestionnaireItemOperator.LESS_THAN,
expected = IntegerType(10),
actual = listOf(IntegerType(5))
actual = listOf(IntegerType(20))
)
)
.isFalse()
}

@Test
fun evaluate_lessOrEqual_noAnswerLessOrEqualEnableWhenAnswer_shouldReturnTrue() {
fun evaluate_lessOrEqual_answerLessOrEqualEnableWhenAnswer_shouldReturnTrue() {
santosh-pingle marked this conversation as resolved.
Show resolved Hide resolved
evaluateEnableWhen(
behavior = null,
EnableWhen(
operator = Questionnaire.QuestionnaireItemOperator.LESS_OR_EQUAL,
expected = IntegerType(10),
actual = listOf(IntegerType(20))
actual = listOf(IntegerType(10))
)
)
.isTrue()
}

@Test
fun evaluate_lessOrEqual_answerLessOrEqualEnableWhenAnswer_shouldReturnFalse() {
fun evaluate_lessOrEqual_noAnswerLessOrEqualEnableWhenAnswer_shouldReturnFalse() {
santosh-pingle marked this conversation as resolved.
Show resolved Hide resolved
evaluateEnableWhen(
behavior = null,
EnableWhen(
operator = Questionnaire.QuestionnaireItemOperator.LESS_OR_EQUAL,
expected = IntegerType(10),
actual = listOf(IntegerType(10))
actual = listOf(IntegerType(20))
)
)
.isFalse()
}

@Test
fun evaluate_quantityType_lessOrEqual_noAnswerLessOrEqualEnableWhenAnswer_shouldReturnTrue() {
fun evaluate_quantityType_lessOrEqual_answerLessOrEqualEnableWhenAnswer_shouldReturnTrue() {
evaluateEnableWhen(
behavior = null,
EnableWhen(
operator = Questionnaire.QuestionnaireItemOperator.LESS_OR_EQUAL,
expected = Quantity().setCode("h").setValue(10),
actual = listOf(Quantity().setCode("h").setValue(20))
actual = listOf(Quantity().setCode("h").setValue(5))
)
)
.isTrue()
Expand Down