Skip to content

Commit 2dfa93f

Browse files
feat: add travel mode in ActivitiesMapScreen (#263)
* feat: add travel mode in ActivitiesMapScreen * test: add test for travel mode in ActivitiesMapScreen * feat: add RouteDetails.EMPTY when failure * docs: add description of helper function * feat: add better description for gps Button --------- Co-authored-by: Stefan <46031448+StefanPetersTM@users.noreply.github.com>
1 parent 7f1e99c commit 2dfa93f

File tree

3 files changed

+416
-40
lines changed

3 files changed

+416
-40
lines changed

app/src/androidTest/java/com/github/se/travelpouch/ui/dashboard/map/ActivitiesMapScreenTest.kt

Lines changed: 89 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.github.se.travelpouch.ui.dashboard.map
22

33
import android.Manifest
44
import android.content.pm.PackageManager
5+
import androidx.compose.ui.test.assert
56
import androidx.compose.ui.test.assertTextEquals
67
import androidx.compose.ui.test.junit4.createComposeRule
78
import androidx.compose.ui.test.onNodeWithTag
@@ -182,7 +183,13 @@ class ActivitiesMapScreenTest {
182183

183184
@Test
184185
fun testActivityDetailsContentDisplaysCorrectDetails() {
185-
composeTestRule.setContent { ActivityDetailsContent(activity = listOfActivities[0]) }
186+
composeTestRule.setContent {
187+
ActivityDetailsContent(
188+
activity = listOfActivities[0], // Pass the first activity
189+
isGPSAvailable = true, // Mock GPS availability
190+
onShowPathGPS = {} // Provide a no-op lambda for the callback
191+
)
192+
}
186193

187194
// Verify title
188195
composeTestRule.onNodeWithTag("ActivityTitle").assertExists().assertTextEquals("Team Meeting")
@@ -218,17 +225,19 @@ class ActivitiesMapScreenTest {
218225
listOf(
219226
listOf(
220227
LatLng(48.8566, 2.3522),
221-
LatLng(48.8570, 2.3530)) // Mock GPS to activity route
222-
)),
223-
selectedActivity = listOfActivities[0] // Mock selected activity
228+
LatLng(48.8570, 2.3530) // Mock GPS to activity route
229+
))),
230+
selectedActivity = listOfActivities[0], // Mock selected activity
231+
travelMode = "walking", // Mock travel mode
232+
onTravelModeSelected = {} // No-op lambda for testing
224233
)
225234
}
226235

227236
// Verify title
228237
composeTestRule
229238
.onNodeWithTag("RouteDetailsTitle_Gps")
230239
.assertExists()
231-
.assertTextEquals("Your current Location")
240+
.assertTextEquals("Your Current Location")
232241

233242
// Verify distance
234243
composeTestRule
@@ -265,8 +274,10 @@ class ActivitiesMapScreenTest {
265274
listOf(LatLng(48.8566, 2.3522), LatLng(48.8570, 2.3530)), // Mock leg 1
266275
listOf(LatLng(48.8570, 2.3530), LatLng(49.8566, 2.3522)) // Mock leg 2
267276
)),
268-
legIndex = 0,
269-
activities = listOfActivities)
277+
legIndex = 0, // Testing the first leg
278+
activities = listOfActivities,
279+
travelMode = "walking" // Mock travel mode
280+
)
270281
}
271282

272283
// Verify title (start activity)
@@ -293,6 +304,77 @@ class ActivitiesMapScreenTest {
293304
.assertExists()
294305
.assertTextEquals("Client Presentation")
295306
}
307+
308+
@Test
309+
fun testTravelModeButtonActivities() {
310+
var showPathsState = false
311+
var selectedTravelMode = "walking"
312+
313+
composeTestRule.setContent {
314+
TravelModeButtonActivities(
315+
showPaths = showPathsState,
316+
onTogglePaths = { showPathsState = !showPathsState },
317+
travelMode = selectedTravelMode,
318+
onTravelModeChange = { mode -> selectedTravelMode = mode })
319+
}
320+
321+
// Verify initial state of toggle button
322+
composeTestRule.onNodeWithTag("ToggleModeButtonActivities").assertExists()
323+
324+
// Click the toggle button to enable paths
325+
composeTestRule.onNodeWithTag("ToggleModeButtonActivities").performClick()
326+
assert(showPathsState) // Verify state is updated
327+
328+
// Verify "Walking Mode" button exists
329+
composeTestRule.onNodeWithTag("WalkingModeButtonActivities").assertExists()
330+
331+
// Switch to "Driving Mode"
332+
composeTestRule.onNodeWithTag("WalkingModeButtonActivities").performClick()
333+
assert(selectedTravelMode == "walking") // Verify state is updated
334+
335+
// Verify "Driving Mode" button exists
336+
composeTestRule.onNodeWithTag("DrivingModeButtonActivities").assertExists()
337+
338+
// Switch to "Driving Mode"
339+
composeTestRule.onNodeWithTag("DrivingModeButtonActivities").performClick()
340+
assert(selectedTravelMode == "driving") // Verify state is updated
341+
342+
// Verify "Bicycling Mode" button exists
343+
composeTestRule.onNodeWithTag("BicyclingModeButtonActivities").assertExists()
344+
345+
// Switch to "Bicycling Mode"
346+
composeTestRule.onNodeWithTag("BicyclingModeButtonActivities").performClick()
347+
assert(selectedTravelMode == "bicycling") // Verify state is updated
348+
}
349+
350+
@Test
351+
fun testTravelModesGPS() {
352+
var selectedMode = "walking"
353+
354+
composeTestRule.setContent {
355+
TravelModesGPS(selectedMode = selectedMode, onModeSelected = { mode -> selectedMode = mode })
356+
}
357+
358+
// Switch to "walking" mode
359+
composeTestRule.onNodeWithTag("WalkingModeButtonGPS").assertExists()
360+
composeTestRule.onNodeWithTag("WalkingModeButtonGPS").performClick()
361+
assert(selectedMode == "walking") // Verify initial mode
362+
363+
// Switch to "Car" mode
364+
composeTestRule.onNodeWithTag("DrivingModeButtonGPS").assertExists()
365+
composeTestRule.onNodeWithTag("DrivingModeButtonGPS").performClick()
366+
assert(selectedMode == "driving") // Verify mode is updated
367+
368+
// Switch to "Bicycle" mode
369+
composeTestRule.onNodeWithTag("BicyclingModeButtonGPS").assertExists()
370+
composeTestRule.onNodeWithTag("BicyclingModeButtonGPS").performClick()
371+
assert(selectedMode == "bicycling") // Verify mode is updated
372+
373+
// Switch to "None" mode
374+
composeTestRule.onNodeWithTag("NoneModeButtonGPS").assertExists()
375+
composeTestRule.onNodeWithTag("NoneModeButtonGPS").performClick()
376+
assert(selectedMode == "None") // Verify mode is updated
377+
}
296378
}
297379

298380
fun createTimestamp(dateString: String, format: String = "dd/MM/yyyy HH:mm"): Timestamp {

app/src/main/java/com/github/se/travelpouch/model/activity/map/DirectionsViewModel.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,12 @@ class DirectionsViewModel(private val repository: DirectionsRepositoryInterface)
161161
targetStateFlow.value = routeDetails
162162
} else {
163163
Log.e("DirectionsViewModel", "Failed to extract route details")
164+
targetStateFlow.value = RouteDetails.EMPTY
164165
}
165166
},
166167
onFailure = { exception ->
167168
Log.e("DirectionsViewModel", "Failed to fetch directions", exception)
169+
targetStateFlow.value = RouteDetails.EMPTY
168170
})
169171
}
170172
}

0 commit comments

Comments
 (0)