diff options
author | vlad <vlad@driver.xyz> | 2017-06-16 11:12:52 -0700 |
---|---|---|
committer | vlad <vlad@driver.xyz> | 2017-06-16 11:12:52 -0700 |
commit | 111311fd935d9bd271c673cf10c0babe54bde8a6 (patch) | |
tree | 4742679ca244bb417e3d8fdacd51f269f4b969ae | |
parent | c1993e0f834cb4e0ccfd1dd54610ffe50de60238 (diff) | |
download | rest-query-111311fd935d9bd271c673cf10c0babe54bde8a6.tar.gz rest-query-111311fd935d9bd271c673cf10c0babe54bde8a6.tar.bz2 rest-query-111311fd935d9bd271c673cf10c0babe54bde8a6.zip |
Update PDS UI common code to be up to datev0.1.5
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}") + } } } } |