package com.ruoyi.chargingPile.api.support;
|
|
import com.ruoyi.chargingPile.api.model.ReservationTimeRange;
|
import org.junit.jupiter.api.Test;
|
|
import java.time.LocalTime;
|
import java.util.List;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
class ReservationTimeRangeSupportTest {
|
|
@Test
|
void parsesMultipleJsonRangesAndKeepsTheirOrder() {
|
List<ReservationTimeRange> ranges = ReservationTimeRangeSupport.parse(
|
"[{\"startTime\":\"08:00\",\"endTime\":\"10:00\"},"
|
+ "{\"startTime\":\"14:30\",\"endTime\":\"16:00\"}]",
|
null,
|
null);
|
|
assertEquals(2, ranges.size());
|
assertEquals("08:00", ranges.get(0).getStartTime());
|
assertEquals("16:00", ranges.get(1).getEndTime());
|
assertEquals("08:00-10:00、14:30-16:00", ReservationTimeRangeSupport.describe(ranges));
|
}
|
|
@Test
|
void fallsBackToLegacySingleRangeWhenJsonIsBlank() {
|
List<ReservationTimeRange> ranges = ReservationTimeRangeSupport.parse(null, "09:00", "11:00");
|
|
assertEquals(1, ranges.size());
|
assertEquals("09:00", ranges.get(0).getStartTime());
|
assertEquals("11:00", ranges.get(0).getEndTime());
|
}
|
|
@Test
|
void supportsCrossMidnightAndAdjacentRanges() {
|
String normalized = ReservationTimeRangeSupport.normalizeJson(
|
"[{\"startTime\":\"22:00\",\"endTime\":\"02:00\"},"
|
+ "{\"startTime\":\"02:00\",\"endTime\":\"04:00\"}]");
|
List<ReservationTimeRange> ranges = ReservationTimeRangeSupport.parse(normalized, null, null);
|
|
assertTrue(ReservationTimeRangeSupport.contains(ranges, LocalTime.of(23, 30)));
|
assertTrue(ReservationTimeRangeSupport.contains(ranges, LocalTime.of(1, 30)));
|
assertTrue(ReservationTimeRangeSupport.contains(ranges, LocalTime.of(3, 0)));
|
assertFalse(ReservationTimeRangeSupport.contains(ranges, LocalTime.of(12, 0)));
|
}
|
|
@Test
|
void rejectsMalformedEqualOrOverlappingRanges() {
|
assertThrows(IllegalArgumentException.class, () -> ReservationTimeRangeSupport.normalizeJson(
|
"[{\"startTime\":\"8:00\",\"endTime\":\"10:00\"}]"));
|
assertThrows(IllegalArgumentException.class, () -> ReservationTimeRangeSupport.normalizeJson(
|
"[{\"startTime\":\"08:00\",\"endTime\":\"08:00\"}]"));
|
assertThrows(IllegalArgumentException.class, () -> ReservationTimeRangeSupport.normalizeJson(
|
"[{\"startTime\":\"08:00\",\"endTime\":\"10:00\"},"
|
+ "{\"startTime\":\"09:30\",\"endTime\":\"11:00\"}]"));
|
}
|
|
@Test
|
void rejectsEmptyConfigurationWhenNormalizingForSave() {
|
assertThrows(IllegalArgumentException.class,
|
() -> ReservationTimeRangeSupport.normalizeJson("[]"));
|
}
|
}
|