Test for FileFetchScheduler

This commit is contained in:
Guntis Smaukstelis
2023-05-23 22:02:56 +03:00
parent 0581260073
commit eded85b089
7 changed files with 81 additions and 15 deletions
+4 -4
View File
@@ -22,11 +22,11 @@ final case class WeatherServerConfig(
object FetchService {
def of: IO[FetchService] = {
Slf4jLogger.create[IO].map(logger => new FetchService(logger))
Slf4jLogger.create[IO].map(logger => new FetchService(new FileNameService, logger))
}
}
class FetchService(log: Logger[IO]) {
class FetchService(fileNameService: FileNameService, log: Logger[IO]) {
private val weatherServerConfig: WeatherServerConfig = ConfigSource.default.load[WeatherServerConfig] match {
case Right(config) => config
case Left(errors) => throw new RuntimeException(s"Unable to load config: $errors")
@@ -71,12 +71,12 @@ class FetchService(log: Logger[IO]) {
}
def fetchInRange(from: LocalDateTime, to: LocalDateTime): IO[List[Either[Throwable, (String, String)]]] = {
val fileNames = FileNameService.generate(from, to)
val fileNames = fileNameService.generate(from, to)
fetchFiles(fileNames)
}
def fetchFromDate(date: LocalDate): IO[List[Either[Throwable, (String, String)]]] = {
val fileNames = FileNameService.generateFromDate(date)
val fileNames = fileNameService.generateFromDate(date)
fetchFiles(fileNames)
}
}
@@ -11,16 +11,15 @@ object FileFetchScheduler {
def of(dbService: DBService, fetch: FetchService): IO[FileFetchScheduler] = {
Scheduler.of.flatMap { scheduler =>
Slf4jLogger.create[IO].map {
new FileFetchScheduler(dbService, fetch, scheduler, _)
new FileFetchScheduler(dbService, fetch, new FileNameService(), scheduler, _)
}
}
}
}
class FileFetchScheduler(dbService: DBService, fetch: FetchService, scheduler: Scheduler, log: Logger[IO]) {
class FileFetchScheduler(dbService: DBService, fetch: FetchService, fileNameService: FileNameService, scheduler: Scheduler, log: Logger[IO]) {
def run: Stream[IO, Unit] = {
val fetchTask = FileNameService.generateCurrentHour.flatMap(fetch.fetchSingleFile)
val fetchTask = fileNameService.generateCurrentHour.flatMap(fetch.fetchSingleFile)
scheduler.scheduleTask(fetchTask)
.evalMap {
case Left(fetchErr) =>
+6 -2
View File
@@ -5,7 +5,11 @@ import cats.effect._
import java.time.format.DateTimeFormatter
import java.time.{Duration, LocalDate, LocalDateTime, ZoneId, ZonedDateTime}
object FileNameService {
trait FileNameServiceTrait {
def generateCurrentHour(implicit clock: Clock[IO]): IO[String]
}
class FileNameService extends FileNameServiceTrait {
private val interval = Duration.ofMinutes(30)
private val formatter = DateTimeFormatter.ofPattern("yyyyMMdd_HHmm")
@@ -23,7 +27,7 @@ object FileNameService {
time.plusMinutes(adjustment)
}
def generateCurrentHour(implicit clock: Clock[IO]): IO[String] = {
override def generateCurrentHour(implicit clock: Clock[IO]): IO[String] = {
clock.realTime.map { duration =>
val instant = java.time.Instant.ofEpochMilli(duration.toMillis)
val zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.of("Europe/Riga"))
+1 -2
View File
@@ -6,7 +6,6 @@ import cats.implicits.catsSyntaxApply
import fs2.Stream
import org.typelevel.log4cats.Logger
import org.typelevel.log4cats.slf4j.Slf4jLogger
import server.Server
import java.time.{Duration, LocalTime}
import scala.concurrent.duration._
@@ -57,7 +56,7 @@ class Scheduler(log: Logger[IO]) {
// run.compile.drain.unsafeRunSync()
for {
fetch <- FetchService.of
fetchTask = FileNameService.generateCurrentHour.flatMap(fetch.fetchSingleFile)
fetchTask = new FileNameService().generateCurrentHour.flatMap(fetch.fetchSingleFile)
} yield scheduleTask(fetchTask).compile.drain.unsafeRunSync()
}
}