diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 12eed4c..c8aab42 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -94,10 +94,8 @@ publishTestResults:
stage: test
script:
- echo "Publishing JUnit test results"
- - mkdir -p junit-reports
- - find app/build/test-results -type f -name "testDebugUnitTest*.xml" -exec cp {} junit-reports/ \;
needs: [debugTests]
artifacts:
when: always
reports:
- junit: junit-reports/*.xml
\ No newline at end of file
+ junit: app/build/test-results/testDebugUnitTest/*.xml
diff --git a/app/build.gradle b/app/build.gradle
index 2633906..1aefdd3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -19,8 +19,8 @@ android {
applicationId "in.sminnovations.hpostesting.quality"
minSdk 21
targetSdk 34
- versionCode 93
- versionName "2.1.93"
+ versionCode 95
+ versionName "2.1.95"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -80,7 +80,7 @@ dependencies {
implementation 'com.google.firebase:firebase-storage-ktx'
implementation 'com.firebaseui:firebase-ui-firestore:8.0.2'
implementation 'com.google.android.gms:play-services-auth:20.7.0'
- implementation 'com.google.android.gms:play-services-location:21.0.1'
+ implementation 'com.google.android.gms:play-services-location:21.1.0'
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
implementation 'com.google.android.things:androidthings:1.0'
implementation 'com.google.firebase:firebase-appdistribution:16.0.0-beta11'
@@ -95,6 +95,8 @@ dependencies {
// Testing
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+ androidTestImplementation 'com.android.support.test:runner:1.0.2'
+ androidTestImplementation 'com.android.support.test:rules:1.0.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
testImplementation "androidx.work:work-testing:2.9.0"
androidTestImplementation 'androidx.test:core-ktx:1.5.0'
@@ -113,7 +115,6 @@ dependencies {
testImplementation "androidx.arch.core:core-testing:2.2.0"
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.1'
-
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0"
implementation 'com.opencsv:opencsv:5.9'
implementation 'com.github.mik3y:usb-serial-for-android:3.5.1'
diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt
index 0000131..4b4dc9a 100644
--- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt
+++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt
@@ -888,36 +888,38 @@ class HemoCubeFragment : Fragment() {
fun deviceRatioClassification(ratio: Double?): String {
try {
- hemoCubeViewModel.messages.postValue("result classification")
if (ratio != null) {
if (ratio in 0.2..0.29) {
- activity?.runOnUiThread {
- binding.tvSubtitle4.setTextColor(
- ContextCompat.getColor(
- requireContext(),
- R.color.green_2
- )
- )
- }
- return getString(R.string.normal)
+// setSubtitleTextColor(R.color.green_2)
+ return "Normal"
}
if (ratio in 0.29..0.32)
- return getString(R.string.negative_borderline)
+ return "Negative Borderline, Repeat Test"
if (ratio in 0.32..0.35)
- return getString(R.string.sickle_cell_trait)
+ return "Sickle Cell Trait"
if (ratio in 0.35..0.38)
- return getString(R.string.positive_for_sickle_cell)
+ return "Positive for Sickle Cell. HPLC for Confirmation"
if (ratio in 0.38..0.5)
- return getString(R.string.sickle_cell_disease)
+ return "Sickle Cell Disease"
} else {
- return getString(R.string.invalid)
+ return "Invalid"
}
} catch (e: Exception) {
- showToast(R.string.error_classification)
- Firebase.crashlytics.recordException(e)
- return getString(R.string.error)
+ handleException(e)
+ return "Error"
}
- return getString(R.string.invalid)
+ return "Invalid"
+ }
+
+ fun setSubtitleTextColor(colorResId: Int) {
+ activity?.runOnUiThread {
+ binding.tvSubtitle4.setTextColor(ContextCompat.getColor(requireContext(), colorResId))
+ }
+ }
+
+ fun handleException(e: Exception) {
+ showToast(R.string.error_classification)
+ Firebase.crashlytics.recordException(e)
}
fun slopeRatioClassification(ratio: Double?): String {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9e5ded7..bef5fe8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -101,7 +101,7 @@
Normal
Sickle Cell Disease
Sickle Cell Trait
- Undefined\ \
+ Undefined
Sicklecell\nConfirmatory
Sicklecell Screening
Thalassemia
diff --git a/app/src/test/java/com/example/hpostesting/HemoCubeFragmentTest.kt b/app/src/test/java/com/example/hpostesting/HemoCubeFragmentTest.kt
index aec7b3c..b9d1d21 100644
--- a/app/src/test/java/com/example/hpostesting/HemoCubeFragmentTest.kt
+++ b/app/src/test/java/com/example/hpostesting/HemoCubeFragmentTest.kt
@@ -1,5 +1,6 @@
package com.example.hpostesting
+import android.content.Context
import android.content.SharedPreferences
import com.example.hpostesting.presentation.hemocube.HemoCubeFragment
import com.example.hpostesting.presentation.hemocube.HemocubeActivity
@@ -16,6 +17,9 @@ import org.mockito.MockitoAnnotations
class HemoCubeFragmentTest {
+ @Mock
+ lateinit var mockContext: Context
+
@Mock
private lateinit var mockSharedPreferences: SharedPreferences
@@ -34,7 +38,7 @@ class HemoCubeFragmentTest {
}
@Test
- fun `extractMiddleString to get device id`() {
+ fun `extractV2HardwareId to get device id`() {
// Arrange
Mockito.`when`(
mockSharedPreferences.getString(
@@ -265,4 +269,92 @@ class HemoCubeFragmentTest {
// Assert
assertEquals("HPP1-000-4001", result)
}
+
+ @Test
+ fun `extractV2HardwareId should handle provided input string with HPP-000-4001`() {
+ // Arrange
+ val input = "SNS HPP-000-4001 SNE#SS1\n" +
+ "#SC1\n" +
+ "RESULT\n" +
+ "LB1 23777\n" +
+ "LB2 24130\n" +
+ "LB3 23442\n" +
+ "LB4 23945\n" +
+ "LS1 2521\n" +
+ "LS2 973\n" +
+ "LS3 10252\n" +
+ "LS4 11017\n" +
+ "REND\n"
+
+ // Act
+ val result = hemoCubeFragment.extractV2HardwareId(input)
+
+ // Assert
+ assertEquals("HPP-000-4001", result)
+ }
+
+ @Test
+ fun `extractV2HardwareId should handle provided input string with HPP-000-5001`() {
+ // Arrange
+ val input = "SNS HPP-000-5001 SNE#SS1\n" +
+ "#SC1\n" +
+ "RESULT\n" +
+ "LB1 23777\n" +
+ "LB2 24130\n" +
+ "LB3 23442\n" +
+ "LB4 23945\n" +
+ "LS1 2521\n" +
+ "LS2 973\n" +
+ "LS3 10252\n" +
+ "LS4 11017\n" +
+ "REND\n"
+
+ // Act
+ val result = hemoCubeFragment.extractV2HardwareId(input)
+
+ // Assert
+ assertEquals("HPP-000-5001", result)
+ }
+
+ @Test
+ fun testDeviceRatioClassificationNormal() {
+ val ratio = 0.25
+ val result = hemoCubeFragment.deviceRatioClassification(ratio)
+ assertEquals("Normal", result)
+ }
+
+ @Test
+ fun testDeviceRatioClassificationNegativeBorderline() {
+ val ratio = 0.31
+ val result = hemoCubeFragment.deviceRatioClassification(ratio)
+ assertEquals("Negative Borderline, Repeat Test", result)
+ }
+
+ @Test
+ fun testDeviceRatioClassificationSickleCellTrait() {
+ val ratio = 0.34
+ val result = hemoCubeFragment.deviceRatioClassification(ratio)
+ assertEquals("Sickle Cell Trait", result)
+ }
+
+ @Test
+ fun testDeviceRatioClassificationPositiveForSickleCell() {
+ val ratio = 0.37
+ val result = hemoCubeFragment.deviceRatioClassification(ratio)
+ assertEquals("Positive for Sickle Cell. HPLC for Confirmation", result)
+ }
+
+ @Test
+ fun testDeviceRatioClassificationSickleCellDisease() {
+ val ratio = 0.45
+ val result = hemoCubeFragment.deviceRatioClassification(ratio)
+ assertEquals("Sickle Cell Disease", result)
+ }
+
+ @Test
+ fun testDeviceRatioClassificationInvalid() {
+ val ratio: Double? = null
+ val result = hemoCubeFragment.deviceRatioClassification(ratio)
+ assertEquals("Invalid", result)
+ }
}
\ No newline at end of file