longz
2026-07-28 79f1a19bb3344de47dff029cf5498d787e223782
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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("[]"));
    }
}