diff options
-rw-r--r-- | src/main/scala/xyz/driver/core/database/Converters.scala | 14 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/database/DatabaseTest.scala | 18 |
2 files changed, 30 insertions, 2 deletions
diff --git a/src/main/scala/xyz/driver/core/database/Converters.scala b/src/main/scala/xyz/driver/core/database/Converters.scala new file mode 100644 index 0000000..cfc5afd --- /dev/null +++ b/src/main/scala/xyz/driver/core/database/Converters.scala @@ -0,0 +1,14 @@ +package xyz.driver.core.database + +import xyz.driver.core.rest.errors.DatabaseException + +import scala.reflect.ClassTag + +trait Converters { + def fromStringOrThrow[T](entityStr: String, mapper: (String => Option[T]), entityName: String): T = + mapper(entityStr).getOrElse(throw DatabaseException(s"Invalid $entityName in database: $entityStr")) + + def expectValid[T](mapper: String => Option[T], query: String)(implicit ct: ClassTag[T]): T = { + fromStringOrThrow[T](query, mapper, ct.toString()) + } +} diff --git a/src/test/scala/xyz/driver/core/database/DatabaseTest.scala b/src/test/scala/xyz/driver/core/database/DatabaseTest.scala index dafcd80..a5c65ea 100644 --- a/src/test/scala/xyz/driver/core/database/DatabaseTest.scala +++ b/src/test/scala/xyz/driver/core/database/DatabaseTest.scala @@ -2,13 +2,27 @@ package xyz.driver.core.database import org.scalatest.{FlatSpec, Matchers} import org.scalatest.prop.Checkers +import xyz.driver.core.rest.errors.DatabaseException class DatabaseTest extends FlatSpec with Matchers with Checkers { + import xyz.driver.core.generators._ "Date SQL converter" should "correctly convert back and forth to SQL dates" in { - import xyz.driver.core.generators.nextDate - for (date <- 1 to 100 map (_ => nextDate())) { sqlDateToDate(dateToSqlDate(date)) should be(date) } } + + "Converter helper methods" should "work correctly" in { + object TestConverter extends Converters + + val validLength = nextInt(10) + val valid = nextToken(validLength) + val invalid = nextToken(validLength + nextInt(10, 1)) + def mapper(s: String): Option[String] = if (s.length == validLength) Some(s) else None + + TestConverter.fromStringOrThrow(valid, mapper, valid) should be(valid) + TestConverter.expectValid(mapper, valid) should be(valid) + an[DatabaseException] should be thrownBy TestConverter.fromStringOrThrow(invalid, mapper, invalid) + } + } |