aboutsummaryrefslogblamecommitdiff
path: root/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala
blob: ccd5a3ab3ede8d5eda8f6331906a3eae773e0a4d (plain) (tree)
1
2
3
4
5
6
7
8

                              
                                           

                                    


                                            


                                                       
                                                            


                                                                             




                                   


                                                  



                                                    

                                                                                                                   
                                                                                                                      





                                                             



       




























                                                                                                         








                                        
                              




                                         
                          
                                                 
                                                            

                              

                                                     


     
package xyz.driver.pdsuidomain

import java.time.{LocalDate, LocalDateTime}
import java.time.temporal.ChronoUnit

import org.scalatest.FreeSpecLike
import org.scalatest.concurrent.ScalaFutures
import org.scalatest.time.{Millis, Span}
import xyz.driver.pdsuicommon.domain.{LongId, TextJson}
import xyz.driver.pdsuidomain.entities.Document

class DocumentSuite extends FreeSpecLike with ScalaFutures {

  implicit val defaultPatience: PatienceConfig =
    PatienceConfig(timeout = Span(1000, Millis), interval = Span(20, Millis))

  "validation" - {
    "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 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 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}")
          }
      }
    }
  }

  "getRequiredType" - {
    "getOPNType" in {
      val documentForOPNType = sampleDocument.copy(
        typeId = Some(LongId(1L)),
        providerTypeId = Some(LongId(1L)),
        startDate = Some(LocalDate.now().minus(2, ChronoUnit.DAYS))
      )
      val r = documentForOPNType.getRequiredType("Outpatient Physician Note", "Medical Oncology")
      assert(r.contains(Document.RequiredType.OPN), s"document should have the requiredType=OPN, but:$r")
    }

    "getPNType" in {
      val documentForPNType = sampleDocument.copy(
        typeId = Some(LongId(6))
      )
      val r = documentForPNType.getRequiredType("Pathology Report", "")
      assert(r.contains(Document.RequiredType.PN), s"document should have the requiredType=PN, but:$r")
    }
    "get None" in {
      val document = sampleDocument.copy(
        typeId = Some(LongId(1L)),
        providerTypeId = Some(LongId(1L)),
        startDate = Some(LocalDate.now().minus(7, ChronoUnit.MONTHS))
      )
      val r = document.getRequiredType("Outpatient Physician Note", "Medical Oncology")
      assert(r.isEmpty, s"document should have the requiredType=None, but:$r")
    }
  }

  private def sampleDocument = {
    val lastUpdate = LocalDateTime.now()

    Document(
      id = LongId(2002),
      status = Document.Status.New,
      previousStatus = None,
      assignee = None,
      previousAssignee = None,
      lastActiveUserId = None,
      recordId = LongId(2003),
      physician = None,
      typeId = Some(LongId(123)),
      providerName = Some("etst"),
      providerTypeId = Some(LongId(123)),
      requiredType = None,
      institutionName = Some("institution name"),
      startDate = Some(lastUpdate.toLocalDate.minusDays(2)),
      endDate = None,
      lastUpdate = lastUpdate,
      meta = Some(TextJson(Document.Meta(1.1, 2.2))),
      labelVersion = 1
    )
  }
}