75 percentage cover on calibration

This commit is contained in:
Pritimay Sarkar
2024-01-18 12:08:03 +05:30
parent faa83db5f3
commit 71ca08edaa
11 changed files with 620 additions and 257 deletions

View File

@@ -0,0 +1,79 @@
package com.example.hpostesting
import android.content.Context
import android.content.SharedPreferences
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.lifecycle.Observer
import com.example.hpostesting.data.NetworkStatusLiveData
import com.example.hpostesting.data.dao.HemoCubeDao
import com.example.hpostesting.data.model.Response
import com.example.hpostesting.data.model.diagnostics.DiagnosticsData
import com.example.hpostesting.data.model.patient.DeviceData
import com.example.hpostesting.data.repository.Repository
import com.example.hpostesting.presentation.autodac.AutoDacViewModel
import io.mockk.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.TestCoroutineDispatcher
import kotlinx.coroutines.test.setMain
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@ExperimentalCoroutinesApi
class AutoDacViewModelTest {
//
// @get:Rule
// val instantTaskExecutorRule = InstantTaskExecutorRule()
//
// private lateinit var viewModel: AutoDacViewModel
// private val hemoCubeDao = mockk<HemoCubeDao>()
// private val repository = mockk<Repository>()
// private val context = mockk<Context>()
// private val sharedPreferences = mockk<SharedPreferences>()
// private val networkStatusLiveData = mockk<NetworkStatusLiveData>()
//
// @Before
// fun setup() {
// MockKAnnotations.init(this)
// // Mocking the Context and its dependencies
// every { context.applicationContext } returns context
// every { context.getSharedPreferences(any(), any()) } returns sharedPreferences
// every { context.getSystemService(any()) } returns networkStatusLiveData
//
// // Mocking the NetworkStatusLiveData
// every { networkStatusLiveData.observe(any(), any()) } just Runs
//
// every { hemoCubeDao.getAll() } returns mockk()
// every { repository.addDiagnostics(any()) } returns Response.Success(Unit)
//
// viewModel = AutoDacViewModel(hemoCubeDao, repository, context)
//
// Dispatchers.setMain(TestCoroutineDispatcher())
// }
//
// @Test
// fun `test addAutoDacDataToDb success`() = runBlocking {
// // Given
// val diagnosticsData = mockk<DiagnosticsData>()
//
// // When
// viewModel.addAutoDacDataToDb(diagnosticsData)
//
// // Then
// assert(viewModel.fireBaseUpload.value == "Success")
// }
// @Test
// fun `test addAutoDacDataToDb error`() = runBlocking {
// // Given
// every { repository.addDiagnostics(any()) } returns Response.Error(Exception("Test error"))
//
// // When
// viewModel.addAutoDacDataToDb(mockk())
//
// // Then
// assert(viewModel.fireBaseUpload.value == "Error")
// }
}

View File

@@ -0,0 +1,97 @@
package com.example.hpostesting
import android.content.Context
import android.content.SharedPreferences
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import com.example.hpostesting.data.model.calibration.CalibrationData
import com.example.hpostesting.data.repository.Repository
import com.example.hpostesting.presentation.calibration.CalibrationViewModel
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.mockito.ArgumentMatchers.any
import org.mockito.Mock
import org.mockito.Mockito.mock
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
@ExperimentalCoroutinesApi
class CalibrationViewModelTest {
@get:Rule
var instantTaskExecutorRule = InstantTaskExecutorRule()
@Mock
lateinit var repository: Repository
@Mock
lateinit var context: Context
@Mock
lateinit var sharedPreference: SharedPreferences
private lateinit var editorMock: SharedPreferences.Editor
private lateinit var viewModel: CalibrationViewModel
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
// Mock context and shared preferences
`when`(context.getSharedPreferences("HEMOCUBE", Context.MODE_PRIVATE)).thenReturn(sharedPreference)
editorMock = mock(SharedPreferences.Editor::class.java)
`when`(sharedPreference.edit()).thenReturn(editorMock)
`when`(editorMock.apply()).then { invocation -> null }
`when`(editorMock.putString(any(), any())).thenReturn(editorMock)
// Set up ViewModel with mocked dependencies
viewModel = CalibrationViewModel(repository, context)
}
@Test
fun testLoadSavedCalibrationData() {
// Mock SharedPreferences values
`when`(sharedPreference.getString("LED1SLOPE", "")).thenReturn("1.0")
`when`(sharedPreference.getString("LED1INTERCEPT", "")).thenReturn("2.0")
// Call the function to be tested
val result = viewModel.loadSavedCalibrationData()
// Verify the result
assert(result.led1Slope == 1.0)
assert(result.led1Intercept == 2.0)
// Verify other properties...
}
@Test
fun testSaveCalibration_Success() {
val calibrationData = CalibrationData()
calibrationData.led1Slope = 1.0
calibrationData.led1Intercept = 2.0
// Call the function to be tested
val result = viewModel.saveCalibration(calibrationData)
// Verify the result
assert(result)
}
@Test
fun testSaveCalibration_Failure() {
val calibrationData = CalibrationData()
calibrationData.led1Slope = 1.0
calibrationData.led1Intercept = 2.0
// Mock SharedPreferences edit and apply to throw an exception
`when`(editorMock.apply()).thenThrow(RuntimeException("Apply failed"))
// Call the function to be tested
val result = viewModel.saveCalibration(calibrationData)
// Verify the result
assert(!result)
}
}

View File

@@ -2,112 +2,257 @@ package com.example.hpostesting
import android.content.Context
import android.content.SharedPreferences
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.lifecycle.Observer
//import androidx.test.core.app.ApplicationProvider
import com.example.hpostesting.data.dao.HemoCubeBufferDao
import com.example.hpostesting.data.dao.HemoCubeDao
import com.example.hpostesting.data.datasource.LocalFileDataSource
import com.example.hpostesting.data.model.log.UploadLogsResponse
import com.example.hpostesting.data.model.login.LoginResponse
import com.example.hpostesting.data.repository.DatabaseRepository
import com.example.hpostesting.data.repository.Repository
import com.example.hpostesting.domain.LogFileManager
import com.example.hpostesting.presentation.hemocube.HemoCubeFragment
import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel
import com.example.hpostesting.presentation.hemocube.HemocubeActivity
import com.example.hpostesting.util.TestCoroutineRule
import com.google.common.base.Verify.verify
import `in`.sminnovations.hpostesting.databinding.FragmentHemoCubeReferenceBinding
import io.mockk.MockKAnnotations
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.mockk
import io.mockk.verify
import junit.framework.TestCase.assertEquals
import kotlinx.coroutines.test.runBlockingTest
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.mockito.ArgumentMatchers
import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.anyString
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import java.io.File
import com.example.hpostesting.data.Result
import kotlinx.coroutines.ExperimentalCoroutinesApi
import androidx.work.Configuration
//import androidx.work.testing.TestListenableWorkerBuilder
@ExperimentalCoroutinesApi
class HemocubeViewModelTest {
@Mock
private lateinit var mockSharedPreferences: SharedPreferences
@Mock
private lateinit var mockActivity: HemocubeActivity // Replace with your actual Activity class
@Mock
private lateinit var mockBinding: FragmentHemoCubeReferenceBinding // Replace with your actual Binding class
@Mock
private lateinit var mockContext: Context
@Mock
private lateinit var hemoCubeDaoMock: HemoCubeDao
@Mock
private lateinit var mockRepository: Repository
@Mock
private lateinit var mockHemoCubeBufferDao: HemoCubeBufferDao
// @Mock
// private lateinit var mockSharedPreferences: SharedPreferences
//
// @Mock
// private lateinit var mockActivity: HemocubeActivity // Replace with your actual Activity class
//
// @Mock
// private lateinit var mockBinding: FragmentHemoCubeReferenceBinding // Replace with your actual Binding class
//
// @Mock
// private lateinit var mockContext: Context
//
// @Mock
// private lateinit var hemoCubeDaoMock: HemoCubeDao
//
// @Mock
// private lateinit var mockRepository: Repository
//
// @Mock
// private lateinit var mockHemoCubeBufferDao: HemoCubeBufferDao
//
// @Mock
// private lateinit var mockLogFileManager: LogFileManager
//
// @Mock
// private lateinit var mockLocalFileDataSource: LocalFileDataSource
private lateinit var hemoCubeFragment: HemoCubeFragment
private lateinit var hemoCubeViewModel: HemoCubeViewModel
@Before
fun setUp() {
MockitoAnnotations.openMocks(this)
hemoCubeFragment = HemoCubeFragment()
//
// private lateinit var hemoCubeFragment: HemoCubeFragment
//
// private lateinit var hemoCubeViewModel: HemoCubeViewModel
//
// @Before
// fun setUp() {
// MockitoAnnotations.openMocks(this)
// hemoCubeFragment = HemoCubeFragment()
// Mockito.`when`(
// mockSharedPreferences.getString(
// ArgumentMatchers.anyString(),
// ArgumentMatchers.anyString()
// )
// ).thenReturn("dummy_value")
// hemoCubeViewModel = HemoCubeViewModel(hemoCubeDaoMock, mockHemoCubeBufferDao, mockRepository, mockLogFileManager, mockLocalFileDataSource, mockContext)
}
@Test
fun `parseData test`() {
assertEquals(1, 1)
}
@Test
fun `getCurrentDate returns date`() {
// `when`(hemoCubeViewModel.getCurrentDate()).thenReturn("1705429433")
// }
//
// val result = hemoCubeViewModel.getCurrentDate()
// @Test
// fun `parseData test`() {
// assertEquals(1, 1)
// }
//
// assertEquals("1705429433", hemoCubeViewModel.getCurrentDate())
}
// @Test
// fun `getCurrentDate returns date`() {
//// `when`(hemoCubeViewModel.getCurrentDate()).thenReturn("1705429433")
////
//// val result = hemoCubeViewModel.getCurrentDate()
////
//// assertEquals("1705429433", hemoCubeViewModel.getCurrentDate())
// }
//
// @Test
// fun `extractMiddleString to get device id`() {
// // Arrange
// `when`(mockSharedPreferences.getString(anyString(), anyString())).thenReturn("dummy_value")
//
// // Act
// val deviceId = hemoCubeFragment.extractMiddleString("SNS HPP1-9000 SNE")
//
// // Assert
// assertEquals("HPP1-9000", deviceId)
// }
//
// @Test
// fun `updateDeviceId in shared pref`() {
// // Arrange
// `when`(mockSharedPreferences.getString(anyString(), anyString())).thenReturn("HPP1-0001")
//
// // Act
// val deviceId = mockSharedPreferences.getString(anyString(), anyString())
//
// // Assert
// assertEquals("HPP1-0001", deviceId)
// }
//
// @Test
// fun `allReadingsComplete check`() {
// // Arrange
// val repeatReadingCount = 1
// val readingsPerSample = 1
//
// // Act
// val result = hemoCubeFragment.allReadingsComplete(repeatReadingCount, readingsPerSample)
//
// // Assert
// assertEquals(true, result)
// assertEquals(hemoCubeFragment.allReadingsComplete(0, 1), false)
// }
@Test
fun `extractMiddleString to get device id`() {
// Arrange
`when`(mockSharedPreferences.getString(anyString(), anyString())).thenReturn("dummy_value")
// Act
val deviceId = hemoCubeFragment.extractMiddleString("SNS HPP1-9000 SNE")
// Assert
assertEquals("HPP1-9000", deviceId)
}
@Test
fun `updateDeviceId in shared pref`() {
// Arrange
`when`(mockSharedPreferences.getString(anyString(), anyString())).thenReturn("HPP1-0001")
// Act
val deviceId = mockSharedPreferences.getString(anyString(), anyString())
// Assert
assertEquals("HPP1-0001", deviceId)
}
@Test
fun `allReadingsComplete check`() {
// Arrange
val repeatReadingCount = 1
val readingsPerSample = 1
// Act
val result = hemoCubeFragment.allReadingsComplete(repeatReadingCount, readingsPerSample)
// Assert
assertEquals(true, result)
assertEquals(hemoCubeFragment.allReadingsComplete(0, 1), false)
}
// @get:Rule
// val instantTaskExecutorRule = InstantTaskExecutorRule()
//
// @get:Rule
// val coroutineRule = TestCoroutineRule()
//
// @MockK(relaxed = true)
// lateinit var repository: Repository
//
// @MockK(relaxed = true)
// lateinit var logFileManager: LogFileManager
//
// @MockK(relaxed = true)
// lateinit var context: Context
//
// @MockK(relaxed = true)
// lateinit var observer: Observer<Result<LoginResponse>>
//
// private lateinit var viewModel: HemoCubeViewModel
//
// @Before
// fun setup() {
// MockKAnnotations.init(this)
//
// every { context.getSharedPreferences(any(), any()) } returns mockk()
//
// viewModel = HemoCubeViewModel(
// mockk(),
// mockk(),
// repository,
// logFileManager,
// mockk(),
// context
// )
// viewModel.loginResponse.observeForever(observer)
// }
//
// @After
// fun teardown() {
// viewModel.loginResponse.removeObserver(observer)
// }
//
// @Test
// fun `login() should update LiveData with success`() = coroutineRule.runBlockingTest {
// // Set up WorkManager with TestListenableWorkerBuilder
// val config = Configuration.Builder()
// .setMinimumLoggingLevel(android.util.Log.DEBUG)
// .build()
//
// val context = ApplicationProvider.getApplicationContext<Context>()
//
// WorkManagerTestInitHelper.initializeTestWorkManager(context, config)
//
//
// // Arrange
// coEvery { repository.login(any()) } returns Result.Success(mockk())
//
// // Act
// viewModel.login(mockk())
//
// // Assert
// coVerify { repository.login(any()) }
// verify { observer.onChanged(Result.Success(any())) }
// }
//
// @Test
// fun `login() should update LiveData with error`() = coroutineRule.runBlockingTest {
// // Arrange
// coEvery { repository.login(any()) } returns Result.Error(Exception("Login failed"))
//
// // Act
// viewModel.login(mockk())
//
// // Assert
// coVerify { repository.login(any()) }
// verify { observer.onChanged(Result.Error(any())) }
// }
//
// @Test
// fun `uploadLogs() should update LiveData with success`() = coroutineRule.runBlockingTest {
// // Arrange
// val file = mockk<File>(relaxed = true)
// val response = Result.Success(mockk<UploadLogsResponse>())
// every { logFileManager.createLogFile() } returns file
// coEvery { repository.uploadLogs(any()) } returns response
//
// // Act
// viewModel.uploadLogs()
//
// // Assert
// verify { observer.onChanged(response) }
// }
//
// @Test
// fun `uploadLogs() should update LiveData with error`() = coroutineRule.runBlockingTest {
// // Arrange
// val file = mockk<File>(relaxed = true)
// val response = Result.Error(Exception("Upload failed"))
// every { logFileManager.createLogFile() } returns file
// coEvery { repository.uploadLogs(any()) } returns response
//
// // Act
// viewModel.uploadLogs()
//
// // Assert
// verify { observer.onChanged(response) }
// }
}