Skip to content

Commit 4ab2c05

Browse files
committed
Add test to transform from M[A] to M[B]
1 parent 9ec80b6 commit 4ab2c05

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

project/build.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=1.0.4
1+
sbt.version=1.0.4

src/main/scala/fluent/internal/Transformer.scala

+6-6
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ trait ImplicitTransformersPriority3 extends ImplicitTransformersPriority2 {
109109
// There is no instance of CNil, so this won't be used
110110
Left(TransformError("Can't transform into CNil"))
111111
}
112+
113+
implicit def optionExtractorTransformer[A, B](implicit
114+
transform: Transformer[A, B]
115+
): Transformer[Option[A], B] = instance { a: Option[A] =>
116+
a.map(transform.apply) getOrElse Left(TransformError("Missing required field"))
117+
}
112118
}
113119

114120
trait ImplicitTransformersPriority4 extends ImplicitTransformersPriority3 {
@@ -192,12 +198,6 @@ trait ImplicitTransformersPriority4 extends ImplicitTransformersPriority3 {
192198
}
193199

194200
trait ImplicitTransformersPriority5 extends ImplicitTransformersPriority4 {
195-
implicit def optionExtractorTransformer[A, B](implicit
196-
transform: Transformer[A, B]
197-
): Transformer[Option[A], B] = instance { a: Option[A] =>
198-
a.map(transform.apply) getOrElse Left(TransformError("Missing required field"))
199-
}
200-
201201
implicit def extractorTransformer[A, B](implicit
202202
generic: Generic.Aux[A, B :: HNil]
203203
): Transformer[A, B] = instance { a: A =>

src/test/scala/fluent/FluentSpec.scala

+8-3
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,18 @@ class FluentSpec extends WordSpecLike with Matchers {
4444
radius = 3.0,
4545
color = Some(Internal.Color.Red)
4646
)
47-
"translate External.Circle transformTo Internal.Circle" in {
47+
"tranform External.Circle into Internal.Circle" in {
4848
externalCircle.changeTo[Internal.Circle] shouldBe Right(internalCircle)
4949
}
50-
"translate Internal.Circle transformTo External.Circle" in {
50+
"transform Internal.Circle into External.Circle" in {
5151
internalCircle.changeTo[External.Circle] shouldBe Right(externalCircle)
5252
}
53-
53+
"transform Option[Internal.Circle] into Option[External.Circle]" in {
54+
import cats.instances.either._
55+
import cats.instances.option._
56+
Option(internalCircle).changeTo[Option[External.Circle]] shouldBe Right(Some(externalCircle))
57+
(None: Option[Internal.Circle]).changeTo[Option[External.Circle]] shouldBe Right(None)
58+
}
5459
val externalPost = External.Post(
5560
author = "Misty",
5661
body = "#Fluent is a cool library to implement your #DDD #translationLayer seamlessly",

0 commit comments

Comments
 (0)