Skip to content

Commit b51d490

Browse files
committedAug 19, 2024·
testing set usecase
1 parent 5ebfec5 commit b51d490

File tree

2 files changed

+88
-4
lines changed

2 files changed

+88
-4
lines changed
 

‎features/finances/impl/src/main/kotlin/br/com/mob1st/features/finances/impl/domain/usecases/SetCategoryUseCase.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ internal class SetCategoryUseCase(
1010
private val analyticsReporter: AnalyticsReporter,
1111
private val eventFactory: SetCategoryEventFactory,
1212
) {
13-
suspend operator fun invoke(
14-
category: Category,
15-
) {
13+
suspend operator fun invoke(category: Category) {
1614
if (category.id.isWritten()) {
1715
categoryRepository.set(category)
1816
} else {
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,97 @@
11
package br.com.mob1st.features.finances.impl.domain.usecases
22

3+
import br.com.mob1st.core.observability.events.AnalyticsEvent
4+
import br.com.mob1st.core.observability.events.AnalyticsReporter
5+
import br.com.mob1st.features.finances.impl.domain.entities.Category
6+
import br.com.mob1st.features.finances.impl.domain.events.SetCategoryEventFactory
7+
import br.com.mob1st.features.finances.impl.domain.fixtures.category
8+
import br.com.mob1st.features.finances.impl.domain.infra.repositories.CategoryRepository
9+
import io.kotest.property.Arb
10+
import io.kotest.property.arbitrary.next
11+
import io.mockk.coEvery
12+
import io.mockk.coVerify
13+
import io.mockk.every
14+
import io.mockk.mockk
15+
import io.mockk.verify
16+
import kotlinx.coroutines.test.runTest
17+
import org.junit.jupiter.api.BeforeEach
318
import org.junit.jupiter.api.Test
19+
import org.junit.jupiter.api.assertThrows
420

521
class SetCategoryUseCaseTest {
622
private lateinit var useCase: SetCategoryUseCase
23+
private lateinit var categoryRepository: CategoryRepository
24+
private lateinit var analyticsReporter: AnalyticsReporter
25+
private lateinit var eventFactory: SetCategoryEventFactory
26+
27+
@BeforeEach
28+
fun setUp() {
29+
categoryRepository = mockk(relaxed = true)
30+
analyticsReporter = mockk(relaxed = true)
31+
eventFactory = mockk()
32+
every { eventFactory.create(any()) } returns AnalyticsEvent(name = "fake")
33+
useCase = SetCategoryUseCase(
34+
categoryRepository = categoryRepository,
35+
analyticsReporter = analyticsReporter,
36+
eventFactory = eventFactory,
37+
)
38+
}
39+
40+
@Test
41+
fun `GIVEN an existing category WHEN set THEN assert it is updated And event is sent`() = runTest {
42+
val existingCategory = Arb.category().next().copy(
43+
id = Category.Id(1),
44+
)
45+
useCase(existingCategory)
46+
coVerify(exactly = 1) {
47+
categoryRepository.set(existingCategory)
48+
eventFactory.create(existingCategory)
49+
analyticsReporter.report(AnalyticsEvent(name = "fake"))
50+
}
51+
52+
coVerify(exactly = 0) {
53+
categoryRepository.add(any())
54+
}
55+
}
56+
57+
@Test
58+
fun `GIVEN a new category WHEN set THEN assert it is added And event is sent`() = runTest {
59+
val newCategory = Arb.category().next().copy(
60+
id = Category.Id(),
61+
)
62+
useCase(newCategory)
63+
coVerify(exactly = 1) {
64+
categoryRepository.add(newCategory)
65+
eventFactory.create(newCategory)
66+
analyticsReporter.report(AnalyticsEvent(name = "fake"))
67+
}
68+
69+
coVerify(exactly = 0) {
70+
categoryRepository.set(any())
71+
}
72+
}
73+
74+
@Test
75+
fun `GIVEN a failure WHEN set new category THEN assert error is thrown And event is not sent`() = runTest {
76+
coEvery { categoryRepository.add(any()) } throws Exception()
77+
assertThrows<Exception> {
78+
useCase(Arb.category().next().copy(id = Category.Id()))
79+
}
80+
verify(exactly = 0) {
81+
eventFactory.create(any())
82+
analyticsReporter.report(any())
83+
}
84+
}
785

886
@Test
9-
fun `GIVEN a category WHEN update THEN`() {
87+
fun `GIVEN a failure WHEN set existing category THEN assert error is thrown And event is not sent`() = runTest {
88+
coEvery { categoryRepository.set(any()) } throws Exception()
89+
assertThrows<Exception> {
90+
useCase(Arb.category().next().copy(id = Category.Id(1)))
91+
}
92+
verify(exactly = 0) {
93+
eventFactory.create(any())
94+
analyticsReporter.report(any())
95+
}
1096
}
1197
}

0 commit comments

Comments
 (0)
Please sign in to comment.