aboutsummaryrefslogblamecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/DocumentGen.scala
blob: 1c77a787cad88eb3c3a0af9fa83de96d5301d7cf (plain) (tree)



































































                                                                                                                
package xyz.driver.pdsuidomain.fakes.entities.rep


import java.time.LocalDate

import xyz.driver.core.generators
import xyz.driver.core.generators.{nextBoolean, nextDouble, nextOption, nextString}
import xyz.driver.pdsuicommon.domain.{TextJson, User}
import xyz.driver.pdsuidomain.entities.{Document, DocumentType, MedicalRecord, ProviderType}
import xyz.driver.pdsuidomain.fakes.entities.common.{nextLocalDate, nextLocalDateTime, nextLongId, nextStringId}

object DocumentGen {
  implicit private class LocalDateOrdering(localData: LocalDate)
    extends Ordered[LocalDate] {

    override def compare(that: LocalDate): Int = {
      this.localData.compareTo(that)
    }
  }

  def nextDocumentStatus: Document.Status =
    generators.oneOf[Document.Status](Document.Status.All)

  def nextDocumentRequiredType: Document.RequiredType =
    generators.oneOf[Document.RequiredType](Document.RequiredType.All)

  def nextDocumentMeta: Document.Meta = {
    val (startPage, endPage) = {
      val startPage = nextDouble()
      val endPage = nextDouble()
      if (startPage > endPage) {
        endPage -> startPage
      }
      else {
        startPage -> endPage
      }
    }

    Document.Meta(
      nextOption(nextBoolean()), startPage, endPage
    )
  }

  def nextDocument: Document = {
    val dates = Common
      .genBoundedRangeOption[LocalDate](nextLocalDate, nextLocalDate)

    Document(
      id = nextLongId[Document],
      status = nextDocumentStatus,
      previousStatus = nextOption(nextDocumentStatus),
      assignee = nextOption(nextStringId[User]),
      previousAssignee = nextOption(nextStringId[User]),
      lastActiveUserId = nextOption(nextStringId[User]),
      recordId = nextLongId[MedicalRecord],
      physician = nextOption(nextString()),
      typeId = nextOption(nextLongId[DocumentType]),
      providerName = nextOption(nextString()),
      providerTypeId = nextOption(nextLongId[ProviderType]),
      requiredType = nextOption(nextDocumentRequiredType),
      meta = nextOption(TextJson(nextDocumentMeta)),
      startDate = dates._1,
      endDate = dates._2,
      lastUpdate = nextLocalDateTime
    )
  }

}