Skip to content

Commit 50bdb23

Browse files
committed
[fix] 리뷰 이벤트 식당 파라미터 전달
1 parent e4748fd commit 50bdb23

9 files changed

Lines changed: 52 additions & 17 deletions

File tree

app/src/main/java/com/eatssu/android/presentation/cafeteria/menu/MenuSubAdapter.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class MenuSubAdapter(
4343

4444
val item = dataList[position]
4545
val intent = Intent(binding.root.context, ReviewComposeActivity::class.java)
46+
intent.putExtra("restaurant", restaurant.name)
4647

4748
when (restaurant.menuType) {
4849
MenuType.FIXED -> {

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/ReviewComposeActivity.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import androidx.navigation.compose.rememberNavController
2222
import com.eatssu.android.analytics.ProvideAnalyticsTracker
2323
import com.eatssu.common.analytics.AnalyticsTracker
2424
import com.eatssu.common.enums.MenuType
25+
import com.eatssu.common.enums.Restaurant
2526
import com.eatssu.design_system.theme.EatssuTheme
2627
import com.google.firebase.crashlytics.FirebaseCrashlytics
2728
import dagger.hilt.android.AndroidEntryPoint
@@ -36,6 +37,7 @@ class ReviewComposeActivity : ComponentActivity() {
3637
lateinit var analyticsTracker: AnalyticsTracker
3738

3839
private var menuType: String? = null
40+
private var restaurant: String? = null
3941
private var itemId by Delegates.notNull<Long>()
4042
private lateinit var itemName: String
4143

@@ -48,17 +50,19 @@ class ReviewComposeActivity : ComponentActivity() {
4850
EatssuTheme {
4951
val navHostController = rememberNavController()
5052
val parsedMenuType = MenuType.entries.find { it.name == menuType }
53+
val parsedRestaurant = Restaurant.entries.find { it.name == restaurant }
5154

52-
parsedMenuType?.let { type ->
55+
if (parsedMenuType != null && parsedRestaurant != null) {
5356
ReviewNav(
5457
navHostController = navHostController,
55-
menuType = type,
58+
menuType = parsedMenuType,
59+
restaurant = parsedRestaurant,
5660
menuName = itemName,
5761
id = itemId,
5862
onExit = { finish() }
5963
)
60-
} ?: run {
61-
Timber.e("Invalid or null MenuType received: $menuType")
64+
} else {
65+
Timber.e("Invalid review parameters received: menuType=$menuType, restaurant=$restaurant")
6266
ErrorScreen(
6367
onBackClick = { finish() }
6468
)
@@ -70,6 +74,7 @@ class ReviewComposeActivity : ComponentActivity() {
7074

7175
private fun getIntents() { //todo 추후 변경
7276
menuType = intent.getStringExtra("menuType")
77+
restaurant = intent.getStringExtra("restaurant")
7378
itemId = intent.getLongExtra("itemId", 0)
7479
itemName = intent.getStringExtra("itemName").toString().replace(Regex("[\\[\\]]"), "")
7580

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/ReviewNav.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.eatssu.android.presentation.cafeteria.review.list.ReviewListScreen
1313
import com.eatssu.android.presentation.cafeteria.review.modify.ModifyReviewScreen
1414
import com.eatssu.android.presentation.cafeteria.review.write.WriteReviewScreen
1515
import com.eatssu.common.enums.MenuType
16+
import com.eatssu.common.enums.Restaurant
1617

1718
object ReviewNav {
1819
const val List = "list"
@@ -27,6 +28,7 @@ fun ReviewNav(
2728
navHostController: NavHostController = rememberNavController(),
2829
menuName: String,
2930
menuType: MenuType,
31+
restaurant: Restaurant,
3032
id: Long,
3133
onExit: () -> Unit = {}
3234
) {
@@ -44,6 +46,7 @@ fun ReviewNav(
4446
ReviewListScreen(
4547
menuName = menuName,
4648
menuType = menuType,
49+
restaurant = restaurant,
4750
id = id,
4851
refreshNonce = refreshNonce,
4952
onBack = { onExit() },
@@ -76,6 +79,7 @@ fun ReviewNav(
7679
composable(ReviewNav.Write) { backStackEntry ->
7780
WriteReviewScreen(
7881
menuType = menuType,
82+
restaurant = restaurant,
7983
menuName = menuName,
8084
id = id,
8185
onBack = {

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewListScreen.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import com.eatssu.common.UiState
5959
import com.eatssu.common.UiText
6060
import com.eatssu.common.analytics.ReviewAnalyticsEvent
6161
import com.eatssu.common.enums.MenuType
62+
import com.eatssu.common.enums.Restaurant
6263
import com.eatssu.common.enums.ScreenId
6364
import com.eatssu.common.enums.ToastType
6465
import com.eatssu.design_system.component.DelayedLoadingIndicator
@@ -76,6 +77,7 @@ fun ReviewListScreen(
7677
modifier: Modifier = Modifier,
7778
viewModel: ReviewListViewModel = hiltViewModel(),
7879
menuType: MenuType,
80+
restaurant: Restaurant,
7981
menuName: String,
8082
id: Long,
8183
refreshNonce: Long = 0L,
@@ -125,6 +127,7 @@ fun ReviewListScreen(
125127
reviewPagingItems = reviewPagingItems,
126128
modifier = modifier,
127129
menuName = menuName,
130+
restaurant = restaurant,
128131
onBack = onBack,
129132
onReviewWriteButtonClick = onWriteButtonClick,
130133
onModifyClick = onModifyClick,
@@ -138,6 +141,7 @@ internal fun ReviewListScreen(
138141
reviewPagingItems: LazyPagingItems<Review>,
139142
modifier: Modifier = Modifier,
140143
menuName: String,
144+
restaurant: Restaurant,
141145
onBack: () -> Unit = {},
142146
onReviewWriteButtonClick: () -> Unit,
143147
onModifyClick: (Review) -> Unit,
@@ -192,7 +196,7 @@ internal fun ReviewListScreen(
192196
text = stringResource(R.string.review_write),
193197
onClick = {
194198
onReviewWriteButtonClick()
195-
analyticsTracker.track(ReviewAnalyticsEvent.WriteClicked)
199+
analyticsTracker.track(ReviewAnalyticsEvent.WriteClicked(restaurant))
196200
},
197201
modifier = Modifier
198202
.padding(24.dp)
@@ -628,6 +632,7 @@ fun ReviewListPreview() {
628632
EatssuTheme {
629633
ReviewListScreen(
630634
menuName = "소고기+닭고기+돼지고기+양고기+오리고기",
635+
restaurant = Restaurant.HAKSIK,
631636
onReviewWriteButtonClick = {},
632637
onModifyClick = {},
633638
onDeleteClick = {},
@@ -663,6 +668,7 @@ fun ReviewListLoadingPreview() {
663668
EatssuTheme {
664669
ReviewListScreen(
665670
menuName = "소고기+닭고기+돼지고기+양고기+오리고기",
671+
restaurant = Restaurant.HAKSIK,
666672
onReviewWriteButtonClick = {},
667673
onModifyClick = {},
668674
onDeleteClick = {},
@@ -698,6 +704,7 @@ fun ReviewListEmptyPreview() {
698704
EatssuTheme {
699705
ReviewListScreen(
700706
menuName = "소고기+닭고기+돼지고기+양고기+오리고기+닭고기+돼지고기+양고기",
707+
restaurant = Restaurant.HAKSIK,
701708
onReviewWriteButtonClick = {},
702709
onModifyClick = {},
703710
onDeleteClick = {},
@@ -733,6 +740,7 @@ fun ReviewListErrorPreview() {
733740
EatssuTheme {
734741
ReviewListScreen(
735742
menuName = "소고기+닭고기+돼지고기+양고기+오리고기",
743+
restaurant = Restaurant.HAKSIK,
736744
onReviewWriteButtonClick = {},
737745
onModifyClick = {},
738746
onDeleteClick = {},

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewScreen.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import com.eatssu.android.presentation.util.showToast
5050
import com.eatssu.common.UiEvent
5151
import com.eatssu.common.UiState
5252
import com.eatssu.common.enums.MenuType
53+
import com.eatssu.common.enums.Restaurant
5354
import com.eatssu.common.enums.ScreenId
5455
import com.eatssu.design_system.component.CloseTopBar
5556
import com.eatssu.design_system.component.EatSsuButton
@@ -72,6 +73,7 @@ fun WriteReviewScreen(
7273
viewModel: WriteReviewViewModel = hiltViewModel(),
7374
menuName: String,
7475
menuType: MenuType,
76+
restaurant: Restaurant,
7577
id: Long,
7678
onBack: () -> Unit,
7779
) {
@@ -121,7 +123,7 @@ fun WriteReviewScreen(
121123
onToggleLike = viewModel::toggleLike,
122124
onImageSelect = { galleryLauncher.launch("image/*") },
123125
onImageDelete = { viewModel.setSelectedImage(null) },
124-
onSubmit = { viewModel.postReview(menuType, id, context) }
126+
onSubmit = { viewModel.postReview(menuType, restaurant, id, context) }
125127
)
126128
}
127129

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewViewModel.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.eatssu.common.UiState
1515
import com.eatssu.common.UiText
1616
import com.eatssu.common.analytics.ReviewAnalyticsEvent
1717
import com.eatssu.common.enums.MenuType
18+
import com.eatssu.common.enums.Restaurant
1819
import com.eatssu.common.enums.ToastType
1920
import dagger.hilt.android.lifecycle.HiltViewModel
2021
import id.zelory.compressor.Compressor
@@ -88,6 +89,7 @@ class WriteReviewViewModel @Inject constructor(
8889

8990
fun postReview(
9091
menuType: MenuType,
92+
restaurant: Restaurant,
9193
itemId: Long,
9294
context: Context,
9395
) {
@@ -167,6 +169,7 @@ class WriteReviewViewModel @Inject constructor(
167169
rating = editing.rating.toLong(),
168170
likes = editing.likedMenuIds.size.toLong(),
169171
photoAttached = editing.selectedImageUri != null,
172+
restaurant = restaurant,
170173
),
171174
)
172175

app/src/test/java/com/eatssu/android/analytics/DefaultAnalyticsTrackerTest.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.eatssu.common.analytics.AnalyticsIdentity
55
import com.eatssu.common.analytics.MapAnalyticsEvent
66
import com.eatssu.common.analytics.AnalyticsTracker
77
import com.eatssu.common.analytics.ReviewAnalyticsEvent
8+
import com.eatssu.common.enums.Restaurant
89
import org.junit.Assert.assertEquals
910
import org.junit.Assert.assertTrue
1011
import org.junit.Test
@@ -16,7 +17,12 @@ class DefaultAnalyticsTrackerTest {
1617
val firebaseTracker = FakeAnalyticsTracker(id = "firebase")
1718
val postHogTracker = FakeAnalyticsTracker(id = "posthog")
1819
val analyticsTracker = DefaultAnalyticsTracker(setOf(firebaseTracker, postHogTracker))
19-
val event = ReviewAnalyticsEvent.Completed(rating = 5L, likes = 2L, photoAttached = true)
20+
val event = ReviewAnalyticsEvent.Completed(
21+
rating = 5L,
22+
likes = 2L,
23+
photoAttached = true,
24+
restaurant = Restaurant.HAKSIK,
25+
)
2026

2127
analyticsTracker.track(event)
2228

app/src/test/java/com/eatssu/android/analytics/FirebaseAnalyticsTrackerTest.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.eatssu.android.analytics
22

33
import com.eatssu.common.analytics.ReviewAnalyticsEvent
44
import com.eatssu.common.analytics.ScreenViewEvent
5+
import com.eatssu.common.enums.Restaurant
56
import com.eatssu.common.enums.ScreenId
67
import org.junit.Assert.assertEquals
78
import org.junit.Test
@@ -26,19 +27,21 @@ class FirebaseAnalyticsTrackerTest {
2627
}
2728

2829
@Test
29-
fun `review completion payload keeps firebase compatible boolean value`() {
30+
fun `review completion payload keeps restaurant and photo value`() {
3031
val payload = ReviewAnalyticsEvent.Completed(
3132
rating = 5L,
3233
likes = 2L,
3334
photoAttached = true,
35+
restaurant = Restaurant.HAKSIK,
3436
).toPayload()
3537

3638
assertEquals("complete_review_v2", payload.eventName)
3739
assertEquals(
3840
mapOf(
3941
"rating" to 5L,
4042
"likes" to 2L,
41-
"photo_attached" to true,
43+
"photo_attached" to 1,
44+
"restaurants" to "haksik",
4245
),
4346
payload.properties,
4447
)

app/src/test/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewViewModelBehaviorSpec.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import com.eatssu.common.analytics.AnalyticsTracker
1717
import com.eatssu.common.analytics.ReviewAnalyticsEvent
1818
import com.eatssu.common.UiState
1919
import com.eatssu.common.enums.MenuType
20+
import com.eatssu.common.enums.Restaurant
2021
import com.eatssu.common.enums.ToastType
2122
import id.zelory.compressor.Compressor
2223
import io.kotest.matchers.shouldBe
@@ -95,7 +96,7 @@ class WriteReviewViewModelBehaviorSpec : AppBehaviorSpec({
9596
viewModel.loadMenuList(MenuType.FIXED, 1L, "돈가스")
9697
advanceUntilIdle()
9798

98-
viewModel.postReview(MenuType.FIXED, 1L, mockk(relaxed = true))
99+
viewModel.postReview(MenuType.FIXED, Restaurant.HAKSIK, 1L, mockk(relaxed = true))
99100
advanceUntilIdle()
100101

101102
coVerify(exactly = 0) {
@@ -110,7 +111,7 @@ class WriteReviewViewModelBehaviorSpec : AppBehaviorSpec({
110111

111112
then("아무 동작도 수행하지 않는다") {
112113
runTest {
113-
viewModel.postReview(MenuType.FIXED, 1L, mockk(relaxed = true))
114+
viewModel.postReview(MenuType.FIXED, Restaurant.HAKSIK, 1L, mockk(relaxed = true))
114115
advanceUntilIdle()
115116

116117
viewModel.uiState.value shouldBe UiState.Init
@@ -159,7 +160,7 @@ class WriteReviewViewModelBehaviorSpec : AppBehaviorSpec({
159160
viewModel.onContentChanged("good")
160161

161162
viewModel.uiEvent.test {
162-
viewModel.postReview(MenuType.FIXED, 1L, mockk(relaxed = true))
163+
viewModel.postReview(MenuType.FIXED, Restaurant.HAKSIK, 1L, mockk(relaxed = true))
163164
advanceUntilIdle()
164165

165166
expectToast(R.string.toast_review_write_success, ToastType.SUCCESS)
@@ -170,6 +171,7 @@ class WriteReviewViewModelBehaviorSpec : AppBehaviorSpec({
170171
rating = 5,
171172
likes = 0,
172173
photoAttached = false,
174+
restaurant = Restaurant.HAKSIK,
173175
),
174176
)
175177
}
@@ -207,7 +209,7 @@ class WriteReviewViewModelBehaviorSpec : AppBehaviorSpec({
207209
clearMocks(writeReviewUseCase, answers = false, recordedCalls = true)
208210

209211
viewModel.uiEvent.test {
210-
viewModel.postReview(MenuType.FIXED, 1L, context)
212+
viewModel.postReview(MenuType.FIXED, Restaurant.HAKSIK, 1L, context)
211213
advanceUntilIdle()
212214

213215
expectToast(R.string.toast_image_upload_success, ToastType.SUCCESS)
@@ -219,6 +221,7 @@ class WriteReviewViewModelBehaviorSpec : AppBehaviorSpec({
219221
rating = 4,
220222
likes = 0,
221223
photoAttached = true,
224+
restaurant = Restaurant.HAKSIK,
222225
),
223226
)
224227
}
@@ -252,7 +255,7 @@ class WriteReviewViewModelBehaviorSpec : AppBehaviorSpec({
252255
viewModel.setSelectedImage(uri)
253256

254257
viewModel.uiEvent.test {
255-
viewModel.postReview(MenuType.FIXED, 1L, context)
258+
viewModel.postReview(MenuType.FIXED, Restaurant.HAKSIK, 1L, context)
256259
advanceUntilIdle()
257260

258261
expectToast(R.string.toast_image_upload_failed, ToastType.ERROR)
@@ -286,7 +289,7 @@ class WriteReviewViewModelBehaviorSpec : AppBehaviorSpec({
286289
viewModel.setSelectedImage(uri)
287290

288291
viewModel.uiEvent.test {
289-
viewModel.postReview(MenuType.FIXED, 1L, context)
292+
viewModel.postReview(MenuType.FIXED, Restaurant.HAKSIK, 1L, context)
290293
advanceUntilIdle()
291294

292295
expectToast(R.string.toast_image_compress_failed, ToastType.ERROR)
@@ -315,7 +318,7 @@ class WriteReviewViewModelBehaviorSpec : AppBehaviorSpec({
315318
viewModel.setSelectedImage(uri)
316319

317320
viewModel.uiEvent.test {
318-
viewModel.postReview(MenuType.FIXED, 1L, context)
321+
viewModel.postReview(MenuType.FIXED, Restaurant.HAKSIK, 1L, context)
319322
advanceUntilIdle()
320323

321324
expectToast(R.string.toast_image_upload_failed, ToastType.ERROR)
@@ -336,7 +339,7 @@ class WriteReviewViewModelBehaviorSpec : AppBehaviorSpec({
336339
viewModel.onRatingChanged(3)
337340

338341
viewModel.uiEvent.test {
339-
viewModel.postReview(MenuType.FIXED, 1L, mockk(relaxed = true))
342+
viewModel.postReview(MenuType.FIXED, Restaurant.HAKSIK, 1L, mockk(relaxed = true))
340343
advanceUntilIdle()
341344

342345
viewModel.uiState.value.successDataAs<WriteReviewState.Editing>()

0 commit comments

Comments
 (0)