Skip to content

Commit

Permalink
Fix last hour not being considered for best price (#17731)
Browse files Browse the repository at this point in the history
Resolves #17316

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
  • Loading branch information
jlaur authored Nov 13, 2024
1 parent 10048bc commit 772026e
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ public void refreshChannel(ChannelUID channelUID) {
}
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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,8 +239,20 @@ public synchronized SortedSet<AwattarPrice> getPrices() {

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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public boolean contains(TimeRange other) {
* @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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,17 @@ void testGetPriceForFail() {
}

@Test
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));
}

Expand Down

0 comments on commit 772026e

Please sign in to comment.