You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.7 KiB

  1. import org.scalatest.funsuite.AnyFunSuite
  2. import scala.concurrent.duration._
  3. import monix.bio.Task
  4. import nova.monadic_sfx.util.reactive.store.Store
  5. import nova.monadic_sfx.util.History
  6. import nova.monadic_sfx.util.reactive.store.Reducer
  7. import nova.monadic_sfx.ui.components.router.Page
  8. import nova.monadic_sfx.util.IOUtils.toIO
  9. import monix.reactive.Observable
  10. import cats.effect.Resource
  11. import nova.monadic_sfx.ui.components.router.FXRouter
  12. import io.odin.consoleLogger
  13. class BackpressuredStoreTest extends AnyFunSuite {
  14. import monix.execution.Scheduler.Implicits.global
  15. val logger = consoleLogger[Task]()
  16. test("backpressed store test") {
  17. (for {
  18. _ <-
  19. Resource
  20. .eval(new FXRouter[Page].store2(Page.Home, logger))
  21. .use { myStore =>
  22. for {
  23. _ <- toIO(
  24. myStore.source
  25. .doOnNextF(_ => Task.sleep(1.seconds))
  26. .doOnNextF(item => logger.debug(s"Task1: Got Item $item"))
  27. .completedL
  28. ).startAndForget
  29. _ <- toIO(
  30. myStore.source
  31. .doOnNextF(_ => Task.sleep(3.seconds))
  32. .doOnNextF(item => logger.debug(s"Task2: Got Item $item"))
  33. .completedL
  34. ).startAndForget
  35. _ <- myStore.sink.offer(FXRouter.Replace(Page.Home))
  36. _ <- myStore.sink.offer(FXRouter.Replace(Page.Todo))
  37. _ <- myStore.sink.offer(FXRouter.Replace(Page.UserHome))
  38. _ <- myStore.sink.offer(FXRouter.Backward)
  39. _ <- Task.sleep(25.seconds)
  40. } yield ()
  41. }
  42. // _ <- Task.sleep(2.seconds)
  43. } yield ()).runSyncUnsafe(26.seconds)
  44. }
  45. }