Skip to content

Commit b34d630

Browse files
committed
fix: 기존 develop 브랜치 수정으로 인한 테스트 오류 해결
1 parent 3ec3b72 commit b34d630

12 files changed

Lines changed: 78 additions & 84 deletions

app/src/test/java/com/eatssu/android/data/remote/dto/response/PartnershipResponseMapperBehaviorSpec.kt

Lines changed: 17 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.eatssu.android.data.remote.dto.response
22

3-
import com.eatssu.android.domain.model.RestaurantType
43
import com.eatssu.android.test.AppBehaviorSpec
4+
import com.eatssu.common.enums.StoreType
55
import io.kotest.matchers.shouldBe
66

77
class PartnershipResponseMapperBehaviorSpec : AppBehaviorSpec({
@@ -13,45 +13,37 @@ class PartnershipResponseMapperBehaviorSpec : AppBehaviorSpec({
1313
storeName = "A",
1414
longitude = 1.0,
1515
latitude = 2.0,
16-
restaurantType = "CAFE",
16+
restaurantType = StoreType.CAFE,
1717
partnershipInfos = emptyList(),
18-
).toDomain().restaurantType shouldBe RestaurantType.CAFE
18+
).toDomain().restaurantType shouldBe StoreType.CAFE
1919

2020
PartnershipResponse(
2121
storeName = "B",
2222
longitude = 1.0,
2323
latitude = 2.0,
24-
restaurantType = "RESTAURANT",
24+
restaurantType = StoreType.RESTAURANT,
2525
partnershipInfos = emptyList(),
26-
).toDomain().restaurantType shouldBe RestaurantType.RESTAURANT
26+
).toDomain().restaurantType shouldBe StoreType.RESTAURANT
2727

2828
PartnershipResponse(
2929
storeName = "C",
3030
longitude = 1.0,
3131
latitude = 2.0,
32-
restaurantType = "PUB",
32+
restaurantType = StoreType.PUB,
3333
partnershipInfos = emptyList(),
34-
).toDomain().restaurantType shouldBe RestaurantType.PUB
34+
).toDomain().restaurantType shouldBe StoreType.PUB
3535
}
3636
}
3737

38-
`when`("restaurantType이 null 또는 알 수 없는 값이면") {
38+
`when`("restaurantType이 null이면") {
3939
then("RESTAURANT로 fallback한다") {
4040
PartnershipResponse(
4141
storeName = "D",
4242
longitude = 1.0,
4343
latitude = 2.0,
4444
restaurantType = null,
4545
partnershipInfos = emptyList(),
46-
).toDomain().restaurantType shouldBe RestaurantType.RESTAURANT
47-
48-
PartnershipResponse(
49-
storeName = "E",
50-
longitude = 1.0,
51-
latitude = 2.0,
52-
restaurantType = "UNKNOWN",
53-
partnershipInfos = emptyList(),
54-
).toDomain().restaurantType shouldBe RestaurantType.RESTAURANT
46+
).toDomain().restaurantType shouldBe StoreType.RESTAURANT
5547
}
5648
}
5749

@@ -98,14 +90,14 @@ class PartnershipResponseMapperBehaviorSpec : AppBehaviorSpec({
9890
description = "desc",
9991
startDate = "2025-01-01",
10092
endDate = "2025-12-31",
101-
restaurantType = "CAFE",
93+
restaurantType = StoreType.CAFE,
10294
longitude = 1.0,
10395
latitude = 2.0,
10496
collegeName = "IT",
10597
departmentName = "CS",
10698
partnershipLikeCount = 1,
10799
likedByUser = true,
108-
).toDomain().restaurantType shouldBe RestaurantType.CAFE
100+
).toDomain().storeType shouldBe StoreType.CAFE
109101

110102
PartnershipRestaurantResponse(
111103
id = 1,
@@ -114,14 +106,14 @@ class PartnershipResponseMapperBehaviorSpec : AppBehaviorSpec({
114106
description = "desc",
115107
startDate = "2025-01-01",
116108
endDate = "2025-12-31",
117-
restaurantType = "RESTAURANT",
109+
restaurantType = StoreType.RESTAURANT,
118110
longitude = 1.0,
119111
latitude = 2.0,
120112
collegeName = "IT",
121113
departmentName = "CS",
122114
partnershipLikeCount = 1,
123115
likedByUser = true,
124-
).toDomain().restaurantType shouldBe RestaurantType.RESTAURANT
116+
).toDomain().storeType shouldBe StoreType.RESTAURANT
125117

126118
PartnershipRestaurantResponse(
127119
id = 1,
@@ -130,18 +122,18 @@ class PartnershipResponseMapperBehaviorSpec : AppBehaviorSpec({
130122
description = "desc",
131123
startDate = "2025-01-01",
132124
endDate = "2025-12-31",
133-
restaurantType = "PUB",
125+
restaurantType = StoreType.PUB,
134126
longitude = 1.0,
135127
latitude = 2.0,
136128
collegeName = "IT",
137129
departmentName = "CS",
138130
partnershipLikeCount = 1,
139131
likedByUser = true,
140-
).toDomain().restaurantType shouldBe RestaurantType.PUB
132+
).toDomain().storeType shouldBe StoreType.PUB
141133
}
142134
}
143135

144-
`when`("restaurantType이 null 또는 알 수 없는 값이면") {
136+
`when`("restaurantType이 null이면") {
145137
then("RESTAURANT로 fallback한다") {
146138
PartnershipRestaurantResponse(
147139
id = 1,
@@ -157,23 +149,7 @@ class PartnershipResponseMapperBehaviorSpec : AppBehaviorSpec({
157149
departmentName = "CS",
158150
partnershipLikeCount = 1,
159151
likedByUser = true,
160-
).toDomain().restaurantType shouldBe RestaurantType.RESTAURANT
161-
162-
PartnershipRestaurantResponse(
163-
id = 1,
164-
partnershipType = "DISCOUNT",
165-
storeName = "A",
166-
description = "desc",
167-
startDate = "2025-01-01",
168-
endDate = "2025-12-31",
169-
restaurantType = "UNKNOWN",
170-
longitude = 1.0,
171-
latitude = 2.0,
172-
collegeName = "IT",
173-
departmentName = "CS",
174-
partnershipLikeCount = 1,
175-
likedByUser = true,
176-
).toDomain().restaurantType shouldBe RestaurantType.RESTAURANT
152+
).toDomain().storeType shouldBe StoreType.RESTAURANT
177153
}
178154
}
179155

app/src/test/java/com/eatssu/android/data/remote/repository/FirebaseRemoteConfigRepositoryImplBehaviorSpec.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import io.mockk.mockkStatic
1313
import io.mockk.verify
1414
import kotlinx.coroutines.ExperimentalCoroutinesApi
1515
import kotlinx.coroutines.test.runTest
16+
import kotlinx.serialization.json.Json
1617

1718
@OptIn(ExperimentalCoroutinesApi::class)
1819
class FirebaseRemoteConfigRepositoryImplBehaviorSpec : AppBehaviorSpec({
@@ -24,7 +25,9 @@ class FirebaseRemoteConfigRepositoryImplBehaviorSpec : AppBehaviorSpec({
2425
every { remoteConfig.setConfigSettingsAsync(any()) } returns Tasks.forResult(null)
2526
every { remoteConfig.setDefaultsAsync(R.xml.firebase_remote_config) } returns Tasks.forResult(null)
2627

27-
val repository = FirebaseRemoteConfigRepositoryImpl()
28+
val repository = FirebaseRemoteConfigRepositoryImpl(
29+
Json { ignoreUnknownKeys = true }
30+
)
2831

2932
`when`("minimum version fetch가 성공하면") {
3033
every { remoteConfig.fetchAndActivate() } returns Tasks.forResult(true)

app/src/test/java/com/eatssu/android/data/remote/repository/HealthCheckRepositoryImplBehaviorSpec.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.eatssu.android.data.remote.repository
22

3-
import com.eatssu.android.data.model.ApiResult
43
import com.eatssu.android.data.remote.service.HealthCheckService
54
import com.eatssu.android.test.AppBehaviorSpec
65
import io.kotest.matchers.shouldBe
76
import io.mockk.coEvery
87
import io.mockk.mockk
98
import kotlinx.coroutines.ExperimentalCoroutinesApi
109
import kotlinx.coroutines.test.runTest
10+
import okhttp3.MediaType.Companion.toMediaType
11+
import okhttp3.ResponseBody.Companion.toResponseBody
12+
import retrofit2.Response
1113

1214
@OptIn(ExperimentalCoroutinesApi::class)
1315
class HealthCheckRepositoryImplBehaviorSpec : AppBehaviorSpec({
@@ -17,7 +19,7 @@ class HealthCheckRepositoryImplBehaviorSpec : AppBehaviorSpec({
1719
val repository = HealthCheckRepositoryImpl(service)
1820

1921
`when`("health check API가 성공하면") {
20-
coEvery { service.checkHealth() } returns ApiResult.Success(Unit)
22+
coEvery { service.checkHealth() } returns Response.success(Unit)
2123

2224
then("true를 반환한다") {
2325
runTest {
@@ -27,7 +29,10 @@ class HealthCheckRepositoryImplBehaviorSpec : AppBehaviorSpec({
2729
}
2830

2931
`when`("health check API가 실패하면") {
30-
coEvery { service.checkHealth() } returns ApiResult.Failure(500, "error")
32+
coEvery { service.checkHealth() } returns Response.error(
33+
500,
34+
"error".toResponseBody("text/plain".toMediaType()),
35+
)
3136

3237
then("false를 반환한다") {
3338
runTest {

app/src/test/java/com/eatssu/android/data/remote/repository/PartnershipRepositoryImplBehaviorSpec.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.eatssu.android.data.remote.dto.response.PartnershipRestaurantResponse
66
import com.eatssu.android.data.remote.service.PartnershipService
77
import com.eatssu.android.data.remote.service.UserService
88
import com.eatssu.android.test.AppBehaviorSpec
9+
import com.eatssu.common.enums.StoreType
910
import io.kotest.matchers.shouldBe
1011
import io.mockk.coEvery
1112
import io.mockk.mockk
@@ -26,7 +27,7 @@ class PartnershipRepositoryImplBehaviorSpec : AppBehaviorSpec({
2627
storeName = "Cafe A",
2728
longitude = 127.0,
2829
latitude = 37.0,
29-
restaurantType = "CAFE",
30+
restaurantType = StoreType.CAFE,
3031
partnershipInfos = listOf(
3132
PartnershipResponse.PartnershipInfo(
3233
id = 1,
@@ -71,7 +72,7 @@ class PartnershipRepositoryImplBehaviorSpec : AppBehaviorSpec({
7172
description = "10% 할인",
7273
startDate = "2025-01-01",
7374
endDate = "2025-12-31",
74-
restaurantType = "CAFE",
75+
restaurantType = StoreType.CAFE,
7576
longitude = 127.0,
7677
latitude = 37.0,
7778
collegeName = "IT",
@@ -118,7 +119,7 @@ class PartnershipRepositoryImplBehaviorSpec : AppBehaviorSpec({
118119
storeName = "Cafe B",
119120
longitude = 127.0,
120121
latitude = 37.0,
121-
restaurantType = "CAFE",
122+
restaurantType = StoreType.CAFE,
122123
partnershipInfos = emptyList(),
123124
)
124125
)

app/src/test/java/com/eatssu/android/data/remote/repository/UserRepositoryImplBehaviorSpec.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import com.eatssu.android.data.model.ApiResult
44
import com.eatssu.android.data.remote.dto.request.ChangeNicknameRequest
55
import com.eatssu.android.data.remote.dto.response.CollegeResponse
66
import com.eatssu.android.data.remote.dto.response.DepartmentResponse
7-
import com.eatssu.android.data.remote.dto.response.MyNickNameResponse
7+
import com.eatssu.android.data.remote.dto.response.MyPageResponse
88
import com.eatssu.android.data.remote.dto.response.UserCollegeDepartmentResponse
99
import com.eatssu.android.data.remote.service.UserService
1010
import com.eatssu.android.test.AppBehaviorSpec
11+
import com.eatssu.common.enums.Provider
1112
import io.kotest.matchers.collections.shouldHaveSize
1213
import io.kotest.matchers.shouldBe
1314
import io.mockk.coEvery
@@ -218,7 +219,7 @@ class UserRepositoryImplBehaviorSpec : AppBehaviorSpec({
218219

219220
`when`("내 닉네임 조회가 성공하지만 nickname이 null이면") {
220221
coEvery { userService.getMyInfo() } returns ApiResult.Success(
221-
MyNickNameResponse(nickname = null, provider = "KAKAO")
222+
MyPageResponse(nickname = null, provider = Provider.KAKAO)
222223
)
223224

224225
then("빈 문자열을 반환한다") {

app/src/test/java/com/eatssu/android/di/network/ApiResultCallAdapterBehaviorSpec.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.eatssu.android.data.remote.dto.response.BaseResponse
55
import com.eatssu.android.test.AppBehaviorSpec
66
import io.kotest.matchers.shouldBe
77
import io.mockk.mockk
8+
import kotlinx.serialization.json.Json
89
import retrofit2.Call
910
import java.lang.reflect.ParameterizedType
1011
import java.lang.reflect.Type
@@ -20,9 +21,11 @@ class ApiResultCallAdapterBehaviorSpec : AppBehaviorSpec({
2021
}
2122

2223
val baseResponseType = parameterizedType(BaseResponse::class.java, String::class.java)
24+
val json = Json { ignoreUnknownKeys = true }
2325
val adapter = ApiResultCallAdapter<String>(
2426
baseResponseType = baseResponseType,
2527
dataType = String::class.java,
28+
json = json,
2629
)
2730

2831
`when`("responseType을 조회하면") {

app/src/test/java/com/eatssu/android/di/network/ApiResultCallAdapterFactoryBehaviorSpec.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import io.kotest.assertions.throwables.shouldThrow
77
import io.kotest.matchers.nulls.shouldBeNull
88
import io.kotest.matchers.shouldBe
99
import io.mockk.mockk
10+
import kotlinx.serialization.json.Json
1011
import retrofit2.Call
1112
import retrofit2.Retrofit
1213
import java.lang.reflect.ParameterizedType
@@ -15,7 +16,9 @@ import java.lang.reflect.Type
1516
class ApiResultCallAdapterFactoryBehaviorSpec : AppBehaviorSpec({
1617

1718
given("ApiResultCallAdapterFactory") {
18-
val factory = ApiResultCallAdapterFactory()
19+
val factory = ApiResultCallAdapterFactory(
20+
Json { ignoreUnknownKeys = true }
21+
)
1922
val retrofit = mockk<Retrofit>()
2023

2124
fun parameterizedType(rawType: Type, vararg args: Type): ParameterizedType =

app/src/test/java/com/eatssu/android/di/network/ApiResultCallBehaviorSpec.kt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.eatssu.android.presentation.base.NetworkErrorEventBus
77
import com.eatssu.android.test.AppBehaviorSpec
88
import io.kotest.matchers.shouldBe
99
import io.mockk.mockk
10+
import kotlinx.serialization.json.Json
1011
import okhttp3.Request
1112
import okhttp3.ResponseBody.Companion.toResponseBody
1213
import okio.Timeout
@@ -60,6 +61,8 @@ private fun <T : Any> ApiResultCall<T>.enqueueAndGet(): ApiResult<T> {
6061
class ApiResultCallBehaviorSpec : AppBehaviorSpec({
6162

6263
given("ApiResultCall") {
64+
val json = Json { ignoreUnknownKeys = true }
65+
6366
`when`("HTTP 에러 + BaseResponse 에러바디 파싱 성공") {
6467
val errorJson = """{"isSuccess":false,"code":1234,"message":"bad request"}"""
6568
val origin = FakeBaseResponseCall<String> {
@@ -69,7 +72,7 @@ class ApiResultCallBehaviorSpec : AppBehaviorSpec({
6972
Response.error(400, errorJson.toResponseBody())
7073
)
7174
}
72-
val apiResultCall = ApiResultCall(origin, String::class.java)
75+
val apiResultCall = ApiResultCall(origin, String::class.java, json)
7376

7477
then("파싱된 code/message로 Failure를 반환한다") {
7578
val result = apiResultCall.enqueueAndGet() as ApiResult.Failure
@@ -86,7 +89,7 @@ class ApiResultCallBehaviorSpec : AppBehaviorSpec({
8689
Response.error(500, "not-json".toResponseBody())
8790
)
8891
}
89-
val apiResultCall = ApiResultCall(origin, String::class.java)
92+
val apiResultCall = ApiResultCall(origin, String::class.java, json)
9093

9194
then("HTTP code와 raw 에러 문자열로 Failure를 반환한다") {
9295
val result = apiResultCall.enqueueAndGet() as ApiResult.Failure
@@ -104,7 +107,7 @@ class ApiResultCallBehaviorSpec : AppBehaviorSpec({
104107
Response.success(null) as Response<BaseResponse<String>>
105108
)
106109
}
107-
val apiResultCall = ApiResultCall(origin, String::class.java)
110+
val apiResultCall = ApiResultCall(origin, String::class.java, json)
108111

109112
then("UnknownError를 반환한다") {
110113
val result = apiResultCall.enqueueAndGet()
@@ -120,7 +123,7 @@ class ApiResultCallBehaviorSpec : AppBehaviorSpec({
120123
Response.success(BaseResponse(isSuccess = false, code = 2001, message = "api fail"))
121124
)
122125
}
123-
val apiResultCall = ApiResultCall(origin, String::class.java)
126+
val apiResultCall = ApiResultCall(origin, String::class.java, json)
124127

125128
then("Failure(code,message)를 반환한다") {
126129
val result = apiResultCall.enqueueAndGet() as ApiResult.Failure
@@ -137,7 +140,7 @@ class ApiResultCallBehaviorSpec : AppBehaviorSpec({
137140
Response.success(BaseResponse<Unit>(isSuccess = true, code = 0, message = "ok", result = null))
138141
)
139142
}
140-
val apiResultCall = ApiResultCall(origin, Unit::class.java as Type)
143+
val apiResultCall = ApiResultCall(origin, Unit::class.java as Type, json)
141144

142145
then("Success(Unit)을 반환한다") {
143146
apiResultCall.enqueueAndGet() shouldBe ApiResult.Success(Unit)
@@ -152,7 +155,7 @@ class ApiResultCallBehaviorSpec : AppBehaviorSpec({
152155
Response.success(BaseResponse(isSuccess = true, code = 0, message = "ok", result = null))
153156
)
154157
}
155-
val apiResultCall = ApiResultCall(origin, String::class.java)
158+
val apiResultCall = ApiResultCall(origin, String::class.java, json)
156159

157160
then("UnknownError를 반환한다") {
158161
val result = apiResultCall.enqueueAndGet()
@@ -168,7 +171,7 @@ class ApiResultCallBehaviorSpec : AppBehaviorSpec({
168171
Response.success(BaseResponse(isSuccess = true, code = 0, message = "ok", result = "payload"))
169172
)
170173
}
171-
val apiResultCall = ApiResultCall(origin, String::class.java)
174+
val apiResultCall = ApiResultCall(origin, String::class.java, json)
172175

173176
then("Success(result)를 반환한다") {
174177
apiResultCall.enqueueAndGet() shouldBe ApiResult.Success("payload")
@@ -181,7 +184,7 @@ class ApiResultCallBehaviorSpec : AppBehaviorSpec({
181184
val retrofitCall = mockk<Call<BaseResponse<String>>>(relaxed = true)
182185
it.onFailure(retrofitCall, io)
183186
}
184-
val apiResultCall = ApiResultCall(origin, String::class.java)
187+
val apiResultCall = ApiResultCall(origin, String::class.java, json)
185188

186189
then("NetworkError를 반환하고 NetworkErrorEventBus를 발행한다") {
187190
NetworkErrorEventBus.networkError.test {
@@ -199,7 +202,7 @@ class ApiResultCallBehaviorSpec : AppBehaviorSpec({
199202
val retrofitCall = mockk<Call<BaseResponse<String>>>(relaxed = true)
200203
it.onFailure(retrofitCall, error)
201204
}
202-
val apiResultCall = ApiResultCall(origin, String::class.java)
205+
val apiResultCall = ApiResultCall(origin, String::class.java, json)
203206

204207
then("UnknownError를 반환한다") {
205208
val result = apiResultCall.enqueueAndGet() as ApiResult.UnknownError

0 commit comments

Comments
 (0)