Skip to content

Commit 5392cff

Browse files
committed
Merge branch 'compose' into feature/311-home-repository
2 parents a996e4d + 3f5b694 commit 5392cff

File tree

5 files changed

+77
-41
lines changed

5 files changed

+77
-41
lines changed

core/data/src/main/java/com/youthtalk/repository/PolicyRepositoryImpl.kt

Lines changed: 5 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,22 @@ package com.youthtalk.repository
33
import com.core.dataapi.repository.PolicyRepository
44
import com.core.exception.NoDataException
55
import com.youthtalk.data.PolicyService
6-
import com.youthtalk.dto.PolicyDetailResponse
7-
import com.youthtalk.dto.policy.PolicyResponse
86
import com.youthtalk.mapper.toData
97
import com.youthtalk.mapper.toDomain
108
import com.youthtalk.model.policy.Policy
119
import com.youthtalk.model.policy.PolicyDetail
12-
import com.youthtalk.utils.ErrorUtils.throwableError
10+
import com.youthtalk.utils.ErrorUtils.createResult
1311
import javax.inject.Inject
14-
import kotlinx.coroutines.flow.Flow
15-
import kotlinx.coroutines.flow.flow
16-
import timber.log.Timber
1712

1813
class PolicyRepositoryImpl @Inject constructor(
1914
private val policyService: PolicyService
2015
) : PolicyRepository {
2116

22-
override fun getPolicyDetail(policyId: Long): Flow<PolicyDetail> = flow {
23-
runCatching {
24-
policyService.getPolicyDetail(policyId)
25-
}
26-
.onSuccess { response ->
27-
response.data?.let {
28-
emit(it.toData())
29-
} ?: throw NoDataException("no Data")
30-
}
31-
.onFailure {
32-
Timber.e("getPolicyDetail $it")
33-
throwableError<PolicyDetailResponse>(it)
34-
}
17+
override suspend fun getPolicyDetail(policyId: Long): Result<PolicyDetail> = createResult {
18+
policyService.getPolicyDetail(policyId).data?.toData() ?: throw NoDataException()
3519
}
3620

37-
override fun getRecentlyViewPolicies(): Flow<List<Policy>> = flow {
38-
runCatching {
39-
policyService.getRecentlyViewPolicies()
40-
}
41-
.onSuccess { response ->
42-
response.data?.let { data ->
43-
emit(data.map { it.toDomain() })
44-
} ?: throw NoDataException("no Data")
45-
}
46-
.onFailure {
47-
Timber.e("PolicyRepositoryImpl getRecentlyViewPolicies error $it")
48-
throwableError<PolicyResponse>(it)
49-
}
21+
override suspend fun getRecentlyViewPolicies(): Result<List<Policy>> = createResult {
22+
policyService.getRecentlyViewPolicies().data?.map { it.toDomain() } ?: throw NoDataException()
5023
}
5124
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.youthtalk.repository
2+
3+
import com.core.dataapi.repository.PolicyRepository
4+
import com.youthtalk.data.PolicyService
5+
import com.youthtalk.dto.CommonResponse
6+
import com.youthtalk.dto.PolicyDetailResponse
7+
import com.youthtalk.mapper.toData
8+
import com.youthtalk.model.policy.Policy
9+
import kotlinx.coroutines.test.runTest
10+
import org.junit.Assert.assertEquals
11+
import org.junit.Before
12+
import org.junit.Test
13+
import org.junit.runner.RunWith
14+
import org.mockito.Mock
15+
import org.mockito.junit.MockitoJUnitRunner
16+
import org.mockito.kotlin.verify
17+
import org.mockito.kotlin.whenever
18+
19+
@RunWith(MockitoJUnitRunner::class)
20+
class PolicyRepositoryTest {
21+
22+
private lateinit var sut: PolicyRepository
23+
24+
@Mock
25+
private lateinit var policyService: PolicyService
26+
27+
@Before
28+
fun setUp() {
29+
sut = PolicyRepositoryImpl(policyService)
30+
}
31+
32+
@Test
33+
fun givenPolicyId_whenGetPolicyDetail_thenReturnsPolicy() {
34+
runTest {
35+
// given
36+
val policyId = 3L
37+
val policyDetailResponse = createPolicyDetailResponse()
38+
39+
whenever(policyService.getPolicyDetail(policyId)).thenReturn(CommonResponse(200, "정책 조회에 성공하였습니다.", "S04", policyDetailResponse))
40+
41+
// when
42+
val result = sut.getPolicyDetail(policyId).getOrThrow()
43+
44+
// then
45+
assertEquals(policyDetailResponse.toData(), result)
46+
verify(policyService).getPolicyDetail(policyId)
47+
}
48+
}
49+
50+
@Test
51+
fun given_whenGetRecentViewPolicy_thenReturnsPolicy() {
52+
runTest {
53+
// given
54+
whenever(policyService.getRecentlyViewPolicies()).thenReturn(CommonResponse(200, "요청에 성공하였습니다.", "S01", listOf()))
55+
56+
// when
57+
val result = sut.getRecentlyViewPolicies().getOrThrow()
58+
59+
// then
60+
assertEquals(listOf<Policy>(), result)
61+
verify(policyService).getRecentlyViewPolicies()
62+
}
63+
}
64+
65+
private fun createPolicyDetailResponse(): PolicyDetailResponse {
66+
return PolicyDetailResponse("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", true, "", "")
67+
}
68+
}

core/dataApi/src/main/java/com/core/dataapi/repository/PolicyRepository.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ package com.core.dataapi.repository
22

33
import com.youthtalk.model.policy.Policy
44
import com.youthtalk.model.policy.PolicyDetail
5-
import kotlinx.coroutines.flow.Flow
65

76
interface PolicyRepository {
8-
fun getPolicyDetail(policyId: Long): Flow<PolicyDetail>
9-
fun getRecentlyViewPolicies(): Flow<List<Policy>>
7+
suspend fun getPolicyDetail(policyId: Long): Result<PolicyDetail>
8+
suspend fun getRecentlyViewPolicies(): Result<List<Policy>>
109
}

core/domain/src/main/java/com/core/domain/usercase/policydetail/GetPolicyDetailUseCase.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ package com.core.domain.usercase.policydetail
33
import com.core.dataapi.repository.PolicyRepository
44
import com.youthtalk.model.policy.PolicyDetail
55
import javax.inject.Inject
6-
import kotlinx.coroutines.flow.Flow
76

87
class GetPolicyDetailUseCase @Inject constructor(
98
private val policyRepository: PolicyRepository
109
) {
11-
operator fun invoke(policyId: Long): Flow<PolicyDetail> = policyRepository.getPolicyDetail(policyId)
10+
suspend operator fun invoke(policyId: Long): Result<PolicyDetail> = policyRepository.getPolicyDetail(policyId)
1211
}

feature/home/src/main/java/com/core/home/viewmodel/NewPolicyViewModel.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,7 @@ class NewPolicyViewModel @Inject constructor(
6262
viewModelScope.launch {
6363
state.value.policyId?.let { policyId ->
6464
getPolicyDetailUseCase(policyId)
65-
.catch {
66-
Timber.e("NewPolicyViewModel refresh error $it")
67-
}
68-
.collectLatest { policyDetail ->
65+
.onSuccess { policyDetail ->
6966
setState {
7067
copy(
7168
newPolicies = newPolicies.copy(

0 commit comments

Comments
 (0)