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 ) } }