### Question:
SolverHandlerContext { public LocalDateTime shiftQueryTime(LocalDateTime queryTime) { return queryTime != null ? queryTime.minus(queryShift.toMillis(), ChronoUnit.MILLIS) : null; } SolverHandlerContext(Duration queryShift); long getCurrentChangeSetId(); void setCurrentChangeSetId(long currentChangeSetId); long nextChangeSetId(); boolean isProcessedChangeSet(long changeSetId); boolean isCurrentChangeSetProcessed(); void setProcessedChangeSet(long changeSetId); void clearProcessedChangeSet(); void setTaskChangeTime(long taskId, LocalDateTime changeTime); boolean isProcessedTaskChange(long taskId, LocalDateTime changeTime); void clearTaskChangeTimes(LocalDateTime untilLocalDateTime); void clearTaskChangeTimes(); LocalDateTime getPreviousQueryTime(); void setPreviousQueryTime(LocalDateTime previousQueryTime); LocalDateTime getNextQueryTime(); void setNextQueryTime(LocalDateTime nextQueryTime); LocalDateTime shiftQueryTime(LocalDateTime queryTime);  }### Answer:
@Test public void shiftQueryTime() { LocalDateTime queryTime = LocalDateTime.now(); LocalDateTime result = context.shiftQueryTime(queryTime); assertThat(result).isEqualTo(queryTime.minus(QUERY_SHIFT.toMillis(), ChronoUnit.MILLIS)); }
@Test public void shiftQueryTimeNull() { assertThat(context.shiftQueryTime(null)).isNull(); }