package cn.iocoder.yudao.module.mes.service.collect;
|
|
import org.junit.jupiter.api.Test;
|
import java.time.Duration;
|
import java.time.LocalDateTime;
|
import static org.junit.jupiter.api.Assertions.*;
|
import java.util.List;
|
|
class CollectOfflinePolicyTest {
|
private final LocalDateTime t = LocalDateTime.of(2026, 11, 6, 8, 0);
|
private final Duration timeout = Duration.ofMinutes(5);
|
|
@Test void recordsOnlyGapsAfterLastObservedSampleAndClipsAtQueryBounds() {
|
var intervals = CollectOfflinePolicy.calculate(List.of(t, t.plusMinutes(2), t.plusMinutes(12)),
|
t.plusMinutes(5), t.plusMinutes(20), timeout);
|
assertEquals(2, intervals.size());
|
assertEquals(t.plusMinutes(7), intervals.get(0).start());
|
assertEquals(t.plusMinutes(12), intervals.get(0).end());
|
assertEquals(t.plusMinutes(17), intervals.get(1).start());
|
assertEquals(t.plusMinutes(20), intervals.get(1).end());
|
assertTrue(CollectOfflinePolicy.calculate(List.of(), t, t.plusHours(1), timeout).isEmpty());
|
}
|
|
@Test void doesNotInferBeforeFirstSampleOrCountShortGaps() {
|
var result = CollectOfflinePolicy.calculate(List.of(t.plusMinutes(5), t.plusMinutes(9)),
|
t, t.plusMinutes(12), timeout);
|
assertTrue(result.isEmpty());
|
}
|
|
@Test void openOfflineIntervalIsClippedToTheRequestedWindow() {
|
var result = CollectOfflinePolicy.calculate(List.of(t), t.plusMinutes(10), t.plusMinutes(20), timeout);
|
assertEquals(1, result.size());
|
assertEquals(t.plusMinutes(10), result.getFirst().start());
|
assertEquals(t.plusMinutes(20), result.getFirst().end());
|
}
|
}
|