Uprość obsługę urlopów w aplikacji kierowcy
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
package pl.firmatpp.kierowca.data
|
||||
|
||||
import com.google.gson.Gson
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
import pl.firmatpp.kierowca.data.model.DriverLeaveRequestDto
|
||||
import pl.firmatpp.kierowca.data.model.LeaveSummaryResponse
|
||||
|
||||
class DriverLeaveApiContractTest {
|
||||
private val gson = Gson()
|
||||
|
||||
@Test
|
||||
fun parsesNewLeaveSummaryWithoutTechnicalFallbacks() {
|
||||
val response = gson.fromJson(
|
||||
"""
|
||||
{
|
||||
"data": {
|
||||
"dailyNormMinutes": 480,
|
||||
"balanceConfigured": true,
|
||||
"overdueQuantity": 480,
|
||||
"pools": [{
|
||||
"id": 7,
|
||||
"poolCode": "ANNUAL",
|
||||
"year": 2026,
|
||||
"unit": "minutes",
|
||||
"availableQuantity": 7680,
|
||||
"reservedQuantity": 960,
|
||||
"usedQuantity": 960,
|
||||
"grantedQuantity": 9600,
|
||||
"status": "active"
|
||||
}],
|
||||
"availableTypes": [{
|
||||
"value": "URLOP",
|
||||
"code": "ANNUAL",
|
||||
"label": "Urlop wypoczynkowy",
|
||||
"requestModes": ["days", "hours"],
|
||||
"requiredFields": [],
|
||||
"requiredDocuments": [],
|
||||
"fieldOptions": {},
|
||||
"description": "Urlop rozliczany według grafiku."
|
||||
}]
|
||||
}
|
||||
}
|
||||
""".trimIndent(),
|
||||
LeaveSummaryResponse::class.java,
|
||||
)
|
||||
|
||||
assertEquals(480, response.data.dailyNormMinutes)
|
||||
assertEquals(7680, response.data.pools.single().availableQuantity)
|
||||
assertEquals("URLOP", response.data.availableTypes.single().value)
|
||||
assertEquals("ANNUAL", response.data.availableTypes.single().code)
|
||||
assertTrue("hours" in response.data.availableTypes.single().requestModes)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun parsesSensitiveOwnRequestDetailsAsFormValues() {
|
||||
val request = gson.fromJson(
|
||||
"""
|
||||
{
|
||||
"id": "12",
|
||||
"dateFrom": "2026-08-03",
|
||||
"dateTo": "2026-08-03",
|
||||
"type": "WOLNE",
|
||||
"ruleCode": "CHILD_CARE_14",
|
||||
"requestMode": "days",
|
||||
"requestedQuantity": 480,
|
||||
"details": {
|
||||
"childrenBornCount": 1,
|
||||
"childBirthDate": "2020-05-12"
|
||||
},
|
||||
"status": "pending",
|
||||
"missingDocumentTypes": ["parent_declaration"]
|
||||
}
|
||||
""".trimIndent(),
|
||||
DriverLeaveRequestDto::class.java,
|
||||
)
|
||||
|
||||
assertEquals("1", request.details["childrenBornCount"])
|
||||
assertEquals("2020-05-12", request.details["childBirthDate"])
|
||||
assertEquals(listOf("parent_declaration"), request.missingDocumentTypes)
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,8 @@ import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
import pl.firmatpp.kierowca.data.model.DriverLeaveCalendarDriverDto
|
||||
import pl.firmatpp.kierowca.data.model.DriverLeaveCalendarEntryDto
|
||||
import pl.firmatpp.kierowca.data.model.DriverLeavePoolDto
|
||||
import pl.firmatpp.kierowca.data.model.DriverLeaveSummaryDto
|
||||
|
||||
class DriverLeaveRequestUiRulesTest {
|
||||
@Test
|
||||
@@ -18,15 +20,35 @@ class DriverLeaveRequestUiRulesTest {
|
||||
|
||||
@Test
|
||||
fun exposesPolishStatusLabels() {
|
||||
assertEquals("Oczekuje", DriverLeaveRequestUiRules.statusLabel("pending"))
|
||||
assertEquals("Zatwierdzony", DriverLeaveRequestUiRules.statusLabel("approved"))
|
||||
assertEquals("Czeka na decyzję", DriverLeaveRequestUiRules.statusLabel("pending"))
|
||||
assertEquals("Zaakceptowany", DriverLeaveRequestUiRules.statusLabel("approved"))
|
||||
assertEquals("Odrzucony", DriverLeaveRequestUiRules.statusLabel("rejected"))
|
||||
assertEquals("Anulowanie do decyzji", DriverLeaveRequestUiRules.statusLabel("cancel_requested"))
|
||||
assertEquals("Czeka na anulowanie", DriverLeaveRequestUiRules.statusLabel("cancel_requested"))
|
||||
assertEquals("Anulowany", DriverLeaveRequestUiRules.statusLabel("cancelled"))
|
||||
assertEquals("Cofnięto decyzję", DriverLeaveRequestUiRules.statusLabel("revoked"))
|
||||
assertEquals("Akceptacja cofnięta", DriverLeaveRequestUiRules.statusLabel("revoked"))
|
||||
assertEquals("Nieznany status", DriverLeaveRequestUiRules.statusLabel("some_raw_status"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun explainsAnnualBalanceInDaysAndHours() {
|
||||
val summary = DriverLeaveSummaryDto(
|
||||
dailyNormMinutes = 480,
|
||||
balanceConfigured = true,
|
||||
pools = listOf(
|
||||
annualPool(year = 2025, available = 480, reserved = 0, used = 480, granted = 960),
|
||||
annualPool(year = 2026, available = 3_840, reserved = 960, used = 960, granted = 5_760),
|
||||
),
|
||||
)
|
||||
|
||||
val totals = DriverLeaveRequestUiRules.annualTotals(summary)
|
||||
|
||||
assertEquals(4_320, totals.availableMinutes)
|
||||
assertEquals(960, totals.reservedMinutes)
|
||||
assertEquals(1_440, totals.usedMinutes)
|
||||
assertEquals("9 dni · 72 godz.", DriverLeaveRequestUiRules.formatQuantity(totals.availableMinutes, "minutes", 480))
|
||||
assertEquals("2 dni + 2 godz. · 18 godz.", DriverLeaveRequestUiRules.formatQuantity(1_080, "minutes", 480))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun exposesPolishEventActionLabels() {
|
||||
assertEquals("Wniosek złożony", DriverLeaveRequestUiRules.eventActionLabel("submitted"))
|
||||
@@ -105,4 +127,23 @@ class DriverLeaveRequestUiRulesTest {
|
||||
phoneNumber = "+48 600 700 800",
|
||||
),
|
||||
)
|
||||
|
||||
private fun annualPool(
|
||||
year: Int,
|
||||
available: Int,
|
||||
reserved: Int,
|
||||
used: Int,
|
||||
granted: Int,
|
||||
): DriverLeavePoolDto =
|
||||
DriverLeavePoolDto(
|
||||
id = year,
|
||||
poolCode = "ANNUAL",
|
||||
year = year,
|
||||
unit = "minutes",
|
||||
availableQuantity = available,
|
||||
reservedQuantity = reserved,
|
||||
usedQuantity = used,
|
||||
grantedQuantity = granted,
|
||||
status = "active",
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user