@Override public void accept(K key, V value) {
    subject.onNext(Map.entry(key, value));
  }
@Test
  public void singleKey() {
    var writerCalled = new AtomicBoolean();

    // Given this cache...
    var writer = new WriteBehindCacheWriter.Builder<Integer, ZonedDateTime>()
        .coalesce(BinaryOperator.maxBy(ZonedDateTime::compareTo))
        .writeAction(entries -> writerCalled.set(true))
        .bufferTime(Duration.ofSeconds(1))
        .build();
    Cache<Integer, ZonedDateTime> cache = Caffeine.newBuilder().build();

    // When this cache update happens...
    cache.asMap().computeIfAbsent(1, key -> {
      var value = ZonedDateTime.now();
      writer.accept(key, value);
      return value;
    });

    // Then the write behind action is called
    await().untilTrue(writerCalled);
  }