app/models/EpicTest.scala (70 lines of code) (raw):

package models import enumeratum.{CirceEnum, Enum, EnumEntry} import io.circe.generic.extras.Configuration import io.circe.generic.extras.auto._ import io.circe.generic.extras.semiauto._ import io.circe.{Decoder, Encoder} import models.Methodology.defaultMethodologies import scala.collection.immutable.IndexedSeq sealed trait SeparateArticleCountType extends EnumEntry object SeparateArticleCountType extends Enum[SeparateArticleCountType] with CirceEnum[SeparateArticleCountType] { override val values: IndexedSeq[SeparateArticleCountType] = findValues case object above extends SeparateArticleCountType } case class SeparateArticleCount( `type`: SeparateArticleCountType, copy: Option[String] ) case class EpicVariant( name: String, heading: Option[String], paragraphs: List[String], highlightedText: Option[String] = None, showTicker: Boolean = false, // Deprecated - use tickerSettings instead tickerSettings: Option[TickerSettings] = None, image: Option[Image] = None, cta: Option[Cta], secondaryCta: Option[SecondaryCta], separateArticleCount: Option[SeparateArticleCount], showChoiceCards: Option[Boolean], bylineWithImage: Option[BylineWithImage], defaultChoiceCardFrequency: Option[String], showSignInLink: Option[Boolean], newsletterSignup: Option[NewsletterSignup], ) case class EpicTest( name: String, channel: Option[Channel], status: Option[Status], lockStatus: Option[LockStatus], priority: Option[Int], nickname: Option[String], locations: List[Region] = Nil, regionTargeting: Option[RegionTargeting]=None, tagIds: List[String] = Nil, sections: List[String] = Nil, excludedTagIds: List[String] = Nil, excludedSections: List[String] = Nil, alwaysAsk: Boolean = false, maxViews: Option[MaxViews], userCohort: Option[UserCohort] = None, hasCountryName: Boolean = false, variants: List[EpicVariant], highPriority: Boolean = false, // has been removed from form, but might be used in future useLocalViewLog: Boolean = false, articlesViewedSettings: Option[ArticlesViewedSettings] = None, controlProportionSettings: Option[ControlProportionSettings] = None, deviceType: Option[DeviceType] = None, campaignName: Option[String] = Some("NOT_IN_CAMPAIGN"), signedInStatus: Option[SignedInStatus] = Some(SignedInStatus.All), consentStatus: Option[ConsentStatus] = Some(ConsentStatus.All), methodologies: List[Methodology] = defaultMethodologies ) extends ChannelTest[EpicTest] { override def withChannel(channel: Channel): EpicTest = this.copy(channel = Some(channel)) override def withPriority(priority: Int): EpicTest = this.copy(priority = Some(priority)) } object EpicTest { implicit val customConfig: Configuration = Configuration.default.withDefaults implicit val epicTestDecoder: Decoder[EpicTest] = deriveConfiguredDecoder[EpicTest] implicit val epicTestEncoder: Encoder[EpicTest] = deriveConfiguredEncoder[EpicTest] }