aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapter.scala4
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/db/SqlContext.scala32
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/http/AsyncHttpClientFetcher.scala24
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/logging/Implicits.scala14
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala17
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala8
-rw-r--r--src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala6
-rw-r--r--src/test/scala/xyz/driver/pdsuicommon/utils/DiffUtils.scala27
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala21
9 files changed, 94 insertions, 59 deletions
diff --git a/src/main/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapter.scala b/src/main/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapter.scala
index a98d2cd..528be59 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapter.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapter.scala
@@ -12,6 +12,7 @@ import xyz.driver.pdsuicommon.logging._
import scala.concurrent.duration.{Duration, FiniteDuration}
import scala.concurrent.{ExecutionContext, Future}
+import scala.util.Try
object BridgeUploadQueueRepositoryAdapter {
@@ -39,7 +40,8 @@ object BridgeUploadQueueRepositoryAdapter {
}
private def intervalFor(attempt: Int): Duration = {
- startInterval * Math.pow(intervalFactor, attempt.toDouble)
+ Try(startInterval * Math.pow(intervalFactor, attempt.toDouble))
+ .getOrElse(maxInterval)
}
}
diff --git a/src/main/scala/xyz/driver/pdsuicommon/db/SqlContext.scala b/src/main/scala/xyz/driver/pdsuicommon/db/SqlContext.scala
index 860629b..c929eae 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/db/SqlContext.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/db/SqlContext.scala
@@ -67,23 +67,23 @@ class SqlContext(dataSource: DataSource with Closeable, settings: Settings)
* @see https://github.com/getquill/quill/issues/535
*/
implicit override def optionDecoder[T](implicit d: Decoder[T]): Decoder[Option[T]] =
- decoder(
- sqlType = d.sqlType,
- row => index => {
- try {
- val res = d(index - 1, row)
- if (row.wasNull) {
- None
- }
- else {
- Some(res)
- }
- } catch {
- case _: NullPointerException => None
- case _: IncorrectIdException => None
+ decoder(
+ sqlType = d.sqlType,
+ row =>
+ index => {
+ try {
+ val res = d(index - 1, row)
+ if (row.wasNull) {
+ None
+ } else {
+ Some(res)
+ }
+ } catch {
+ case _: NullPointerException => None
+ case _: IncorrectIdException => None
+ }
}
- }
- )
+ )
final implicit class LocalDateTimeDbOps(val left: LocalDateTime) {
diff --git a/src/main/scala/xyz/driver/pdsuicommon/http/AsyncHttpClientFetcher.scala b/src/main/scala/xyz/driver/pdsuicommon/http/AsyncHttpClientFetcher.scala
index 3f99d2a..d836b9d 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/http/AsyncHttpClientFetcher.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/http/AsyncHttpClientFetcher.scala
@@ -40,17 +40,19 @@ class AsyncHttpClientFetcher(settings: AsyncHttpClientFetcher.Settings)
logger.info("{}, apply({})", fingerPrint, url)
val promise = Promise[Response]()
- httpClient.prepareGet(url.toString).execute(new AsyncCompletionHandler[Response] {
- override def onCompleted(response: Response): Response = {
- promise.success(response)
- response
- }
-
- override def onThrowable(t: Throwable): Unit = {
- promise.failure(t)
- super.onThrowable(t)
- }
- })
+ httpClient
+ .prepareGet(url.toString)
+ .execute(new AsyncCompletionHandler[Response] {
+ override def onCompleted(response: Response): Response = {
+ promise.success(response)
+ response
+ }
+
+ override def onThrowable(t: Throwable): Unit = {
+ promise.failure(t)
+ super.onThrowable(t)
+ }
+ })
// Promises have their own ExecutionContext
// So, we have to hack it.
diff --git a/src/main/scala/xyz/driver/pdsuicommon/logging/Implicits.scala b/src/main/scala/xyz/driver/pdsuicommon/logging/Implicits.scala
index e1660e2..109d52a 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/logging/Implicits.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/logging/Implicits.scala
@@ -35,21 +35,19 @@ trait Implicits {
implicit def uuidToPhiString(x: UUID): PhiString = Unsafe(x.toString)
- implicit def tuple2ToPhiString[T1, T2](x: (T1, T2))
- (implicit inner1: T1 => PhiString,
- inner2: T2 => PhiString): PhiString = x match {
+ implicit def tuple2ToPhiString[T1, T2](x: (T1, T2))(implicit inner1: T1 => PhiString,
+ inner2: T2 => PhiString): PhiString = x match {
case (a, b) => phi"($a, $b)"
}
- implicit def tuple3ToPhiString[T1, T2, T3](x: (T1, T2, T3))
- (implicit inner1: T1 => PhiString,
- inner2: T2 => PhiString,
- inner3: T3 => PhiString): PhiString = x match {
+ implicit def tuple3ToPhiString[T1, T2, T3](x: (T1, T2, T3))(implicit inner1: T1 => PhiString,
+ inner2: T2 => PhiString,
+ inner3: T3 => PhiString): PhiString = x match {
case (a, b, c) => phi"($a, $b, $c)"
}
implicit def optionToPhiString[T](opt: Option[T])(implicit inner: T => PhiString): PhiString = opt match {
- case None => phi"None"
+ case None => phi"None"
case Some(x) => phi"Some($x)"
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala
index 9fc1992..19c0021 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala
@@ -101,15 +101,15 @@ object Document {
startDate <- Validators.nonEmpty("startDate")(input.startDate)
isOrderRight <- input.endDate match {
- case Some(endDate) if startDate.isAfter(endDate) =>
- Validators.fail("The start date should be less, than the end one")
+ case Some(endDate) if startDate.isAfter(endDate) =>
+ Validators.fail("The start date should be less, than the end one")
- case _ => Validators.success(true)
- }
+ case _ => Validators.success(true)
+ }
areDatesInThePast <- {
- val dates = List(input.startDate, input.endDate).flatten
- val now = LocalDate.now()
+ val dates = List(input.startDate, input.endDate).flatten
+ val now = LocalDate.now()
val hasInvalid = dates.exists(_.isAfter(now))
if (hasInvalid) Validators.fail("Dates should be in the past")
@@ -129,7 +129,7 @@ case class Document(id: LongId[Document] = LongId(0L),
recordId: LongId[MedicalRecord],
physician: Option[String],
typeId: Option[LongId[DocumentType]], // not null
- providerName: Option[String], // not null
+ providerName: Option[String], // not null
providerTypeId: Option[LongId[ProviderType]], // not null
meta: Option[TextJson[Meta]], // not null
startDate: Option[LocalDate], // not null
@@ -139,8 +139,7 @@ case class Document(id: LongId[Document] = LongId(0L),
import Document.Status._
if (previousStatus.nonEmpty) {
- assert(AllPrevious.contains(previousStatus.get),
- s"Previous status has invalid value: ${previousStatus.get}")
+ assert(AllPrevious.contains(previousStatus.get), s"Previous status has invalid value: ${previousStatus.get}")
}
// TODO: with the current business logic code this constraint sometimes harmful
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala
index c0ead6f..658680d 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala
@@ -23,9 +23,11 @@ object PatientCriterion {
case None => None
case Some(FuzzyValue.Maybe) => Some(FuzzyValue.Maybe)
case Some(_) if criterionValue.isEmpty => Some(FuzzyValue.Maybe)
- case Some(status) => Some(FuzzyValue.fromBoolean(
- FuzzyValue.fromBoolean(criterionValue.get) == status
- ))
+ case Some(status) =>
+ Some(
+ FuzzyValue.fromBoolean(
+ FuzzyValue.fromBoolean(criterionValue.get) == status
+ ))
}
}
diff --git a/src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala b/src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala
index 48a4eaf..d0dbb04 100644
--- a/src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala
@@ -19,7 +19,7 @@ class BridgeUploadQueueRepositoryAdapterSuite extends BaseSuite {
"Strategy" - {
"LimitExponential" - {
- "calculateNextInterval" - {
+ "on" - {
val strategy = Strategy.LimitExponential(
startInterval = 10.seconds,
intervalFactor = 1.4,
@@ -40,6 +40,10 @@ class BridgeUploadQueueRepositoryAdapterSuite extends BaseSuite {
"should limit intervals" in {
assert(strategy.on(20) == OnAttempt.Continue(strategy.maxInterval))
}
+
+ "should not fail, if there is many attempts" in {
+ assert(strategy.on(1000) == OnAttempt.Continue(strategy.maxInterval))
+ }
}
}
}
diff --git a/src/test/scala/xyz/driver/pdsuicommon/utils/DiffUtils.scala b/src/test/scala/xyz/driver/pdsuicommon/utils/DiffUtils.scala
index 5338173..cc2ef0a 100644
--- a/src/test/scala/xyz/driver/pdsuicommon/utils/DiffUtils.scala
+++ b/src/test/scala/xyz/driver/pdsuicommon/utils/DiffUtils.scala
@@ -6,6 +6,7 @@ import java.time.{LocalDate, LocalDateTime}
import ai.x.diff._
import org.scalatest.Assertions
import xyz.driver.pdsuicommon.domain.PasswordHash
+import xyz.driver.pdsuidomain.entities.{Document, ExtractedData, MedicalRecord}
import scala.io.AnsiColor
@@ -47,4 +48,30 @@ trait DiffUtils { this: Assertions =>
else Different(showChange(left, right))
}
}
+
+ implicit def metaDiffShow: DiffShow[MedicalRecord.Meta] = new DiffShow[MedicalRecord.Meta] {
+ def show(x: MedicalRecord.Meta): String = s"MedicalRecord.Meta($x)"
+ def diff(left: MedicalRecord.Meta, right: MedicalRecord.Meta): Comparison = {
+ if (left.equals(right)) Identical(show(left))
+ else Different(showChange(left, right))
+ }
+ }
+
+ implicit def extractedDataMetaDiffShow: DiffShow[ExtractedData.Meta] = new DiffShow[ExtractedData.Meta] {
+ def show(x: ExtractedData.Meta): String = s"ExtractedData.Meta($x)"
+ def diff(left: ExtractedData.Meta, right: ExtractedData.Meta): Comparison = {
+ if (left.equals(right)) Identical(show(left))
+ else Different(showChange(left, right))
+ }
+ }
+
+ implicit def documentDiffShow: DiffShow[Document] = new DiffShow[Document] {
+ def show(x: Document): String = s"Document($x)"
+
+ def diff(left: Document, right: Document): Comparison = {
+ if (left == right) Identical(show(left))
+ else Different(showChange(left, right))
+ }
+ }
+
}
diff --git a/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala
index 78edc10..3955667 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala
@@ -13,21 +13,22 @@ class DocumentSuite extends BaseSuite {
"can't submit invalid data" - {
val base = sampleDocument
- val now = LocalDate.now()
- val past1 = now.minus(2, ChronoUnit.DAYS)
- val past2 = past1.plus(1, ChronoUnit.DAYS)
+ val now = LocalDate.now()
+ val past1 = now.minus(2, ChronoUnit.DAYS)
+ val past2 = past1.plus(1, ChronoUnit.DAYS)
val future1 = now.plus(1, ChronoUnit.DAYS)
val future2 = future1.plus(1, ChronoUnit.DAYS)
Seq(
- "startDate should be non-empty" -> base.copy(startDate = None),
- "startDate should be greater, than endDate" -> base.copy(startDate = Some(past2), endDate = Some(past1)),
+ "startDate should be non-empty" -> base.copy(startDate = None),
+ "startDate should be greater, than endDate" -> base.copy(startDate = Some(past2), endDate = Some(past1)),
"startDate and endDate should be in the past" -> base.copy(startDate = Some(future1), endDate = Some(future2))
- ).foreach { case (title, orig) =>
- s"$title" in {
- val r = Document.validator(orig)
- assert(r.isLeft, s"should fail, but: ${r.right}")
- }
+ ).foreach {
+ case (title, orig) =>
+ s"$title" in {
+ val r = Document.validator(orig)
+ assert(r.isLeft, s"should fail, but: ${r.right}")
+ }
}
}
}