Examples
test("dest field regional flag covers the selected case class and everything below it") {
case class Source(int: Int, str: String, level1: SourceLevel1)
case class SourceLevel1(INT: Int, STR: String, LEVEL2: SourceLevel2)
case class SourceLevel2(INT: Int, STR: String)
case class Dest(int: Int, str: String, level1: DestLevel1)
case class DestLevel1(INT: Int, STR: String, LEVEL2: DestLevel2)
case class DestLevel2(INT: Int, STR: String)
val source = Source(1, "1", SourceLevel1(2, "2", SourceLevel2(3, "3")))
val expected = Dest(1, "1", DestLevel1(2, "2", DestLevel2(3, "3")))
assertTransformsConfigured(source, expected)(
Field.modifyDestNames(_.toUpperCase).regional(_.level1)
)
}
test("source case regional flag covers the selected subtype and everything below (picked as a field in case class)") {
case class Source(int: Int, level1: SourceEnum)
case class Dest(int: Int, level1: DestEnum)
enum DestEnum {
case one(int: Int, str: String)
case two(int: Int, str: String, level1: DestLevel1, level2: DestLevel1Enum)
case three(int: Int, str: String)
}
enum SourceEnum {
case ONE(int: Int, str: String)
case TWO(int: Int, str: String, level1: SourceLevel1, level2: SourceLevel1Enum)
case THREE(int: Int, str: String)
}
enum SourceLevel1Enum {
case One
case Two
}
enum DestLevel1Enum {
case one
case two
}
case class SourceLevel1(int: Int)
case class DestLevel1(int: Int)
assertTransformsConfigured(
Source(1, SourceEnum.TWO(2, "2", SourceLevel1(3), SourceLevel1Enum.Two)),
Dest(1, DestEnum.two(2, "2", DestLevel1(3), DestLevel1Enum.two))
)(
Case.modifySourceNames(_.toLowerCase).regional(_.level1)
)
}
Examples of local flags:
test("dest field local flag covers the selected case class and nothing else") {
case class Source(int: Int, str: String, level1: SourceLevel1)
case class SourceLevel1(INT: Int, STR: String, LEVEL2: SourceLevel2)
case class SourceLevel2(int: Int, str: String)
case class Dest(int: Int, str: String, level1: DestLevel1)
case class DestLevel1(int: Int, str: String, level2: DestLevel2)
case class DestLevel2(int: Int, str: String)
val source = Source(1, "1", SourceLevel1(2, "2", SourceLevel2(3, "3")))
val expected = Dest(1, "1", DestLevel1(2, "2", DestLevel2(3, "3")))
assertTransformsConfigured(source, expected)(
Field.modifyDestNames(_.toUpperCase).local(_.level1)
)
}
and an example of a type specific flags:
test("source field type specific flag covers all subtypes of an enum and nothing else (even when the enum is nested)") {
case class Source(int: Int, level1: SourceEnum)
case class Dest(int: Int, level1: DestEnum)
sealed trait SourceEnum
object SourceEnum {
sealed trait NestLevel1 extends SourceEnum
sealed trait NestLevel2 extends SourceEnum
case class One(int: Int, str: String) extends NestLevel2
case class Two(int: Int, str: String, level1: SourceLevel1) extends NestLevel1
case class Three(int: Int, str: String) extends NestLevel2
}
sealed trait DestEnum
object DestEnum {
sealed trait NestLevel1 extends DestEnum
sealed trait NestLevel2 extends DestEnum
case class One(INT: Int, STR: String) extends NestLevel2
case class Two(INT: Int, STR: String, LEVEL1: DestLevel1) extends NestLevel1
case class Three(INT: Int, STR: String) extends NestLevel2
}
case class SourceLevel1(int: Int)
case class DestLevel1(int: Int)
assertTransformsConfigured(
Source(1, SourceEnum.Two(2, "2", SourceLevel1(3))),
Dest(1, DestEnum.Two(2, "2", DestLevel1(3)))
)(
Field.modifySourceNames(_.toUpperCase).typeSpecific[SourceEnum]
)
}