aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Rand <arand@ucsc.edu>2018-02-09 14:56:49 -0800
committerGitHub <noreply@github.com>2018-02-09 14:56:49 -0800
commit3830ddd237c0c538c1d5329377b00ada2eecefdf (patch)
tree76a482cdc6bded1cf2eb14a3faf603aff8a09577
parentdb338bd1aeb8175967cc0bdc271317576876633d (diff)
parentec1d7f92fe23a5d928b4d579f3a49817a939f3c2 (diff)
downloaddriver-core-3830ddd237c0c538c1d5329377b00ada2eecefdf.tar.gz
driver-core-3830ddd237c0c538c1d5329377b00ada2eecefdf.tar.bz2
driver-core-3830ddd237c0c538c1d5329377b00ada2eecefdf.zip
Merge pull request #113 from drivergroup/ar-add-extra-converters-for-optionv1.7.5
related to API-1252, add extra converters for option
-rw-r--r--src/main/scala/xyz/driver/core/database/Converters.scala13
-rw-r--r--src/test/scala/xyz/driver/core/database/DatabaseTest.scala15
2 files changed, 28 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/core/database/Converters.scala b/src/main/scala/xyz/driver/core/database/Converters.scala
index f98d6b4..ad79abf 100644
--- a/src/main/scala/xyz/driver/core/database/Converters.scala
+++ b/src/main/scala/xyz/driver/core/database/Converters.scala
@@ -4,10 +4,23 @@ import xyz.driver.core.rest.errors.DatabaseException
import scala.reflect.ClassTag
+/**
+ * Helper methods for converting between table rows and Scala objects
+ */
trait Converters {
def fromStringOrThrow[ADT](entityStr: String, mapper: (String => Option[ADT]), entityName: String): ADT =
mapper(entityStr).getOrElse(throw DatabaseException(s"Invalid $entityName in database: $entityStr"))
def expectValid[ADT](mapper: String => Option[ADT], query: String)(implicit ct: ClassTag[ADT]): ADT =
fromStringOrThrow[ADT](query, mapper, ct.toString())
+
+ def expectExistsAndValid[ADT](mapper: String => Option[ADT], query: Option[String], contextMsg: String = "")(
+ implicit ct: ClassTag[ADT]): ADT = {
+ expectValid[ADT](mapper, query.getOrElse(throw DatabaseException(contextMsg)))
+ }
+
+ def expectValidOrEmpty[ADT](mapper: String => Option[ADT], query: Option[String], contextMsg: String = "")(
+ implicit ct: ClassTag[ADT]): Option[ADT] = {
+ query.map(expectValid[ADT](mapper, _))
+ }
}
diff --git a/src/test/scala/xyz/driver/core/database/DatabaseTest.scala b/src/test/scala/xyz/driver/core/database/DatabaseTest.scala
index a5c65ea..f85dcad 100644
--- a/src/test/scala/xyz/driver/core/database/DatabaseTest.scala
+++ b/src/test/scala/xyz/driver/core/database/DatabaseTest.scala
@@ -17,12 +17,27 @@ class DatabaseTest extends FlatSpec with Matchers with Checkers {
val validLength = nextInt(10)
val valid = nextToken(validLength)
+ val validOp = Some(valid)
val invalid = nextToken(validLength + nextInt(10, 1))
+ val invalidOp = Some(invalid)
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)
+
+ TestConverter.expectExistsAndValid(mapper, validOp) should be(valid)
+
+ TestConverter.expectValidOrEmpty(mapper, validOp) should be(Some(valid))
+ TestConverter.expectValidOrEmpty(mapper, None) should be(None)
+
an[DatabaseException] should be thrownBy TestConverter.fromStringOrThrow(invalid, mapper, invalid)
+
+ an[DatabaseException] should be thrownBy TestConverter.expectValid(mapper, invalid)
+
+ an[DatabaseException] should be thrownBy TestConverter.expectExistsAndValid(mapper, invalidOp)
+
+ an[DatabaseException] should be thrownBy TestConverter.expectValidOrEmpty(mapper, invalidOp)
}
}