From eddb2ff262fd9fde7a145cd147ac020b055958ba Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Tue, 25 Oct 2022 12:19:18 +0700 Subject: [PATCH 01/12] Implement maxSize extension --- .../MoreQuestionnaireItemComponents.kt | 26 ++++++++++++++ .../MoreQuestionnaireItemComponentsTest.kt | 34 +++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt index 6bf60c1af5..9db16527a5 100644 --- a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt +++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt @@ -22,10 +22,12 @@ import com.google.android.fhir.datacapture.common.datatype.asStringValue import com.google.android.fhir.datacapture.utilities.evaluateToDisplay import com.google.android.fhir.getLocalizedText import com.google.android.fhir.logicalId +import java.math.BigDecimal import org.hl7.fhir.r4.model.Base import org.hl7.fhir.r4.model.BooleanType import org.hl7.fhir.r4.model.CodeType import org.hl7.fhir.r4.model.CodeableConcept +import org.hl7.fhir.r4.model.DecimalType import org.hl7.fhir.r4.model.Expression import org.hl7.fhir.r4.model.IntegerType import org.hl7.fhir.r4.model.Questionnaire @@ -175,6 +177,30 @@ internal val Questionnaire.QuestionnaireItemComponent.choiceOrientation: ChoiceO return ChoiceOrientationTypes.values().firstOrNull { it.extensionCode == code } } +internal const val EXTENSION_MAX_SIZE = "http://hl7.org/fhir/StructureDefinition/maxSize" + +private val SIZE_UNIT_DIVIDER = BigDecimal(1024) + +/** Maximum size an attachment can be. Unit in Bytes. */ +internal val Questionnaire.QuestionnaireItemComponent.maxSizeInB: BigDecimal? + get() { + return (extension.firstOrNull { it.url == EXTENSION_MAX_SIZE }?.valueAsPrimitive + as DecimalType?) + ?.value + } + +/** Maximum size an attachment can be. Unit in Kilobytes. */ +internal val Questionnaire.QuestionnaireItemComponent.maxSizeInKB: BigDecimal? + get() { + return maxSizeInB?.div(SIZE_UNIT_DIVIDER) + } + +/** Maximum size an attachment can be. Unit in Megabytes. */ +internal val Questionnaire.QuestionnaireItemComponent.maxSizeInMB: BigDecimal? + get() { + return maxSizeInKB?.div(SIZE_UNIT_DIVIDER) + } + /** UI controls relevant to rendering questionnaire items. */ internal enum class DisplayItemControlType(val extensionCode: String) { FLYOVER("flyover"), diff --git a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt index ca4ab3248d..de53c55782 100644 --- a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt +++ b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt @@ -25,6 +25,7 @@ import org.hl7.fhir.r4.model.BooleanType import org.hl7.fhir.r4.model.CodeType import org.hl7.fhir.r4.model.CodeableConcept import org.hl7.fhir.r4.model.Coding +import org.hl7.fhir.r4.model.DecimalType import org.hl7.fhir.r4.model.Enumeration import org.hl7.fhir.r4.model.Expression import org.hl7.fhir.r4.model.Extension @@ -462,6 +463,39 @@ class MoreQuestionnaireItemComponentsTest { assertThat(questionnaire.choiceOrientation).isNull() } + @Test + fun maxSize_shouldReturnBytes() { + val questionnaire = + Questionnaire.QuestionnaireItemComponent().apply { + addExtension(EXTENSION_MAX_SIZE, DecimalType(5242880)) + } + assertThat(questionnaire.maxSizeInB).isEqualTo(BigDecimal(5242880)) + } + + @Test + fun maxSize_shouldReturnKilobytes() { + val questionnaire = + Questionnaire.QuestionnaireItemComponent().apply { + addExtension(EXTENSION_MAX_SIZE, DecimalType(5242880)) + } + assertThat(questionnaire.maxSizeInKB).isEqualTo(BigDecimal(5120)) + } + + @Test + fun maxSize_shouldReturnMegabytes() { + val questionnaire = + Questionnaire.QuestionnaireItemComponent().apply { + addExtension(EXTENSION_MAX_SIZE, DecimalType(5242880)) + } + assertThat(questionnaire.maxSizeInMB).isEqualTo(BigDecimal(5)) + } + + @Test + fun maxSize_missingExtension_shouldReturnNull() { + val questionnaire = Questionnaire.QuestionnaireItemComponent() + assertThat(questionnaire.maxSizeInB).isNull() + } + @Test fun localizedTextSpanned_noText_shouldReturnNull() { assertThat(Questionnaire.QuestionnaireItemComponent().localizedTextSpanned).isNull() From 624cf29b5e0d86422d45abf94b17329e592f14fc Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Tue, 25 Oct 2022 20:18:33 +0700 Subject: [PATCH 02/12] Address review - Use Kibibytes and Mebibytes. - Add test case when answer size is above limit. --- .../MoreQuestionnaireItemComponents.kt | 10 ++--- .../MoreQuestionnaireItemComponentsTest.kt | 37 +++++++++++++++++-- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt index 9db16527a5..245e745b2d 100644 --- a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt +++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt @@ -189,16 +189,16 @@ internal val Questionnaire.QuestionnaireItemComponent.maxSizeInB: BigDecimal? ?.value } -/** Maximum size an attachment can be. Unit in Kilobytes. */ -internal val Questionnaire.QuestionnaireItemComponent.maxSizeInKB: BigDecimal? +/** Maximum size an attachment can be. Unit in Kibibytes. */ +internal val Questionnaire.QuestionnaireItemComponent.maxSizeInKiB: BigDecimal? get() { return maxSizeInB?.div(SIZE_UNIT_DIVIDER) } -/** Maximum size an attachment can be. Unit in Megabytes. */ -internal val Questionnaire.QuestionnaireItemComponent.maxSizeInMB: BigDecimal? +/** Maximum size an attachment can be. Unit in Mebibytes. */ +internal val Questionnaire.QuestionnaireItemComponent.maxSizeInMiB: BigDecimal? get() { - return maxSizeInKB?.div(SIZE_UNIT_DIVIDER) + return maxSizeInKiB?.div(SIZE_UNIT_DIVIDER) } /** UI controls relevant to rendering questionnaire items. */ diff --git a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt index de53c55782..17ff3264bc 100644 --- a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt +++ b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt @@ -18,9 +18,12 @@ package com.google.android.fhir.datacapture import android.os.Build import com.google.android.fhir.datacapture.mapping.ITEM_INITIAL_EXPRESSION_URL +import com.google.android.fhir.datacapture.validation.NotValidated +import com.google.android.fhir.datacapture.views.QuestionnaireItemViewItem import com.google.common.truth.Truth.assertThat import java.math.BigDecimal import java.util.Locale +import org.hl7.fhir.r4.model.Attachment import org.hl7.fhir.r4.model.BooleanType import org.hl7.fhir.r4.model.CodeType import org.hl7.fhir.r4.model.CodeableConcept @@ -33,6 +36,7 @@ import org.hl7.fhir.r4.model.IntegerType import org.hl7.fhir.r4.model.Patient import org.hl7.fhir.r4.model.Quantity import org.hl7.fhir.r4.model.Questionnaire +import org.hl7.fhir.r4.model.QuestionnaireResponse import org.hl7.fhir.r4.model.StringType import org.hl7.fhir.r4.utils.ToolingExtensions import org.junit.Assert.assertThrows @@ -473,21 +477,46 @@ class MoreQuestionnaireItemComponentsTest { } @Test - fun maxSize_shouldReturnKilobytes() { + fun maxSize_shouldReturnKibibytes() { val questionnaire = Questionnaire.QuestionnaireItemComponent().apply { addExtension(EXTENSION_MAX_SIZE, DecimalType(5242880)) } - assertThat(questionnaire.maxSizeInKB).isEqualTo(BigDecimal(5120)) + assertThat(questionnaire.maxSizeInKiB).isEqualTo(BigDecimal(5120)) } @Test - fun maxSize_shouldReturnMegabytes() { + fun maxSize_shouldReturnMebibytes() { val questionnaire = Questionnaire.QuestionnaireItemComponent().apply { addExtension(EXTENSION_MAX_SIZE, DecimalType(5242880)) } - assertThat(questionnaire.maxSizeInMB).isEqualTo(BigDecimal(5)) + assertThat(questionnaire.maxSizeInMiB).isEqualTo(BigDecimal(5)) + } + + @Test + fun maxSize_whenAnswerSizeIsAboveLimit_shouldBeKnown() { + var answers = listOf() + val questionnaireItemViewItem = + QuestionnaireItemViewItem( + questionnaireItem = + Questionnaire.QuestionnaireItemComponent().apply { + linkId = "attachment-1" + addExtension(EXTENSION_MAX_SIZE, DecimalType(0)) + }, + questionnaireResponseItem = QuestionnaireResponse.QuestionnaireResponseItemComponent(), + validationResult = NotValidated, + answersChangedCallback = { _, _, result -> answers = result }, + ) + .apply { + setAnswer( + QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent() + .setValue(Attachment().apply { size = 5242880 }) + ) + } + + assertThat(answers.first().valueAttachment.size) + .isGreaterThan(questionnaireItemViewItem.questionnaireItem.maxSizeInB?.toInt()) } @Test From 89fd3696fc8f8fdb33193b8a9f7eb61bb7e5bded Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Thu, 27 Oct 2022 17:12:41 +0700 Subject: [PATCH 03/12] Trigger CI checks From e38a7731503b1170dc0f3e4474443f42243356ac Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Fri, 28 Oct 2022 09:04:45 +0700 Subject: [PATCH 04/12] Trigger CI checks From 46fe8a8de1500cc691d1c7f2f941cef370436c56 Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Tue, 8 Nov 2022 10:16:12 +0700 Subject: [PATCH 05/12] Trigger CI checks From b2078267bbdf45897cf4c06e653a5c384daa9fcf Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Wed, 4 Jan 2023 18:49:04 +0700 Subject: [PATCH 06/12] Use direct conversion from Byte to other units --- .../datacapture/MoreQuestionnaireItemComponents.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt index 245e745b2d..2a9f80210b 100644 --- a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt +++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt @@ -179,8 +179,6 @@ internal val Questionnaire.QuestionnaireItemComponent.choiceOrientation: ChoiceO internal const val EXTENSION_MAX_SIZE = "http://hl7.org/fhir/StructureDefinition/maxSize" -private val SIZE_UNIT_DIVIDER = BigDecimal(1024) - /** Maximum size an attachment can be. Unit in Bytes. */ internal val Questionnaire.QuestionnaireItemComponent.maxSizeInB: BigDecimal? get() { @@ -189,16 +187,20 @@ internal val Questionnaire.QuestionnaireItemComponent.maxSizeInB: BigDecimal? ?.value } +private val BYTES_PER_KIB = BigDecimal(1024) + /** Maximum size an attachment can be. Unit in Kibibytes. */ internal val Questionnaire.QuestionnaireItemComponent.maxSizeInKiB: BigDecimal? get() { - return maxSizeInB?.div(SIZE_UNIT_DIVIDER) + return maxSizeInB?.div(BYTES_PER_KIB) } +private val BYTES_PER_MIB = BigDecimal(1048576) + /** Maximum size an attachment can be. Unit in Mebibytes. */ internal val Questionnaire.QuestionnaireItemComponent.maxSizeInMiB: BigDecimal? get() { - return maxSizeInKiB?.div(SIZE_UNIT_DIVIDER) + return maxSizeInB?.div(BYTES_PER_MIB) } /** UI controls relevant to rendering questionnaire items. */ From 25de3789f1fe48b64b72904f67b4c58d6c6d78f8 Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Wed, 4 Jan 2023 18:50:44 +0700 Subject: [PATCH 07/12] Update function docs --- .../fhir/datacapture/MoreQuestionnaireItemComponents.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt index 2a9f80210b..c258477b16 100644 --- a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt +++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt @@ -189,7 +189,7 @@ internal val Questionnaire.QuestionnaireItemComponent.maxSizeInB: BigDecimal? private val BYTES_PER_KIB = BigDecimal(1024) -/** Maximum size an attachment can be. Unit in Kibibytes. */ +/** The maximum size of an attachment in Kibibytes. */ internal val Questionnaire.QuestionnaireItemComponent.maxSizeInKiB: BigDecimal? get() { return maxSizeInB?.div(BYTES_PER_KIB) @@ -197,7 +197,7 @@ internal val Questionnaire.QuestionnaireItemComponent.maxSizeInKiB: BigDecimal? private val BYTES_PER_MIB = BigDecimal(1048576) -/** Maximum size an attachment can be. Unit in Mebibytes. */ +/** The maximum size of an attachment in Mebibytes. */ internal val Questionnaire.QuestionnaireItemComponent.maxSizeInMiB: BigDecimal? get() { return maxSizeInB?.div(BYTES_PER_MIB) From 0bf3f91311583ed0b4f1065789077e804587c3b8 Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Wed, 4 Jan 2023 18:53:15 +0700 Subject: [PATCH 08/12] Rename maxSizeInB to maxSizeInByte --- .../fhir/datacapture/MoreQuestionnaireItemComponents.kt | 6 +++--- .../fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt index c258477b16..1646c839a6 100644 --- a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt +++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt @@ -180,7 +180,7 @@ internal val Questionnaire.QuestionnaireItemComponent.choiceOrientation: ChoiceO internal const val EXTENSION_MAX_SIZE = "http://hl7.org/fhir/StructureDefinition/maxSize" /** Maximum size an attachment can be. Unit in Bytes. */ -internal val Questionnaire.QuestionnaireItemComponent.maxSizeInB: BigDecimal? +internal val Questionnaire.QuestionnaireItemComponent.maxSizeInByte: BigDecimal? get() { return (extension.firstOrNull { it.url == EXTENSION_MAX_SIZE }?.valueAsPrimitive as DecimalType?) @@ -192,7 +192,7 @@ private val BYTES_PER_KIB = BigDecimal(1024) /** The maximum size of an attachment in Kibibytes. */ internal val Questionnaire.QuestionnaireItemComponent.maxSizeInKiB: BigDecimal? get() { - return maxSizeInB?.div(BYTES_PER_KIB) + return maxSizeInByte?.div(BYTES_PER_KIB) } private val BYTES_PER_MIB = BigDecimal(1048576) @@ -200,7 +200,7 @@ private val BYTES_PER_MIB = BigDecimal(1048576) /** The maximum size of an attachment in Mebibytes. */ internal val Questionnaire.QuestionnaireItemComponent.maxSizeInMiB: BigDecimal? get() { - return maxSizeInB?.div(BYTES_PER_MIB) + return maxSizeInByte?.div(BYTES_PER_MIB) } /** UI controls relevant to rendering questionnaire items. */ diff --git a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt index 17ff3264bc..75081de13a 100644 --- a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt +++ b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt @@ -473,7 +473,7 @@ class MoreQuestionnaireItemComponentsTest { Questionnaire.QuestionnaireItemComponent().apply { addExtension(EXTENSION_MAX_SIZE, DecimalType(5242880)) } - assertThat(questionnaire.maxSizeInB).isEqualTo(BigDecimal(5242880)) + assertThat(questionnaire.maxSizeInByte).isEqualTo(BigDecimal(5242880)) } @Test @@ -516,13 +516,13 @@ class MoreQuestionnaireItemComponentsTest { } assertThat(answers.first().valueAttachment.size) - .isGreaterThan(questionnaireItemViewItem.questionnaireItem.maxSizeInB?.toInt()) + .isGreaterThan(questionnaireItemViewItem.questionnaireItem.maxSizeInByte?.toInt()) } @Test fun maxSize_missingExtension_shouldReturnNull() { val questionnaire = Questionnaire.QuestionnaireItemComponent() - assertThat(questionnaire.maxSizeInB).isNull() + assertThat(questionnaire.maxSizeInByte).isNull() } @Test From df2dad28228292cb8149e7035c2dac5fe5f6ef21 Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Wed, 4 Jan 2023 18:54:23 +0700 Subject: [PATCH 09/12] Remove unclear test --- .../MoreQuestionnaireItemComponentsTest.kt | 25 ------------------- 1 file changed, 25 deletions(-) diff --git a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt index 75081de13a..acf7435274 100644 --- a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt +++ b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt @@ -494,31 +494,6 @@ class MoreQuestionnaireItemComponentsTest { assertThat(questionnaire.maxSizeInMiB).isEqualTo(BigDecimal(5)) } - @Test - fun maxSize_whenAnswerSizeIsAboveLimit_shouldBeKnown() { - var answers = listOf() - val questionnaireItemViewItem = - QuestionnaireItemViewItem( - questionnaireItem = - Questionnaire.QuestionnaireItemComponent().apply { - linkId = "attachment-1" - addExtension(EXTENSION_MAX_SIZE, DecimalType(0)) - }, - questionnaireResponseItem = QuestionnaireResponse.QuestionnaireResponseItemComponent(), - validationResult = NotValidated, - answersChangedCallback = { _, _, result -> answers = result }, - ) - .apply { - setAnswer( - QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent() - .setValue(Attachment().apply { size = 5242880 }) - ) - } - - assertThat(answers.first().valueAttachment.size) - .isGreaterThan(questionnaireItemViewItem.questionnaireItem.maxSizeInByte?.toInt()) - } - @Test fun maxSize_missingExtension_shouldReturnNull() { val questionnaire = Questionnaire.QuestionnaireItemComponent() From c514d5f247573f9bf653e43af6239903e04decae Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Wed, 4 Jan 2023 18:58:29 +0700 Subject: [PATCH 10/12] Add tests for maxSizeInKiB and maxSizeInMiB --- .../MoreQuestionnaireItemComponentsTest.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt index acf7435274..a1c809c8c0 100644 --- a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt +++ b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt @@ -495,11 +495,23 @@ class MoreQuestionnaireItemComponentsTest { } @Test - fun maxSize_missingExtension_shouldReturnNull() { + fun maxSizeInByte_missingExtension_shouldReturnNull() { val questionnaire = Questionnaire.QuestionnaireItemComponent() assertThat(questionnaire.maxSizeInByte).isNull() } + @Test + fun maxSizeInKiB_missingExtension_shouldReturnNull() { + val questionnaire = Questionnaire.QuestionnaireItemComponent() + assertThat(questionnaire.maxSizeInKiB).isNull() + } + + @Test + fun maxSizeInMiB_missingExtension_shouldReturnNull() { + val questionnaire = Questionnaire.QuestionnaireItemComponent() + assertThat(questionnaire.maxSizeInMiB).isNull() + } + @Test fun localizedTextSpanned_noText_shouldReturnNull() { assertThat(Questionnaire.QuestionnaireItemComponent().localizedTextSpanned).isNull() From eee694416fb023b61c69022c947c239285370028 Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Wed, 4 Jan 2023 19:16:35 +0700 Subject: [PATCH 11/12] spotlessApply --- .../fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt index 806e48471e..36c203d951 100644 --- a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt +++ b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt @@ -18,12 +18,9 @@ package com.google.android.fhir.datacapture import android.os.Build import com.google.android.fhir.datacapture.mapping.ITEM_INITIAL_EXPRESSION_URL -import com.google.android.fhir.datacapture.validation.NotValidated -import com.google.android.fhir.datacapture.views.QuestionnaireItemViewItem import com.google.common.truth.Truth.assertThat import java.math.BigDecimal import java.util.Locale -import org.hl7.fhir.r4.model.Attachment import org.hl7.fhir.r4.model.BooleanType import org.hl7.fhir.r4.model.CodeType import org.hl7.fhir.r4.model.CodeableConcept @@ -36,7 +33,6 @@ import org.hl7.fhir.r4.model.IntegerType import org.hl7.fhir.r4.model.Patient import org.hl7.fhir.r4.model.Quantity import org.hl7.fhir.r4.model.Questionnaire -import org.hl7.fhir.r4.model.QuestionnaireResponse import org.hl7.fhir.r4.model.StringType import org.hl7.fhir.r4.utils.ToolingExtensions import org.junit.Assert.assertThrows From 2789c40aa5d3a738e9b37c4d0f653c503abb552f Mon Sep 17 00:00:00 2001 From: fikrimilano Date: Fri, 6 Jan 2023 19:21:08 +0700 Subject: [PATCH 12/12] Address review --- .../MoreQuestionnaireItemComponents.kt | 22 +++---- .../MoreQuestionnaireItemComponentsTest.kt | 61 +++++++++---------- 2 files changed, 37 insertions(+), 46 deletions(-) diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt index 5e7db19ee0..88b3650232 100644 --- a/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt +++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponents.kt @@ -189,29 +189,23 @@ internal val Questionnaire.QuestionnaireItemComponent.mimeTypes: List internal const val EXTENSION_MAX_SIZE = "http://hl7.org/fhir/StructureDefinition/maxSize" -/** Maximum size an attachment can be. Unit in Bytes. */ -internal val Questionnaire.QuestionnaireItemComponent.maxSizeInByte: BigDecimal? - get() { - return (extension.firstOrNull { it.url == EXTENSION_MAX_SIZE }?.valueAsPrimitive - as DecimalType?) +/** The maximum size of an attachment in Bytes. */ +internal val Questionnaire.QuestionnaireItemComponent.maxSizeInBytes: BigDecimal? + get() = + (extension.firstOrNull { it.url == EXTENSION_MAX_SIZE }?.valueAsPrimitive as DecimalType?) ?.value - } private val BYTES_PER_KIB = BigDecimal(1024) /** The maximum size of an attachment in Kibibytes. */ -internal val Questionnaire.QuestionnaireItemComponent.maxSizeInKiB: BigDecimal? - get() { - return maxSizeInByte?.div(BYTES_PER_KIB) - } +internal val Questionnaire.QuestionnaireItemComponent.maxSizeInKiBs: BigDecimal? + get() = maxSizeInBytes?.div(BYTES_PER_KIB) private val BYTES_PER_MIB = BigDecimal(1048576) /** The maximum size of an attachment in Mebibytes. */ -internal val Questionnaire.QuestionnaireItemComponent.maxSizeInMiB: BigDecimal? - get() { - return maxSizeInByte?.div(BYTES_PER_MIB) - } +internal val Questionnaire.QuestionnaireItemComponent.maxSizeInMiBs: BigDecimal? + get() = maxSizeInBytes?.div(BYTES_PER_MIB) /** UI controls relevant to rendering questionnaire items. */ internal enum class DisplayItemControlType(val extensionCode: String) { diff --git a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt index 36c203d951..1a619b2ca2 100644 --- a/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt +++ b/datacapture/src/test/java/com/google/android/fhir/datacapture/MoreQuestionnaireItemComponentsTest.kt @@ -426,111 +426,108 @@ class MoreQuestionnaireItemComponentsTest { @Test fun choiceOrientation_shouldReturnVertical() { - val questionnaire = + val questionnaireItem = Questionnaire.QuestionnaireItemComponent().apply { addExtension( EXTENSION_CHOICE_ORIENTATION_URL, CodeType(ChoiceOrientationTypes.VERTICAL.extensionCode) ) } - assertThat(questionnaire.choiceOrientation).isEqualTo(ChoiceOrientationTypes.VERTICAL) + assertThat(questionnaireItem.choiceOrientation).isEqualTo(ChoiceOrientationTypes.VERTICAL) } @Test fun choiceOrientation_shouldReturnHorizontal() { - val questionnaire = + val questionnaireItem = Questionnaire.QuestionnaireItemComponent().apply { addExtension( EXTENSION_CHOICE_ORIENTATION_URL, CodeType(ChoiceOrientationTypes.HORIZONTAL.extensionCode) ) } - assertThat(questionnaire.choiceOrientation).isEqualTo(ChoiceOrientationTypes.HORIZONTAL) + assertThat(questionnaireItem.choiceOrientation).isEqualTo(ChoiceOrientationTypes.HORIZONTAL) } @Test fun choiceOrientation_missingExtension_shouldReturnNull() { - val questionnaire = Questionnaire.QuestionnaireItemComponent() - assertThat(questionnaire.choiceOrientation).isNull() + val questionnaireItem = Questionnaire.QuestionnaireItemComponent() + assertThat(questionnaireItem.choiceOrientation).isNull() } @Test fun choiceOrientation_missingOrientation_shouldReturnNull() { - val questionnaire = + val questionnaireItem = Questionnaire.QuestionnaireItemComponent().apply { addExtension(EXTENSION_CHOICE_ORIENTATION_URL, CodeType("")) } - assertThat(questionnaire.choiceOrientation).isNull() + assertThat(questionnaireItem.choiceOrientation).isNull() } @Test fun mimeTypes_shouldReturnMimeTypes() { - val questionnaire = + val questionnaireItem = Questionnaire.QuestionnaireItemComponent().apply { addExtension(EXTENSION_MIME_TYPE, CodeType("image/jpg")) addExtension(EXTENSION_MIME_TYPE, CodeType("application/pdf")) } - assertThat(questionnaire.mimeTypes).isEqualTo(listOf("image/jpg", "application/pdf")) + assertThat(questionnaireItem.mimeTypes).isEqualTo(listOf("image/jpg", "application/pdf")) } @Test fun mimeTypes_missingMimeType_shouldReturnEmpty() { - val questionnaire = + val questionnaireItem = Questionnaire.QuestionnaireItemComponent().apply { addExtension(EXTENSION_MIME_TYPE, CodeType("")) } - assertThat(questionnaire.mimeTypes).isEmpty() + assertThat(questionnaireItem.mimeTypes).isEmpty() } @Test fun mimeTypes_missingExtension_shouldReturnNull() { - val questionnaire = Questionnaire.QuestionnaireItemComponent() - assertThat(questionnaire.mimeTypes).isEmpty() + val questionnaireItem = Questionnaire.QuestionnaireItemComponent() + assertThat(questionnaireItem.mimeTypes).isEmpty() } @Test - fun maxSize_shouldReturnBytes() { - val questionnaire = + fun `should return max size in bytes`() { + val questionnaireItem = Questionnaire.QuestionnaireItemComponent().apply { addExtension(EXTENSION_MAX_SIZE, DecimalType(5242880)) } - assertThat(questionnaire.maxSizeInByte).isEqualTo(BigDecimal(5242880)) + assertThat(questionnaireItem.maxSizeInBytes).isEqualTo(BigDecimal(5242880)) } @Test - fun maxSize_shouldReturnKibibytes() { - val questionnaire = + fun `should return max size in kibibytes`() { + val questionnaireItem = Questionnaire.QuestionnaireItemComponent().apply { addExtension(EXTENSION_MAX_SIZE, DecimalType(5242880)) } - assertThat(questionnaire.maxSizeInKiB).isEqualTo(BigDecimal(5120)) + assertThat(questionnaireItem.maxSizeInKiBs).isEqualTo(BigDecimal(5120)) } @Test - fun maxSize_shouldReturnMebibytes() { - val questionnaire = + fun `should return max size in mebibytes`() { + val questionnaireItem = Questionnaire.QuestionnaireItemComponent().apply { addExtension(EXTENSION_MAX_SIZE, DecimalType(5242880)) } - assertThat(questionnaire.maxSizeInMiB).isEqualTo(BigDecimal(5)) + assertThat(questionnaireItem.maxSizeInMiBs).isEqualTo(BigDecimal(5)) } @Test - fun maxSizeInByte_missingExtension_shouldReturnNull() { - val questionnaire = Questionnaire.QuestionnaireItemComponent() - assertThat(questionnaire.maxSizeInByte).isNull() + fun `should return null for max size in bytes`() { + assertThat(Questionnaire.QuestionnaireItemComponent().maxSizeInBytes).isNull() } @Test - fun maxSizeInKiB_missingExtension_shouldReturnNull() { - val questionnaire = Questionnaire.QuestionnaireItemComponent() - assertThat(questionnaire.maxSizeInKiB).isNull() + fun `should return null for max size in kibibytes`() { + assertThat(Questionnaire.QuestionnaireItemComponent().maxSizeInKiBs).isNull() } @Test - fun maxSizeInMiB_missingExtension_shouldReturnNull() { - val questionnaire = Questionnaire.QuestionnaireItemComponent() - assertThat(questionnaire.maxSizeInMiB).isNull() + fun `should return null for max size in mebibytes`() { + assertThat(Questionnaire.QuestionnaireItemComponent().maxSizeInMiBs).isNull() } @Test