import org.scalatest.funsuite.AnyFunSuite import scala.concurrent.duration._ import monix.bio.Task import nova.monadic_sfx.util.reactive.store.Store import nova.monadic_sfx.util.History import nova.monadic_sfx.util.reactive.store.Reducer import nova.monadic_sfx.ui.components.router.Page import nova.monadic_sfx.util.IOUtils.toIO import monix.reactive.Observable import cats.effect.Resource import nova.monadic_sfx.ui.components.router.FXRouter import io.odin.consoleLogger class BackpressuredStoreTest extends AnyFunSuite { import monix.execution.Scheduler.Implicits.global val logger = consoleLogger[Task]() test("backpressed store test") { (for { _ <- Resource .eval(new FXRouter[Page].store2(Page.Home, logger)) .use { myStore => for { _ <- toIO( myStore.source .doOnNextF(_ => Task.sleep(1.seconds)) .doOnNextF(item => logger.debug(s"Task1: Got Item $item")) .completedL ).startAndForget _ <- toIO( myStore.source .doOnNextF(_ => Task.sleep(3.seconds)) .doOnNextF(item => logger.debug(s"Task2: Got Item $item")) .completedL ).startAndForget _ <- myStore.sink.offer(FXRouter.Replace(Page.Home)) _ <- myStore.sink.offer(FXRouter.Replace(Page.Todo)) _ <- myStore.sink.offer(FXRouter.Replace(Page.UserHome)) _ <- myStore.sink.offer(FXRouter.Backward) _ <- Task.sleep(25.seconds) } yield () } // _ <- Task.sleep(2.seconds) } yield ()).runSyncUnsafe(26.seconds) } }