DefaultManyReconciler implements ManyReconciler<DATA> { @Override public Optional<DATA> findById(String id) { return Optional.ofNullable(Evaluators.applyNotNull(executors.get(id), ReconcilerEngine::getCurrent)); } DefaultManyReconciler(
            String name,
            Duration quickCycle,
            Duration longCycle,
            Function<DATA, List<Mono<Function<DATA, DATA>>>> reconcilerActionsProvider,
            CloseableReference<Scheduler> reconcilerSchedulerRef,
            CloseableReference<Scheduler> notificationSchedulerRef,
            TitusRuntime titusRuntime); @Override Mono<Void> add(String id, DATA initial); @Override Mono<Void> remove(String id); @Override Mono<Void> close(); @Override Map<String, DATA> getAll(); @Override Optional<DATA> findById(String id); @Override Mono<DATA> apply(String id, Function<DATA, Mono<DATA>> action); @Override Flux<List<SimpleReconcilerEvent<DATA>>> changes();  }
@Test public void testReconcilerAction() throws InterruptedException { newReconcilerWithRegistrations( dataBefore -> dataBefore.equals("a") ? Collections.singletonList(Mono.just(dataAfter -> "b")) : Collections.emptyList(), "r1", "a" ); await().until(() -> reconciler.findById("r1").orElse("").equals("b")); }