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" })
|
@SuppressWarnings({ "rawType", "unchecked" })
|
||||||
private boolean applies(PersistEntry entry, FilterCriteria filter) {
|
private boolean applies(PersistEntry entry, FilterCriteria filter) {
|
||||||
ZonedDateTime beginDate = filter.getBeginDate();
|
ZonedDateTime beginDate = filter.getBeginDate();
|
||||||
if (beginDate != null && entry.timestamp().isBefore(beginDate)) {
|
if (beginDate != null && beginDate.isAfter(entry.timestamp())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ZonedDateTime endDate = filter.getEndDate();
|
ZonedDateTime endDate = filter.getEndDate();
|
||||||
if (endDate != null && entry.timestamp().isAfter(endDate)) {
|
if (endDate != null && endDate.isBefore(entry.timestamp())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,4 +211,68 @@ public class InMemoryPersistenceTests {
|
|||||||
assertThat(storedStates.last().getState(), is(historicState3));
|
assertThat(storedStates.last().getState(), is(historicState3));
|
||||||
assertThat(storedStates.last().getTimestamp(), is(expectedTime.plusHours(4)));
|
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