Fix last hour not being considered for best price (#17745)

Backport of #17731

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
This commit is contained in:
Jacob Laursen 2024-11-15 17:07:04 +01:00 committed by GitHub
parent b897c959ce
commit 8b2bbfe90c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 25 additions and 4 deletions

View File

@ -139,7 +139,7 @@ public class AwattarBestpriceHandler extends BaseThingHandler {
}
AwattarBestpriceConfiguration config = getConfigAs(AwattarBestpriceConfiguration.class);
TimeRange timerange = getRange(config.rangeStart, config.rangeDuration, bridgeHandler.getTimeZone());
if (!(bridgeHandler.containsPriceFor(timerange.start()) && bridgeHandler.containsPriceFor(timerange.end()))) {
if (!(bridgeHandler.containsPriceFor(timerange))) {
updateState(channelUID, state);
return;
}

View File

@ -210,8 +210,20 @@ public class AwattarBridgeHandler extends BaseBridgeHandler {
public boolean containsPriceFor(long timestamp) {
SortedSet<AwattarPrice> localPrices = getPrices();
return localPrices != null && localPrices.first().timerange().start() <= timestamp
&& localPrices.last().timerange().end() > timestamp;
if (localPrices == null) {
return false;
}
return new TimeRange(localPrices.first().timerange().start(), localPrices.last().timerange().end())
.contains(timestamp);
}
public boolean containsPriceFor(TimeRange timeRange) {
SortedSet<AwattarPrice> localPrices = getPrices();
if (localPrices == null) {
return false;
}
return new TimeRange(localPrices.first().timerange().start(), localPrices.last().timerange().end())
.contains(timeRange);
}
@Override

View File

@ -48,6 +48,7 @@ public record TimeRange(long start, long end) implements Comparable<TimeRange> {
* @param o the object to be compared
* @return the result of {@link Long#compare(long, long)} for the {@link #start} timestamps
*/
@Override
public int compareTo(TimeRange o) {
return Long.compare(start, o.start);
}

View File

@ -148,9 +148,17 @@ public class AwattarBridgeHandlerTest extends JavaTest {
}
@Test
public void testContainsPrizeFor() {
void testContainsPriceForTimestamp() {
assertThat(bridgeHandler.containsPriceFor(new TimeRange(1618503200000L, 1718316000000L)), is(false));
assertThat(bridgeHandler.containsPriceFor(new TimeRange(1618503200000L, 1718503200000L)), is(false));
assertThat(bridgeHandler.containsPriceFor(new TimeRange(1718503200000L, 1718575200000L)), is(true));
}
@Test
void testContainsPriceForRange() {
assertThat(bridgeHandler.containsPriceFor(1618503200000L), is(false));
assertThat(bridgeHandler.containsPriceFor(1718503200000L), is(true));
assertThat(bridgeHandler.containsPriceFor(1718575200000L), is(false));
assertThat(bridgeHandler.containsPriceFor(1818503200000L), is(false));
}