Skip to content

Commit

Permalink
finos#1296 add follow-up tests / naming improvements (finos#1321)
Browse files Browse the repository at this point in the history
- also removes java test suite that was added only to gauge Java
  friendliness of the API.
  • Loading branch information
junaidzm13 authored May 1, 2024
1 parent 09d7122 commit 25f4f4d
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 136 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,19 @@ private class ColumnValueParser(private val mapper: SchemaMapper) extends Filter

override def parse(columnName: String, columnValue: String): Either[ErrorMessage, ParsedResult[Any]] = {
mapper.externalSchemaField(columnName) match {
case Some(f) => RawColumnValueParser(f).parse(columnValue).map(ParsedResult(f, _))
case Some(f) => CoreParser(f).parse(columnValue).map(ParsedResult(f, _))
case None => Left(externalFieldNotFoundError(columnName))
}
}

override def parse(columnName: String, columnValues: List[String]): Either[ErrorMessage, ParsedResult[List[Any]]] = {
mapper.externalSchemaField(columnName) match {
case Some(f) => parseValues(RawColumnValueParser(f), columnValues)
case Some(f) => parseValues(CoreParser(f), columnValues)
case None => Left(externalFieldNotFoundError(columnName))
}
}

private def parseValues(parser: RawColumnValueParser,
private def parseValues(parser: CoreParser,
columnValues: List[String]): Either[ErrorMessage, ParsedResult[List[Any]]] = {
val (errors, parsedValues) = columnValues.partitionMap(parser.parse)
val combinedError = errors.mkString("\n")
Expand All @@ -56,8 +56,8 @@ private class ColumnValueParser(private val mapper: SchemaMapper) extends Filter
private def externalFieldNotFoundError(columnName: String): String =
s"Failed to find mapped external field for column `$columnName`"

private case class RawColumnValueParser(field: SchemaField) {
val column: Column = mapper.tableColumn(field.name).get
private case class CoreParser(field: SchemaField) {
val column: Column = mapper.internalVuuColumn(field.name).get

def parse(columnValue: String): Either[ErrorMessage, Any] = {
parseStringToColumnDataType(columnValue).flatMap(convertColumnValueToExternalFieldType)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class FilterColumnValueParserTest extends AnyFeatureSpec with Matchers {
private val parser = FilterColumnValueParser(schemaMapper)

Feature("parse(String, String)") {
Scenario("should correctly parse valid column value with user-passed toString applied") {
Scenario("should return parsed valid column value") {
val timestamp = Date.valueOf("2024-02-10").getTime

val res = parser.parse("date", s"$timestamp")
Expand Down Expand Up @@ -57,7 +57,7 @@ class FilterColumnValueParserTest extends AnyFeatureSpec with Matchers {
}

Feature("parse(String, List[String])") {
Scenario("should correctly parse valid column values with user-passed toString applied") {
Scenario("should return all parsed values when all are valid") {
val timestamp1 = Date.valueOf("2024-02-10").getTime
val timestamp2 = Date.valueOf("2024-02-12").getTime

Expand All @@ -80,7 +80,7 @@ class FilterColumnValueParserTest extends AnyFeatureSpec with Matchers {
res.isLeft shouldBe true
}

Scenario("should return error when unable to parse all values") {
Scenario("should return error when unable to parse any values") {
val res = parser.parse("quantity", List("first-not-a-long", "second-not-a-long"))

res.isLeft shouldBe true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import scala.util.Try
* and vice versa.
* */
trait SchemaMapper {
def tableColumn(extFieldName: String): Option[Column]
def internalVuuColumn(extFieldName: String): Option[Column]
def externalSchemaField(columnName: String): Option[SchemaField]
def toMappedExternalFieldType(columnName: String, columnValue: Any): Option[Any]
def toMappedInternalColumnType(extFieldName: String, extFieldValue: Any): Option[Any]
Expand All @@ -31,7 +31,7 @@ private class SchemaMapperImpl(private val externalSchema: ExternalEntitySchema,
private val externalFieldByColumnName: Map[String, SchemaField] = getExternalSchemaFieldsByColumnName
private val internalColumnByExtFieldName: Map[String, Column] = getTableColumnByExternalField

override def tableColumn(extFieldName: String): Option[Column] = internalColumnByExtFieldName.get(extFieldName)
override def internalVuuColumn(extFieldName: String): Option[Column] = internalColumnByExtFieldName.get(extFieldName)
override def externalSchemaField(columnName: String): Option[SchemaField] = externalFieldByColumnName.get(columnName)

override def toInternalRowMap(externalValues: List[_]): Map[String, Any] = toInternalRowMap(externalValues.toArray)
Expand All @@ -47,13 +47,13 @@ private class SchemaMapperImpl(private val externalSchema: ExternalEntitySchema,

override def toMappedExternalFieldType(columnName: String, columnValue: Any): Option[Any] = {
externalSchemaField(columnName).flatMap(field => {
val col = tableColumn(field.name).get
val col = internalVuuColumn(field.name).get
safeTypeConvert(columnValue, castToAny(col.dataType), field.dataType)
})
}

override def toMappedInternalColumnType(extFieldName: String, extFieldValue: Any): Option[Any] = {
tableColumn(extFieldName).flatMap(col => {
internalVuuColumn(extFieldName).flatMap(col => {
val field = externalSchemaField(col.name).get
safeTypeConvert(extFieldValue, castToAny(field.dataType), col.dataType)
})
Expand Down

This file was deleted.

This file was deleted.

Loading

0 comments on commit 25f4f4d

Please sign in to comment.