100 lines
6.1 KiB
Java
100 lines
6.1 KiB
Java
package at.procon.eventhub.tachographfilesession.service;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
import at.procon.eventhub.config.EventHubProperties;
|
|
import at.procon.eventhub.tachographfilesession.dto.TachographOperatingPeriodsProcessingRequest;
|
|
import at.procon.eventhub.tachographfilesession.dto.TachographOperatingPeriodsProcessingResultDto;
|
|
import at.procon.eventhub.tachographfilesession.model.DriverExtractionSession;
|
|
import at.procon.eventhub.tachographfilesession.model.ExtractedCardActivityInterval;
|
|
import at.procon.eventhub.tachographfilesession.model.ExtractedCardVehicleUsageInterval;
|
|
import at.procon.eventhub.tachographfilesession.model.ExtractionStats;
|
|
import at.procon.eventhub.tachographfilesession.model.TachographFileSession;
|
|
import at.procon.eventhub.tachographfilesession.model.TachographFileSessionMetadata;
|
|
import java.time.Instant;
|
|
import java.time.OffsetDateTime;
|
|
import java.time.temporal.ChronoUnit;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.UUID;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
class TachographFileSessionProcessingServiceTest {
|
|
|
|
@Test
|
|
void evaluatesOperatingPeriodsFromSessionTimeline() {
|
|
EventHubProperties properties = new EventHubProperties();
|
|
TachographFileSessionRepository repository = new InMemoryTachographFileSessionRepository(properties);
|
|
TachographFileSessionProcessingService service = new TachographFileSessionProcessingService(
|
|
repository,
|
|
new DriverTimelineBuilder(),
|
|
properties
|
|
);
|
|
|
|
DriverExtractionSession driver = new DriverExtractionSession(
|
|
"12:123",
|
|
null,
|
|
null,
|
|
List.of(),
|
|
List.of(),
|
|
List.of(new ExtractedCardVehicleUsageInterval(
|
|
"CVU-1",
|
|
OffsetDateTime.parse("2026-05-01T08:00:00Z"),
|
|
OffsetDateTime.parse("2026-05-01T20:00:00Z"),
|
|
100L,
|
|
200L,
|
|
"12:REG-1",
|
|
"VIN-1",
|
|
"vu"
|
|
)),
|
|
List.of(
|
|
new ExtractedCardActivityInterval("ACT-1", OffsetDateTime.parse("2026-05-01T08:00:00Z"), OffsetDateTime.parse("2026-05-01T08:30:00Z"), "BREAK_REST", "DRIVER", "INSERTED", "SINGLE", "12:REG-1", "VIN-1", "a"),
|
|
new ExtractedCardActivityInterval("ACT-2", OffsetDateTime.parse("2026-05-01T08:30:00Z"), OffsetDateTime.parse("2026-05-01T09:00:00Z"), "WORK", "DRIVER", "INSERTED", "SINGLE", "12:REG-1", "VIN-1", "b"),
|
|
new ExtractedCardActivityInterval("ACT-3", OffsetDateTime.parse("2026-05-01T09:00:00Z"), OffsetDateTime.parse("2026-05-01T09:20:00Z"), "DRIVE", "DRIVER", "INSERTED", "SINGLE", "12:REG-1", "VIN-1", "c"),
|
|
new ExtractedCardActivityInterval("ACT-4", OffsetDateTime.parse("2026-05-01T09:20:00Z"), OffsetDateTime.parse("2026-05-01T10:00:00Z"), "BREAK_REST", "DRIVER", "INSERTED", "SINGLE", "12:REG-1", "VIN-1", "d"),
|
|
new ExtractedCardActivityInterval("ACT-5", OffsetDateTime.parse("2026-05-01T10:00:00Z"), OffsetDateTime.parse("2026-05-01T10:15:00Z"), "WORK", "DRIVER", "INSERTED", "SINGLE", "12:REG-1", "VIN-1", "e"),
|
|
new ExtractedCardActivityInterval("ACT-6", OffsetDateTime.parse("2026-05-01T10:15:00Z"), OffsetDateTime.parse("2026-05-01T10:35:00Z"), "DRIVE", "DRIVER", "INSERTED", "SINGLE", "12:REG-1", "VIN-1", "f"),
|
|
new ExtractedCardActivityInterval("ACT-7", OffsetDateTime.parse("2026-05-01T18:45:00Z"), OffsetDateTime.parse("2026-05-01T19:00:00Z"), "WORK", "DRIVER", "INSERTED", "SINGLE", "12:REG-1", "VIN-1", "g")
|
|
),
|
|
List.of(),
|
|
List.of()
|
|
);
|
|
TachographFileSession session = new TachographFileSession(
|
|
UUID.randomUUID(),
|
|
new TachographFileSessionMetadata("default", "legalrequirements-drivercard", "sample", "sample.ddd", "a", 3, "42", "b", true, null),
|
|
Map.of(driver.driverKey(), driver),
|
|
new ExtractionStats(1, 7, 1, 1, 1, 0),
|
|
List.of(),
|
|
Instant.now(),
|
|
Instant.now().plus(4, ChronoUnit.HOURS)
|
|
);
|
|
repository.save(session);
|
|
|
|
TachographOperatingPeriodsProcessingResultDto result = service.evaluateOperatingPeriods(
|
|
session.sessionId(),
|
|
driver.driverKey(),
|
|
new TachographOperatingPeriodsProcessingRequest(
|
|
OffsetDateTime.parse("2026-05-01T08:00:00Z"),
|
|
OffsetDateTime.parse("2026-05-01T19:00:00Z"),
|
|
7,
|
|
10,
|
|
0,
|
|
0
|
|
)
|
|
);
|
|
|
|
assertThat(result.timeline().sourceKind()).isEqualTo("DRIVER_CARD");
|
|
assertThat(result.evaluationIntervals()).extracting("activityType").contains("WORK", "DRIVE");
|
|
assertThat(result.operatingPeriods()).hasSize(2);
|
|
assertThat(result.operatingPeriods().get(0).startedAt()).isEqualTo(OffsetDateTime.parse("2026-05-01T08:30:00Z"));
|
|
assertThat(result.operatingPeriods().get(0).endedAt()).isEqualTo(OffsetDateTime.parse("2026-05-01T10:35:00Z"));
|
|
assertThat(result.operatingPeriods().get(0).closedBy()).isEqualTo("UNKNOWN_GAP");
|
|
assertThat(result.operatingPeriods().get(0).drivingTimeInterruptionEvaluation().departureAt()).isEqualTo(OffsetDateTime.parse("2026-05-01T09:00:00Z"));
|
|
assertThat(result.operatingPeriods().get(0).drivingTimeInterruptionEvaluation().interruptionsBetweenSignificantDrivingPeriods()).hasSize(1);
|
|
assertThat(result.operatingPeriods().get(0).drivingTimeInterruptionEvaluation().interruptionsBetweenSignificantDrivingPeriods().get(0).from())
|
|
.isEqualTo(OffsetDateTime.parse("2026-05-01T09:20:00Z"));
|
|
assertThat(result.operatingPeriods().get(1).startedAt()).isEqualTo(OffsetDateTime.parse("2026-05-01T18:45:00Z"));
|
|
assertThat(result.operatingPeriods().get(1).closedBy()).isEqualTo("FLUSH");
|
|
}
|
|
}
|