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