Improve FileFetchSchedulerSpec test

This commit is contained in:
Guntis Smaukstelis
2023-05-24 14:14:04 +03:00
parent eded85b089
commit c1625e75fa
@@ -18,43 +18,37 @@ class FileFetchSchedulerSpec extends AsyncWordSpec with Matchers with IOSuite {
refDb <- Ref.of[IO, Option[String]](None) refDb <- Ref.of[IO, Option[String]](None)
refFetch <- Ref.of[IO, Option[(String, String)]](None) refFetch <- Ref.of[IO, Option[(String, String)]](None)
refScheduler <- Ref.of[IO, Option[Either[Throwable, (String, String)]]](None) refScheduler <- Ref.of[IO, Option[Either[Throwable, (String, String)]]](None)
services = Slf4jLogger.create[IO].flatMap { log => log <- Slf4jLogger.create[IO]
val dbService = new DBService(log) { dbService = new DBService(log) {
override def save(fileName: String, content: String): IO[Either[Throwable, String]] = { override def save(fileName: String, content: String): IO[Either[Throwable, String]] = {
refDb.set(Some(fileName)).as(Right(fileName)) refDb.set(Some(fileName)).as(Right(fileName))
} }
} }
val fileNameService = new FileNameService { fileNameService = new FileNameService {
override def generateCurrentHour(implicit clock: Clock[IO]): IO[String] = IO.pure("file_test") override def generateCurrentHour(implicit clock: Clock[IO]): IO[String] = IO.pure("file_test")
} }
val fetchService = new FetchService(fileNameService, log) { fetchService = new FetchService(fileNameService, log) {
override def fetchSingleFile(fileName: String): IO[Either[Throwable, (String, String)]] = { override def fetchSingleFile(fileName: String): IO[Either[Throwable, (String, String)]] = {
refFetch.set(Some((fileName, "content"))).as(Right((fileName, "content"))) refFetch.set(Some((fileName, "content"))).as(Right((fileName, "content")))
} }
} }
val scheduler = new Scheduler(log) { scheduler = new Scheduler(log) {
override def scheduleTask(task: IO[Either[Throwable, (String, String)]]): Stream[IO, Either[Throwable, (String, String)]] = { override def scheduleTask(task: IO[Either[Throwable, (String, String)]]): Stream[IO, Either[Throwable, (String, String)]] = {
Stream.eval(task).flatMap { result => Stream.eval(task).flatMap { result =>
Stream.eval(refScheduler.set(Some(result))).as(result) Stream.eval(refScheduler.set(Some(result))).as(result)
}
} }
} }
}
IO((dbService, fetchService, fileNameService, scheduler, log)) res = new FileFetchScheduler(dbService, fetchService, fileNameService, scheduler, log)
} .run.compile.drain *>
res <- services.flatMap { case (dbService, fetchService, fileNameService, scheduler, log) => { (refDb.get, refFetch.get, refScheduler.get).tupled.map { case (db, fetch, scheduler) =>
new FileFetchScheduler(dbService, fetchService, fileNameService, scheduler, log) db shouldBe Some("file_test")
.run.compile.drain *> fetch shouldBe Some(("file_test", "content"))
(refDb.get, refFetch.get, refScheduler.get).tupled.map { case (db, fetch, scheduler) => scheduler shouldBe Some(Right(("file_test", "content")))
db shouldBe Some("file_test")
fetch shouldBe Some(("file_test", "content"))
scheduler shouldBe Some(Right(("file_test", "content")))
}
} }
}
} yield res } yield res
} }
} }
} }