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
46 lines
1.7 KiB
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)
|
|
}
|
|
}
|