Skip to content

Commit 2ee7ba0

Browse files
authored
refactor(Android): accept objects in StopDetailsViewModel.mocked (#852)
1 parent aedadb4 commit 2ee7ba0

File tree

2 files changed

+51
-106
lines changed

2 files changed

+51
-106
lines changed

androidApp/src/androidTest/java/com/mbta/tid/mbta_app/android/stopDetails/StopDetailsViewModelTest.kt

Lines changed: 21 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import com.mbta.tid.mbta_app.model.response.VehicleStreamDataResponse
2929
import com.mbta.tid.mbta_app.repositories.IdleScheduleRepository
3030
import com.mbta.tid.mbta_app.repositories.MockErrorBannerStateRepository
3131
import com.mbta.tid.mbta_app.repositories.MockPredictionsRepository
32-
import com.mbta.tid.mbta_app.repositories.MockScheduleRepository
3332
import com.mbta.tid.mbta_app.repositories.MockTripPredictionsRepository
3433
import com.mbta.tid.mbta_app.repositories.MockTripRepository
3534
import com.mbta.tid.mbta_app.repositories.MockVehicleRepository
@@ -59,16 +58,7 @@ class StopDetailsViewModelTest {
5958
objects.schedule {}
6059
objects.trip {}
6160

62-
val predictionsRepo =
63-
MockPredictionsRepository(
64-
connectV2Outcome = ApiResult.Ok(PredictionsByStopJoinResponse(objects))
65-
)
66-
67-
val schedulesRepo = MockScheduleRepository(ScheduleResponse(objects))
68-
69-
val errorBannerRepo = MockErrorBannerStateRepository()
70-
71-
val viewModel = StopDetailsViewModel.mocked(errorBannerRepo, predictionsRepo, schedulesRepo)
61+
val viewModel = StopDetailsViewModel.mocked(objects)
7262

7363
composeTestRule.setContent { LaunchedEffect(Unit) { viewModel.loadStopDetails("stop") } }
7464

@@ -92,15 +82,11 @@ class StopDetailsViewModelTest {
9282

9383
val predictionsRepo =
9484
MockPredictionsRepository(
95-
connectV2Outcome = ApiResult.Ok(PredictionsByStopJoinResponse(objects)),
85+
connectV2Response = PredictionsByStopJoinResponse(objects),
9686
onConnectV2 = { connectCount += 1 }
9787
)
9888

99-
val schedulesRepo = MockScheduleRepository(ScheduleResponse(objects))
100-
101-
val errorBannerRepo = MockErrorBannerStateRepository()
102-
103-
val viewModel = StopDetailsViewModel.mocked(errorBannerRepo, predictionsRepo, schedulesRepo)
89+
val viewModel = StopDetailsViewModel.mocked(objects, predictionsRepo = predictionsRepo)
10490

10591
composeTestRule.setContent { LaunchedEffect(Unit) { viewModel.loadStopDetails("stop") } }
10692

@@ -133,11 +119,7 @@ class StopDetailsViewModelTest {
133119
onConnectV2 = { connectCount += 1 }
134120
)
135121

136-
val schedulesRepo = MockScheduleRepository(ScheduleResponse(objects))
137-
138-
val errorBannerRepo = MockErrorBannerStateRepository()
139-
140-
val viewModel = StopDetailsViewModel.mocked(errorBannerRepo, predictionsRepo, schedulesRepo)
122+
val viewModel = StopDetailsViewModel.mocked(objects, predictionsRepo = predictionsRepo)
141123

142124
composeTestRule.setContent { LaunchedEffect(Unit) { viewModel.loadStopDetails("stop") } }
143125

@@ -175,11 +157,7 @@ class StopDetailsViewModelTest {
175157
onDisconnect = { disconnectCount += 1 }
176158
)
177159

178-
val schedulesRepo = MockScheduleRepository(ScheduleResponse(objects))
179-
180-
val errorBannerRepo = MockErrorBannerStateRepository()
181-
182-
val viewModel = StopDetailsViewModel.mocked(errorBannerRepo, predictionsRepo, schedulesRepo)
160+
val viewModel = StopDetailsViewModel.mocked(objects, predictionsRepo = predictionsRepo)
183161

184162
composeTestRule.setContent { LaunchedEffect(Unit) { viewModel.loadStopDetails("stop") } }
185163

@@ -198,13 +176,7 @@ class StopDetailsViewModelTest {
198176

199177
@Test
200178
fun testSetDepartures() {
201-
val predictionsRepo = MockPredictionsRepository()
202-
203-
val schedulesRepo = MockScheduleRepository()
204-
205-
val errorBannerRepo = MockErrorBannerStateRepository()
206-
207-
val viewModel = StopDetailsViewModel.mocked(errorBannerRepo, predictionsRepo, schedulesRepo)
179+
val viewModel = StopDetailsViewModel.mocked()
208180

209181
assertNull(viewModel.stopDepartures.value)
210182

@@ -227,11 +199,7 @@ class StopDetailsViewModelTest {
227199
onDisconnect = { disconnectCount += 1 }
228200
)
229201

230-
val schedulesRepo = MockScheduleRepository(ScheduleResponse(objects))
231-
232-
val errorBannerRepo = MockErrorBannerStateRepository()
233-
234-
val viewModel = StopDetailsViewModel.mocked(errorBannerRepo, predictionsRepo, schedulesRepo)
202+
val viewModel = StopDetailsViewModel.mocked(objects, predictionsRepo = predictionsRepo)
235203

236204
composeTestRule.setContent {
237205
LaunchedEffect(Unit) {
@@ -713,15 +681,10 @@ class StopDetailsViewModelTest {
713681
onDisconnect = { disconnectCount += 1 }
714682
)
715683

716-
val schedulesRepo = MockScheduleRepository(ScheduleResponse(objects))
717-
718-
val errorBannerRepo = MockErrorBannerStateRepository()
719-
720684
val viewModel =
721685
StopDetailsViewModel.mocked(
722-
errorBannerRepo,
723-
predictionsRepo,
724-
schedulesRepo,
686+
objects,
687+
predictionsRepo = predictionsRepo,
725688
coroutineDispatcher = dispatcher
726689
)
727690

@@ -906,15 +869,10 @@ class StopDetailsViewModelTest {
906869
ApiResult.Ok(VehicleStreamDataResponse(vehicle0))
907870
)
908871

909-
val schedulesRepo = MockScheduleRepository(ScheduleResponse(objects))
910-
911-
val errorBannerRepo = MockErrorBannerStateRepository()
912-
913872
val viewModel =
914873
StopDetailsViewModel.mocked(
915-
errorBannerRepo,
916-
predictionsRepo,
917-
schedulesRepo,
874+
objects,
875+
predictionsRepo = predictionsRepo,
918876
tripPredictionsRepo = tripPredictionsRepo,
919877
vehicleRepo = vehicleRepo,
920878
coroutineDispatcher = dispatcher
@@ -1005,22 +963,7 @@ class StopDetailsViewModelTest {
1005963
val objects = ObjectCollectionBuilder()
1006964
objects.stop { id = "stop1" }
1007965

1008-
val predictionsRepo =
1009-
MockPredictionsRepository(
1010-
connectV2Outcome = ApiResult.Ok(PredictionsByStopJoinResponse(objects))
1011-
)
1012-
1013-
val schedulesRepo = MockScheduleRepository(ScheduleResponse(objects))
1014-
1015-
val errorBannerRepo = MockErrorBannerStateRepository()
1016-
1017-
val viewModel =
1018-
StopDetailsViewModel.mocked(
1019-
errorBannerRepo,
1020-
predictionsRepo,
1021-
schedulesRepo,
1022-
coroutineDispatcher = dispatcher
1023-
)
966+
val viewModel = StopDetailsViewModel.mocked(objects, coroutineDispatcher = dispatcher)
1024967

1025968
val stopFilters = mutableStateOf(StopDetailsPageFilters("stop1", null, null))
1026969

@@ -1059,18 +1002,13 @@ class StopDetailsViewModelTest {
10591002
val objects = ObjectCollectionBuilder()
10601003
objects.stop { id = "stop1" }
10611004

1062-
val emptyPredictionsRepo = MockPredictionsRepository()
10631005
val emptySchedulesRepo = IdleScheduleRepository()
10641006

1065-
val errorBannerRepo = MockErrorBannerStateRepository()
1066-
10671007
val stopFilters = mutableStateOf(StopDetailsPageFilters("stop1", null, null))
10681008

10691009
val viewModelNothingLoaded =
10701010
StopDetailsViewModel.mocked(
1071-
errorBannerRepo,
1072-
emptyPredictionsRepo,
1073-
emptySchedulesRepo,
1011+
schedulesRepo = emptySchedulesRepo,
10741012
coroutineDispatcher = dispatcher
10751013
)
10761014

@@ -1104,17 +1042,13 @@ class StopDetailsViewModelTest {
11041042
objects.stop { id = "stop1" }
11051043

11061044
val emptyPredictionsRepo = MockPredictionsRepository()
1107-
val schedulesRepo = MockScheduleRepository(ScheduleResponse(objects))
1108-
1109-
val errorBannerRepo = MockErrorBannerStateRepository()
11101045

11111046
val stopFilters = mutableStateOf(StopDetailsPageFilters("stop1", null, null))
11121047

11131048
val viewModelSchedulesLoaded =
11141049
StopDetailsViewModel.mocked(
1115-
errorBannerRepo,
1116-
emptyPredictionsRepo,
1117-
schedulesRepo,
1050+
objects,
1051+
predictionsRepo = emptyPredictionsRepo,
11181052
coroutineDispatcher = dispatcher
11191053
)
11201054

@@ -1147,19 +1081,14 @@ class StopDetailsViewModelTest {
11471081
val objects = ObjectCollectionBuilder()
11481082
objects.stop { id = "stop1" }
11491083

1150-
val predictionsRepo =
1151-
MockPredictionsRepository(connectV2Response = PredictionsByStopJoinResponse(objects))
11521084
val emptySchedulesRepo = IdleScheduleRepository()
11531085

1154-
val errorBannerRepo = MockErrorBannerStateRepository()
1155-
11561086
val stopFilters = mutableStateOf(StopDetailsPageFilters("stop1", null, null))
11571087

11581088
val viewModelPredictionsLoaded =
11591089
StopDetailsViewModel.mocked(
1160-
errorBannerRepo,
1161-
predictionsRepo,
1162-
emptySchedulesRepo,
1090+
objects,
1091+
schedulesRepo = emptySchedulesRepo,
11631092
coroutineDispatcher = dispatcher
11641093
)
11651094

@@ -1191,8 +1120,6 @@ class StopDetailsViewModelTest {
11911120
val objects = ObjectCollectionBuilder()
11921121
objects.prediction()
11931122

1194-
val schedulesRepo = MockScheduleRepository(ScheduleResponse(objects))
1195-
11961123
val predictionsOnJoin = PredictionsByStopJoinResponse(objects)
11971124
val predictionsRepo = MockPredictionsRepository({}, {}, {}, null, predictionsOnJoin)
11981125

@@ -1208,9 +1135,9 @@ class StopDetailsViewModelTest {
12081135

12091136
val viewModel =
12101137
StopDetailsViewModel.mocked(
1211-
errorBannerRepo,
1212-
predictionsRepo,
1213-
schedulesRepo,
1138+
objects,
1139+
errorBannerRepo = errorBannerRepo,
1140+
predictionsRepo = predictionsRepo,
12141141
coroutineDispatcher = dispatcher
12151142
)
12161143

@@ -1265,21 +1192,9 @@ class StopDetailsViewModelTest {
12651192

12661193
objects.prediction()
12671194

1268-
val schedulesRepo = MockScheduleRepository(ScheduleResponse(objects))
1269-
1270-
val predictionsOnJoin = PredictionsByStopJoinResponse(objects)
1271-
val predictionsRepo = MockPredictionsRepository({}, {}, {}, null, predictionsOnJoin)
1272-
val errorBannerRepo = MockErrorBannerStateRepository()
1273-
12741195
val stopFilters = mutableStateOf(StopDetailsPageFilters(stop.id, null, null))
12751196

1276-
val viewModel =
1277-
StopDetailsViewModel.mocked(
1278-
errorBannerRepo,
1279-
predictionsRepo,
1280-
schedulesRepo,
1281-
coroutineDispatcher = dispatcher
1282-
)
1197+
val viewModel = StopDetailsViewModel.mocked(objects, coroutineDispatcher = dispatcher)
12831198

12841199
var newStopFilter: StopDetailsFilter? = null
12851200

androidApp/src/main/java/com/mbta/tid/mbta_app/android/stopDetails/StopDetailsViewModel.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.mbta.tid.mbta_app.android.state.ScheduleFetcher
1111
import com.mbta.tid.mbta_app.android.state.StopPredictionsFetcher
1212
import com.mbta.tid.mbta_app.android.util.fetchApi
1313
import com.mbta.tid.mbta_app.android.util.timer
14+
import com.mbta.tid.mbta_app.model.ObjectCollectionBuilder
1415
import com.mbta.tid.mbta_app.model.StopDetailsDepartures
1516
import com.mbta.tid.mbta_app.model.StopDetailsFilter
1617
import com.mbta.tid.mbta_app.model.StopDetailsPageFilters
@@ -23,6 +24,8 @@ import com.mbta.tid.mbta_app.model.response.ApiResult
2324
import com.mbta.tid.mbta_app.model.response.GlobalResponse
2425
import com.mbta.tid.mbta_app.model.response.PredictionsByStopJoinResponse
2526
import com.mbta.tid.mbta_app.model.response.PredictionsByStopMessageResponse
27+
import com.mbta.tid.mbta_app.model.response.PredictionsStreamDataResponse
28+
import com.mbta.tid.mbta_app.model.response.ScheduleResponse
2629
import com.mbta.tid.mbta_app.model.response.TripSchedulesResponse
2730
import com.mbta.tid.mbta_app.model.stopDetailsPage.StopData
2831
import com.mbta.tid.mbta_app.model.stopDetailsPage.TripData
@@ -91,6 +94,33 @@ class StopDetailsViewModel(
9194
coroutineDispatcher
9295
)
9396
}
97+
98+
fun mocked(
99+
objects: ObjectCollectionBuilder,
100+
errorBannerRepo: IErrorBannerStateRepository = MockErrorBannerStateRepository(),
101+
predictionsRepo: IPredictionsRepository =
102+
MockPredictionsRepository(
103+
connectV2Response = PredictionsByStopJoinResponse(objects)
104+
),
105+
schedulesRepo: ISchedulesRepository =
106+
MockScheduleRepository(scheduleResponse = ScheduleResponse(objects)),
107+
settingsRepository: ISettingsRepository = MockSettingsRepository(),
108+
tripPredictionsRepo: ITripPredictionsRepository =
109+
MockTripPredictionsRepository(response = PredictionsStreamDataResponse(objects)),
110+
tripRepo: ITripRepository = MockTripRepository(),
111+
vehicleRepo: IVehicleRepository = MockVehicleRepository(),
112+
coroutineDispatcher: CoroutineDispatcher = Dispatchers.Default
113+
) =
114+
mocked(
115+
errorBannerRepo,
116+
predictionsRepo,
117+
schedulesRepo,
118+
settingsRepository,
119+
tripPredictionsRepo,
120+
tripRepo,
121+
vehicleRepo,
122+
coroutineDispatcher
123+
)
94124
}
95125

96126
private val stopScheduleFetcher = ScheduleFetcher(schedulesRepository, errorBannerRepository)

0 commit comments

Comments
 (0)