Skip to content

Commit

Permalink
Refactor encoder tests
Browse files Browse the repository at this point in the history
  • Loading branch information
pawelprazak committed Nov 30, 2023
1 parent c08e6ea commit 854d55f
Show file tree
Hide file tree
Showing 5 changed files with 250 additions and 264 deletions.
1 change: 0 additions & 1 deletion core/src/main/scala/besom/internal/ProtobufUtil.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ object ProtobufUtil:

extension (v: Value)
def asJsonString: Either[Throwable, String] = Try(printer.print(Value.toJavaProto(v))).toEither
def asJsonEncoded: Try[Value] = v.asJsonString.map(_.asValue).toTry

extension (s: String) def asValue: Value = Value(Kind.StringValue(s))
extension (s: Option[String])
Expand Down
66 changes: 0 additions & 66 deletions core/src/test/scala/besom/internal/ArgsEncoderTest.scala

This file was deleted.

120 changes: 2 additions & 118 deletions core/src/test/scala/besom/internal/ContextTest.scala
Original file line number Diff line number Diff line change
@@ -1,30 +1,10 @@
package besom.internal

import RunResult.{given, *}
import com.google.protobuf.struct.*
import besom.types.{ Output => _, * }

sealed abstract class TestEnum(val name: String, val value: String) extends StringEnum

object TestEnum extends EnumCompanion[String, TestEnum]("TestEnum"):
object Test1 extends TestEnum("Test1", "Test1 value")
object AnotherTest extends TestEnum("AnotherTest", "AnotherTest value")
object `weird-test` extends TestEnum("weird-test", "weird-test value")

override val allInstances: Seq[TestEnum] = Seq(
Test1,
AnotherTest,
`weird-test`
)

case class PlainCaseClass(data: String, moreData: Int) derives Encoder
case class OptionCaseClass(data: Option[String], moreData: Option[Int]) derives Encoder
case class TestArgs(a: Output[String], b: Output[PlainCaseClass]) derives ArgsEncoder
case class TestOptionArgs(a: Output[Option[String]], b: Output[Option[PlainCaseClass]]) derives ArgsEncoder
case class TestProviderArgs(`type`: Output[String], pcc: Output[PlainCaseClass]) derives ProviderArgsEncoder
case class TestProviderOptionArgs(`type`: Output[Option[String]], pcc: Output[Option[PlainCaseClass]]) derives ProviderArgsEncoder
import besom.types.{Output => _, *}

class ContextTest extends munit.FunSuite:

case class TestResource(urn: Output[URN], id: Output[ResourceId], url: Output[String]) extends CustomResource
case class AnotherTestResource(urn: Output[URN], id: Output[ResourceId], url: Output[String]) extends CustomResource

Expand All @@ -38,99 +18,3 @@ class ContextTest extends munit.FunSuite:
assert(v1 == v1)
assert(v2 == v2)
}

def encodeProviderArgs[A: ProviderArgsEncoder](a: A): (Map[String, Set[Resource]], Struct) =
summon[ProviderArgsEncoder[A]].encode(a, filterOut = _ => false).unsafeRunSync()

def encodeArgs[A: ArgsEncoder](a: A): (Map[String, Set[Resource]], Struct) =
summon[ArgsEncoder[A]].encode(a, filterOut = _ => false).unsafeRunSync()

def encode[A: Encoder](a: A): (Set[Resource], Value) =
summon[Encoder[A]].encode(a).unsafeRunSync()

test("simple ProviderArgsEncoder test") {
given Context = DummyContext().unsafeRunSync()

val (res, value) = encodeProviderArgs(
TestProviderArgs(
Output("SOME-TEST-PROVIDER"),
Output(PlainCaseClass(data = "werks?", moreData = 123))
)
)

assert(res.contains("type"), res)
assert(res.contains("pcc"), res)
assert(value.fields("type").kind.isStringValue, value.fields("type"))
assert(value.fields("pcc").kind.isStringValue, value.fields("pcc"))
assertEquals(value.fields("type").getStringValue, "SOME-TEST-PROVIDER")
assertEquals(value.fields("pcc").getStringValue, "{\"data\":\"werks?\",\"moreData\":123.0}")
}

test("optional ProviderArgsEncoder test") {
given Context = DummyContext().unsafeRunSync()

val (res, value) = encodeProviderArgs(
TestProviderOptionArgs(
Output(None),
Output(None)
)
)

assert(!res.contains("type"), res)
assert(!res.contains("pcc"), res)
}

test("ArgsEncoder works") {
given Context = DummyContext().unsafeRunSync()

val (res, value) = encodeArgs(
TestArgs(
Output("SOME-TEST-PROVIDER"),
Output(PlainCaseClass(data = "werks?", moreData = 123))
)
)

assert(res.contains("a"), res)
assert(res.contains("b"), res)
assert(value.fields("a").kind.isStringValue, value)
assert(value.fields("b").kind.isStructValue, value)
assertEquals(value.fields("a").getStringValue, "SOME-TEST-PROVIDER")
assertEquals(value.fields("b").getStructValue.fields("data").getStringValue, "werks?")
}

test("optional ArgsEncoder test") {
given Context = DummyContext().unsafeRunSync()

val (res, value) = encodeArgs(
TestOptionArgs(
Output(None),
Output(None)
)
)

assert(res.isEmpty, res)
assert(value.fields.isEmpty, value)
}

test("quick dirty Encoder test - enums") {
given Context = DummyContext().unsafeRunSync()

val (res, value) = encode[TestEnum](
TestEnum.`weird-test`
)

assert(res.isEmpty)
assert(value.kind.isStringValue)
assertEquals(value.getStringValue, "weird-test value")
}

test("optional Encoder test") {
given Context = DummyContext().unsafeRunSync()

val (res, value) = encode[OptionCaseClass](
OptionCaseClass(None, None)
)

assert(res.isEmpty)
assert(value.getStructValue.fields.isEmpty, value)
}
Loading

0 comments on commit 854d55f

Please sign in to comment.