diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index dd415e7e..cd342bb1 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -13,6 +13,7 @@
+
diff --git a/app/src/test/java/com/hieuwu/groceriesstore/domain/usecases/impl/GetCategoriesListUseCaseImplTest.kt b/app/src/test/java/com/hieuwu/groceriesstore/domain/usecases/impl/GetCategoriesListUseCaseImplTest.kt
new file mode 100644
index 00000000..7e844fdf
--- /dev/null
+++ b/app/src/test/java/com/hieuwu/groceriesstore/domain/usecases/impl/GetCategoriesListUseCaseImplTest.kt
@@ -0,0 +1,68 @@
+package com.hieuwu.groceriesstore.domain.usecases.impl
+
+import com.hieuwu.groceriesstore.data.repository.CategoryRepository
+import com.hieuwu.groceriesstore.domain.models.CategoryModel
+import com.hieuwu.groceriesstore.domain.usecases.GetCategoriesListUseCase
+import junit.framework.TestCase.assertEquals
+import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.runBlocking
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.junit.MockitoJUnitRunner
+import org.mockito.kotlin.whenever
+
+@RunWith(MockitoJUnitRunner::class)
+
+class GetCategoriesListUseCaseImplTest {
+
+ @Mock
+ lateinit var mockedCategoryRepository: CategoryRepository
+
+ private lateinit var testee: GetCategoriesListUseCaseImpl
+
+ @Before
+ fun setUp() {
+ testee = GetCategoriesListUseCaseImpl(
+ categoryRepository = mockedCategoryRepository
+ )
+ }
+
+ @Test
+ fun givenCategoriesAvailable_whenExecute_thenReturnCorrectValue() {
+ val mockCategories = listOf(
+ CategoryModel(id = "1", name = "Category 1", image = "image1.jpg"),
+ CategoryModel(id = "2", name = "Category 2", image = "image2.jpg"),
+ CategoryModel(id = "3", name = "Category 3", image = "image3.jpg"),
+ CategoryModel(id = "4", name = "Category 4", image = "image4.jpg")
+ )
+ whenever(mockedCategoryRepository.getFromLocal()).thenReturn(flow {
+ emit(mockCategories)
+ })
+ runBlocking {
+ val result = testee.execute(GetCategoriesListUseCase.Input())
+
+ result.result.collect { categories ->
+ assertEquals(mockCategories[0], categories[0])
+ assertEquals(mockCategories[1], categories[1])
+ assertEquals(mockCategories[2], categories[2])
+ assertEquals(mockCategories[1].name, "Category 2")
+ assertEquals(mockCategories[3].image, "image4.jpg")
+ }
+ }
+ }
+
+ @Test
+ fun givenCategoriesUnavailable_whenExecute_thenReturnCorrectValue() {
+ whenever(mockedCategoryRepository.getFromLocal()).thenReturn(flow {
+ emit(listOf())
+ })
+ runBlocking {
+ val result = testee.execute(GetCategoriesListUseCase.Input())
+ result.result.collect {
+ assertEquals(it.isEmpty(), true)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/test/java/com/hieuwu/groceriesstore/domain/usecases/impl/GetCurrentCartUseCaseImplTest.kt b/app/src/test/java/com/hieuwu/groceriesstore/domain/usecases/impl/GetCurrentCartUseCaseImplTest.kt
new file mode 100644
index 00000000..2eda357e
--- /dev/null
+++ b/app/src/test/java/com/hieuwu/groceriesstore/domain/usecases/impl/GetCurrentCartUseCaseImplTest.kt
@@ -0,0 +1,71 @@
+package com.hieuwu.groceriesstore.domain.usecases.impl
+
+import com.hieuwu.groceriesstore.data.repository.OrderRepository
+import com.hieuwu.groceriesstore.domain.models.OrderModel
+import com.hieuwu.groceriesstore.domain.usecases.GetCurrentCartUseCase
+import com.hieuwu.groceriesstore.utilities.OrderStatus
+import junit.framework.TestCase.assertEquals
+import junit.framework.TestCase.assertNull
+import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.runBlocking
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.junit.MockitoJUnitRunner
+import org.mockito.kotlin.whenever
+
+@RunWith(MockitoJUnitRunner::class)
+
+class GetCurrentCartUseCaseImplTest {
+
+ @Mock
+ lateinit var mockedOrderRepository: OrderRepository
+
+ private lateinit var testee: GetCurrentCartUseCaseImpl
+
+ @Before
+ fun setUp() {
+ testee = GetCurrentCartUseCaseImpl(
+ orderRepository = mockedOrderRepository
+ )
+ }
+
+ @Test
+ fun givenCartNotEmpty_whenExecute_thenReturnOrdersInCart() {
+ val mockOrder = OrderModel(
+ id = "",
+ status = OrderStatus.IN_CART.value,
+ address = null,
+ lineItemList = mutableListOf(),
+ createdAt = ""
+ )
+ whenever(mockedOrderRepository.getOneOrderByStatus(OrderStatus.IN_CART)).thenReturn(flow {
+ emit(mockOrder)
+ })
+ runBlocking {
+ val result = testee.execute(GetCurrentCartUseCase.Input())
+
+ result.result.collect { order ->
+ assertEquals(order?.id, "")
+ assertEquals(order?.status, "cart")
+ assertEquals(order?.address, null)
+ assertEquals(order?.lineItemList!!.isEmpty(), true)
+ assertEquals(order.createdAt, "")
+ }
+ }
+ }
+
+ @Test
+ fun givenCartEmpty_whenExecute_thenReturnNull() {
+ whenever(mockedOrderRepository.getOneOrderByStatus(OrderStatus.IN_CART)).thenReturn(flow {
+ null
+ })
+ runBlocking {
+ val result = testee.execute(GetCurrentCartUseCase.Input())
+ result.result.collect {
+ assertNull(it)
+ }
+ }
+ }
+}
\ No newline at end of file