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.{LongId, TextJson, User} import xyz.driver.pdsuidomain.entities._ 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) } } private def nextDates = Common.genBoundedRangeOption[LocalDate](nextLocalDate, nextLocalDate) private def nextStartAndEndPagesOption = Common.nextStartAndEndPages private def nextStartAndEndPage = Common.genBoundedRange(nextDouble(),nextDouble()) def nextDocumentStatus: Document.Status = generators.oneOf[Document.Status](Document.Status.All) def nextDocumentRequiredType: Document.RequiredType = generators.oneOf[Document.RequiredType](Document.RequiredType.All) def nextDocumentHistoryState: DocumentHistory.State = generators.oneOf[DocumentHistory.State](DocumentHistory.State.All) def nextDocumentHistoryAction: DocumentHistory.Action = generators.oneOf[DocumentHistory.Action](DocumentHistory.Action.All) def nextDocumentMeta: Document.Meta = { val (startPage, endPage) = nextStartAndEndPage Document.Meta( nextOption(nextBoolean()), startPage, endPage ) } def nextDocument: Document = { val dates = nextDates 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 ) } def nextDocumentType: DocumentType = { DocumentType( id = nextLongId[DocumentType], name = nextString() ) } def nextDocumentIssue(documentId: LongId[Document]): DocumentIssue = { val pages = nextStartAndEndPagesOption DocumentIssue( id = nextLongId[DocumentIssue], userId = nextStringId[User], documentId = documentId, startPage = pages._1, endPage = pages._2, lastUpdate = nextLocalDateTime, isDraft = nextBoolean(), text = nextString(), archiveRequired = nextBoolean() ) } def nextDocumentHistory(documentId: LongId[Document]): DocumentHistory = { DocumentHistory( id = nextLongId[DocumentHistory], executor = nextStringId[User], documentId = documentId, state = nextDocumentHistoryState, action = nextDocumentHistoryAction, created = nextLocalDateTime ) } }