Improve FileFetchSchedulerSpec test
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user