mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-10 15:11:59 +01:00
[inmemory] Fix boundaries for queries (#16563)
Queries should include the boundaries, but the previous code did not. Signed-off-by: Jan N. Klug <github@klug.nrw>
This commit is contained in:
parent
cac9e2ccda
commit
a1cef70277
@ -271,11 +271,11 @@ public class InMemoryPersistenceService implements ModifiablePersistenceService
|
||||
@SuppressWarnings({ "rawType", "unchecked" })
|
||||
private boolean applies(PersistEntry entry, FilterCriteria filter) {
|
||||
ZonedDateTime beginDate = filter.getBeginDate();
|
||||
if (beginDate != null && entry.timestamp().isBefore(beginDate)) {
|
||||
if (beginDate != null && beginDate.isAfter(entry.timestamp())) {
|
||||
return false;
|
||||
}
|
||||
ZonedDateTime endDate = filter.getEndDate();
|
||||
if (endDate != null && entry.timestamp().isAfter(endDate)) {
|
||||
if (endDate != null && endDate.isBefore(entry.timestamp())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -211,4 +211,68 @@ public class InMemoryPersistenceTests {
|
||||
assertThat(storedStates.last().getState(), is(historicState3));
|
||||
assertThat(storedStates.last().getTimestamp(), is(expectedTime.plusHours(4)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void endDateProperlyObserved() {
|
||||
TreeSet<HistoricItem> storedStates = new TreeSet<>(Comparator.comparing(HistoricItem::getTimestamp));
|
||||
|
||||
State historicState1 = new StringType("value1");
|
||||
State historicState2 = new StringType("value2");
|
||||
|
||||
ZonedDateTime historicTime1 = ZonedDateTime.of(2022, 05, 31, 10, 0, 0, 0, ZoneId.systemDefault());
|
||||
ZonedDateTime historicTime2 = historicTime1.plusHours(2);
|
||||
service.store(item, historicTime1, historicState1);
|
||||
service.store(item, historicTime2, historicState2);
|
||||
|
||||
// end date is between first and second date, only return one dataset
|
||||
filterCriteria = new FilterCriteria();
|
||||
filterCriteria.setItemName(ITEM_NAME);
|
||||
filterCriteria.setEndDate(historicTime1.plusHours(1));
|
||||
|
||||
service.query(filterCriteria).forEach(storedStates::add);
|
||||
assertThat(storedStates.size(), is(1));
|
||||
|
||||
// end date is exactly second date, return both dataset
|
||||
storedStates.clear();
|
||||
filterCriteria = new FilterCriteria();
|
||||
filterCriteria.setItemName(ITEM_NAME);
|
||||
filterCriteria.setEndDate(historicTime2);
|
||||
|
||||
service.query(filterCriteria).forEach(storedStates::add);
|
||||
assertThat(storedStates.size(), is(2));
|
||||
|
||||
// end date is after second date is already covered by case #1
|
||||
}
|
||||
|
||||
@Test
|
||||
public void beginDateProperlyObserved() {
|
||||
TreeSet<HistoricItem> storedStates = new TreeSet<>(Comparator.comparing(HistoricItem::getTimestamp));
|
||||
|
||||
State historicState1 = new StringType("value1");
|
||||
State historicState2 = new StringType("value2");
|
||||
|
||||
ZonedDateTime historicTime1 = ZonedDateTime.of(2022, 05, 31, 10, 0, 0, 0, ZoneId.systemDefault());
|
||||
ZonedDateTime historicTime2 = historicTime1.plusHours(2);
|
||||
service.store(item, historicTime1, historicState1);
|
||||
service.store(item, historicTime2, historicState2);
|
||||
|
||||
// begin date is between first and second date, only return one dataset
|
||||
filterCriteria = new FilterCriteria();
|
||||
filterCriteria.setItemName(ITEM_NAME);
|
||||
filterCriteria.setEndDate(historicTime2.minusHours(1));
|
||||
|
||||
service.query(filterCriteria).forEach(storedStates::add);
|
||||
assertThat(storedStates.size(), is(1));
|
||||
|
||||
// begin date is exactly first date, return both dataset
|
||||
storedStates.clear();
|
||||
filterCriteria = new FilterCriteria();
|
||||
filterCriteria.setItemName(ITEM_NAME);
|
||||
filterCriteria.setBeginDate(historicTime1);
|
||||
|
||||
service.query(filterCriteria).forEach(storedStates::add);
|
||||
assertThat(storedStates.size(), is(2));
|
||||
|
||||
// begin date is before first date is already covered by case #1
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user