Rozdziel załadunek i dodaj kalendarz urlopów
This commit is contained in:
@@ -5,6 +5,8 @@ import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
import pl.firmatpp.kierowca.data.model.DriverLeaveCalendarDriverDto
|
||||
import pl.firmatpp.kierowca.data.model.DriverLeaveCalendarEntryDto
|
||||
|
||||
class DriverLeaveRequestUiRulesTest {
|
||||
@Test
|
||||
@@ -48,4 +50,40 @@ class DriverLeaveRequestUiRulesTest {
|
||||
assertFalse(DriverLeaveRequestUiRules.canCancel(status = "approved", dateFrom = yesterday))
|
||||
assertFalse(DriverLeaveRequestUiRules.canCancel(status = "rejected", dateFrom = tomorrow))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun findsCalendarEntriesThatOverlapSelectedDate() {
|
||||
val entries = listOf(
|
||||
calendarEntry(id = "week", dateFrom = "2026-08-03", dateTo = "2026-08-09"),
|
||||
calendarEntry(id = "single-day", dateFrom = "2026-08-05", dateTo = "2026-08-05"),
|
||||
calendarEntry(id = "outside", dateFrom = "2026-08-10", dateTo = "2026-08-12"),
|
||||
)
|
||||
|
||||
val matching = DriverLeaveRequestUiRules.calendarEntriesForDate(entries, LocalDate.parse("2026-08-05"))
|
||||
|
||||
assertEquals(listOf("week", "single-day"), matching.map { it.id })
|
||||
}
|
||||
|
||||
@Test
|
||||
fun normalizesPhoneNumberIntoDialerUri() {
|
||||
assertEquals("tel:+48600700800", DriverLeaveRequestUiRules.phoneDialUri("+48 600 700 800"))
|
||||
assertEquals("tel:+48600700800", DriverLeaveRequestUiRules.phoneDialUri("0048 600 700 800"))
|
||||
assertEquals(null, DriverLeaveRequestUiRules.phoneDialUri(null))
|
||||
assertEquals(null, DriverLeaveRequestUiRules.phoneDialUri(" "))
|
||||
}
|
||||
|
||||
private fun calendarEntry(id: String, dateFrom: String, dateTo: String): DriverLeaveCalendarEntryDto =
|
||||
DriverLeaveCalendarEntryDto(
|
||||
id = id,
|
||||
dateFrom = dateFrom,
|
||||
dateTo = dateTo,
|
||||
type = "URLOP",
|
||||
typeLabel = "Urlop",
|
||||
status = "approved",
|
||||
driver = DriverLeaveCalendarDriverDto(
|
||||
id = "driver-$id",
|
||||
displayName = "Kierowca $id",
|
||||
phoneNumber = "+48 600 700 800",
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ class DriverRouteProjectionTest {
|
||||
|
||||
assertEquals("ZAKOŃCZONA", projection.route.status)
|
||||
assertEquals(11.8, projection.route.unloadingWeight)
|
||||
assertEquals(RouteFlowStepState.NeedsAttention, steps[2].state)
|
||||
assertEquals(RouteFlowStepState.NeedsAttention, steps[3].state)
|
||||
assertEquals("Kurs wymaga obsługi. Dane wpisane w telefonie zostały zachowane.", callout?.text)
|
||||
assertTrue(callout?.isConflict ?: false)
|
||||
}
|
||||
@@ -133,7 +133,7 @@ class DriverRouteProjectionTest {
|
||||
|
||||
assertEquals("W TRAKCIE", projection.route.status)
|
||||
assertEquals(12.5, projection.route.loadingWeight)
|
||||
assertEquals(RouteFlowStepState.NeedsAttention, steps[0].state)
|
||||
assertEquals(RouteFlowStepState.NeedsAttention, steps[1].state)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -295,14 +295,27 @@ class DriverUiRulesTest {
|
||||
val steps = routeFlowSteps(route, emptyList())
|
||||
val action = routeLifecyclePrimaryAction(route, "2026-06-30", today)
|
||||
|
||||
assertEquals(listOf("Załadunek", "W trasie", "Rozładunek"), steps.map { it.title })
|
||||
assertEquals(listOf("Zdjęcia załadunku", "Waga załadunku", "W trasie", "Rozładunek"), steps.map { it.title })
|
||||
assertEquals(RouteFlowStepState.Todo, steps[0].state)
|
||||
assertEquals(RouteFlowStepState.Todo, steps[1].state)
|
||||
assertEquals(RouteFlowStepState.Todo, steps[2].state)
|
||||
assertEquals(RouteFlowStepState.Todo, steps[3].state)
|
||||
assertEquals("Rozpocznij kurs", action?.label)
|
||||
assertEquals(RouteLifecycleAction.Start, action?.action)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun plannedRouteWithLoadingPhotoShowsOnlyPhotoStepComplete() {
|
||||
val route = route(status = "ZAPLANOWANA", photos = listOf(photo("loading-1", stage = "loading")))
|
||||
|
||||
val steps = routeFlowSteps(route, emptyList())
|
||||
|
||||
assertEquals(RouteFlowStepState.LocalComplete, steps[0].state)
|
||||
assertEquals(RouteFlowStepState.Todo, steps[1].state)
|
||||
assertEquals(RouteFlowStepState.Todo, steps[2].state)
|
||||
assertEquals(RouteFlowStepState.Todo, steps[3].state)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun activeRouteShowsTransitStateAndFinishAction() {
|
||||
val route = route(status = "W TRAKCIE", loadingWeight = 12.5)
|
||||
@@ -311,8 +324,9 @@ class DriverUiRulesTest {
|
||||
val action = routeLifecyclePrimaryAction(route, "2026-06-30", today)
|
||||
|
||||
assertEquals(RouteFlowStepState.Confirmed, steps[0].state)
|
||||
assertEquals(RouteFlowStepState.LocalComplete, steps[1].state)
|
||||
assertEquals(RouteFlowStepState.Todo, steps[2].state)
|
||||
assertEquals(RouteFlowStepState.Confirmed, steps[1].state)
|
||||
assertEquals(RouteFlowStepState.LocalComplete, steps[2].state)
|
||||
assertEquals(RouteFlowStepState.Todo, steps[3].state)
|
||||
assertEquals("Zakończ kurs", action?.label)
|
||||
assertEquals(RouteLifecycleAction.Finish, action?.action)
|
||||
}
|
||||
@@ -327,6 +341,7 @@ class DriverUiRulesTest {
|
||||
assertEquals(RouteFlowStepState.Confirmed, steps[0].state)
|
||||
assertEquals(RouteFlowStepState.Confirmed, steps[1].state)
|
||||
assertEquals(RouteFlowStepState.Confirmed, steps[2].state)
|
||||
assertEquals(RouteFlowStepState.Confirmed, steps[3].state)
|
||||
assertEquals(null, action)
|
||||
}
|
||||
|
||||
@@ -337,7 +352,7 @@ class DriverUiRulesTest {
|
||||
val steps = routeFlowSteps(route(status = "W TRAKCIE", loadingWeight = 12.5), actions)
|
||||
val callout = routeSyncCallout(actions)
|
||||
|
||||
assertEquals(RouteFlowStepState.Syncing, steps[0].state)
|
||||
assertEquals(RouteFlowStepState.Syncing, steps[1].state)
|
||||
assertEquals("Czekam na wysłanie zdjęć etapu, potem wyślę zmianę statusu.", callout?.text)
|
||||
assertFalse(callout?.isConflict ?: true)
|
||||
}
|
||||
@@ -349,7 +364,7 @@ class DriverUiRulesTest {
|
||||
val steps = routeFlowSteps(route(status = "W TRAKCIE", loadingWeight = 12.5), actions)
|
||||
val callout = routeSyncCallout(actions)
|
||||
|
||||
assertEquals(RouteFlowStepState.NeedsAttention, steps[2].state)
|
||||
assertEquals(RouteFlowStepState.NeedsAttention, steps[3].state)
|
||||
assertEquals("Kurs wymaga obsługi. Dane wpisane w telefonie zostały zachowane.", callout?.text)
|
||||
assertTrue(callout?.isConflict ?: false)
|
||||
}
|
||||
@@ -362,6 +377,28 @@ class DriverUiRulesTest {
|
||||
assertEquals(null, routeStageSubmitBlocker("12,5", serverPhotoCount = 0, localUploadCount = 1))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun loadingPhotosStepRequiresAtLeastOneLoadingPhotoBeforeWeightStep() {
|
||||
assertEquals(
|
||||
"Dodaj co najmniej jedno zdjęcie załadunku.",
|
||||
loadingPhotosSubmitBlocker(serverPhotoCount = 0, localUploadCount = 0),
|
||||
)
|
||||
assertEquals(null, loadingPhotosSubmitBlocker(serverPhotoCount = 1, localUploadCount = 0))
|
||||
assertEquals(null, loadingPhotosSubmitBlocker(serverPhotoCount = 0, localUploadCount = 1))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun loadingWeightStepRequiresPositiveWeightAndPreviousLoadingPhoto() {
|
||||
assertEquals("Podaj wagę.", loadingWeightSubmitBlocker("", serverPhotoCount = 1, localUploadCount = 0))
|
||||
assertEquals("Podaj poprawną wagę.", loadingWeightSubmitBlocker("abc", serverPhotoCount = 1, localUploadCount = 0))
|
||||
assertEquals("Waga musi być większa od zera.", loadingWeightSubmitBlocker("0", serverPhotoCount = 1, localUploadCount = 0))
|
||||
assertEquals(
|
||||
"Dodaj co najmniej jedno zdjęcie załadunku.",
|
||||
loadingWeightSubmitBlocker("12,5", serverPhotoCount = 0, localUploadCount = 0),
|
||||
)
|
||||
assertEquals(null, loadingWeightSubmitBlocker("12,5", serverPhotoCount = 0, localUploadCount = 1))
|
||||
}
|
||||
|
||||
private fun route(
|
||||
status: String,
|
||||
loadingWeight: Double? = null,
|
||||
|
||||
Reference in New Issue
Block a user