diff options
author | Aleksandr <ognelisar@gmail.com> | 2017-10-12 10:44:54 +0700 |
---|---|---|
committer | Aleksandr <ognelisar@gmail.com> | 2017-10-12 10:44:54 +0700 |
commit | f525ab2604cc5d1366c852bdbcb4d912bbcea800 (patch) | |
tree | 4fe4b35e1f474e2dc85a8885dc4c9002f3ea46c2 /src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala | |
parent | 9198729ebf3d20b650b4467daa0d484a3148f01c (diff) | |
parent | e15415d69ec990d5243e58704e232e619b80aa6f (diff) | |
download | rest-query-f525ab2604cc5d1366c852bdbcb4d912bbcea800.tar.gz rest-query-f525ab2604cc5d1366c852bdbcb4d912bbcea800.tar.bz2 rest-query-f525ab2604cc5d1366c852bdbcb4d912bbcea800.zip |
All merge conflicts are resolved
Diffstat (limited to 'src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala')
-rw-r--r-- | src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala | 98 |
1 files changed, 61 insertions, 37 deletions
diff --git a/src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala b/src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala index 5deaecb..ac5eec1 100644 --- a/src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala +++ b/src/test/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParserSuite.scala @@ -30,16 +30,20 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { "should convert column names to snake case" in { import SearchFilterBinaryOperation._ - val filter = SearchFilterParser.parse(Seq( - "filters" -> "status IN Summarized,ReviewCriteria,Flagged,Done", - "filters" -> "previousStatus NOTEQ New", - "filters" -> "previousStatus NOTEQ ReviewSummary" - )) - - assert(filter === Success(SearchFilterExpr.Intersection(List( - SearchFilterExpr.Atom.NAry(Dimension(None, "status"), In, Seq("Summarized", "ReviewCriteria", "Flagged", "Done")), - SearchFilterExpr.Atom.Binary(Dimension(None, "previous_status"), NotEq, "New"), - SearchFilterExpr.Atom.Binary(Dimension(None, "previous_status"), NotEq, "ReviewSummary"))))) + val filter = SearchFilterParser.parse( + Seq( + "filters" -> "status IN Summarized,ReviewCriteria,Flagged,Done", + "filters" -> "previousStatus NOTEQ New", + "filters" -> "previousStatus NOTEQ ReviewSummary" + )) + + assert( + filter === Success(SearchFilterExpr.Intersection(List( + SearchFilterExpr.Atom + .NAry(Dimension(None, "status"), In, Seq("Summarized", "ReviewCriteria", "Flagged", "Done")), + SearchFilterExpr.Atom.Binary(Dimension(None, "previous_status"), NotEq, "New"), + SearchFilterExpr.Atom.Binary(Dimension(None, "previous_status"), NotEq, "ReviewSummary") + )))) } "dimensions" - { "with table name" in check { @@ -50,11 +54,11 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { Prop.forAllNoShrink(dimensionGen) { case (left, right) => val raw = s"$left.$right" - val l = toSnakeCase(left) - val r = toSnakeCase(right) - SearchFilterParser.dimensionParser.parse(raw) match { + val l = toSnakeCase(left) + val r = toSnakeCase(right) + SearchFilterParser.dimensionParser.parse(raw) match { case Parsed.Success(Dimension(Some(`l`), `r`), _) => true - case _ => false + case _ => false } } } @@ -63,7 +67,7 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { val databaseS = Utils.toSnakeCase(s) SearchFilterParser.dimensionParser.parse(s) match { case Parsed.Success(Dimension(None, `databaseS`), _) => true - case _ => false + case _ => false } } } @@ -81,10 +85,11 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { ) Prop.forAllNoShrink(testQueryGen) { query => - SearchFilterParser.parse(Seq("filters" -> query)) + SearchFilterParser + .parse(Seq("filters" -> query)) .map { case SearchFilterExpr.Atom.Binary(_, Eq | NotEq | Like, _) => true - case x => throw new UnexpectedSearchFilterExprException(x) + case x => throw new UnexpectedSearchFilterExprException(x) } .successProp } @@ -96,7 +101,9 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { val testQueryGen = queryGen( dimensionGen = Gen.identifier, opGen = numericBinaryOpsGen, - valueGen = nonEmptyString.filter { s => !s.matches("^\\d+$") } + valueGen = nonEmptyString.filter { s => + !s.matches("^\\d+$") + } ) Prop.forAllNoShrink(testQueryGen) { query => @@ -106,12 +113,19 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { } "actual recordId" - { - "should not be parsed with text values" in { + "should not be parsed with numeric values" in { val filter = SearchFilterParser.parse(Seq("filters" -> "recordId EQ 1")) assert(filter === Success(SearchFilterExpr.Atom.Binary(Dimension(None, "record_id"), Eq, Long.box(1)))) } } + "actual isVisible boolean" - { + "should not be parsed with boolean values" in { + val filter = SearchFilterParser.parse(Seq("filters" -> "isVisible EQ true")) + assert(filter === Success(SearchFilterExpr.Atom.Binary(Dimension(None, "is_visible"), Eq, Boolean.box(true)))) + } + } + "all operators" - { "should be parsed with numeric values" in check { val testQueryGen = queryGen( @@ -121,10 +135,11 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { ) Prop.forAllNoShrink(testQueryGen) { query => - SearchFilterParser.parse(Seq("filters" -> query)) + SearchFilterParser + .parse(Seq("filters" -> query)) .map { case _: SearchFilterExpr.Atom.Binary => true - case x => throw new UnexpectedSearchFilterExprException(x) + case x => throw new UnexpectedSearchFilterExprException(x) } .successProp } @@ -140,7 +155,8 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { case Success(_) => () case Failure(t) => t.printStackTrace() } - assert(filter === Success(SearchFilterExpr.Atom.NAry(Dimension(None, "id"), In, Seq(Long.box(1), Long.box(5))))) + assert( + filter === Success(SearchFilterExpr.Atom.NAry(Dimension(None, "id"), In, Seq(Long.box(1), Long.box(5))))) } } @@ -152,10 +168,11 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { ) Prop.forAllNoShrink(testQueryGen) { query => - SearchFilterParser.parse(Seq("filters" -> query)) + SearchFilterParser + .parse(Seq("filters" -> query)) .map { case SearchFilterExpr.Atom.NAry(_, SearchFilterNAryOperation.In, _) => true - case x => throw new UnexpectedSearchFilterExprException(x) + case x => throw new UnexpectedSearchFilterExprException(x) } .successProp } @@ -189,16 +206,19 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { } } - private val CommonBinaryOps = Seq("eq", "noteq", "like") + private val CommonBinaryOps = Seq("eq", "noteq", "like") private val NumericBinaryOps = Seq("gt", "gteq", "lt", "lteq") - private val allBinaryOpsGen: Gen[String] = Gen.oneOf(CommonBinaryOps ++ NumericBinaryOps).flatMap(randomCapitalization) - private val commonBinaryOpsGen: Gen[String] = Gen.oneOf(CommonBinaryOps).flatMap(randomCapitalization) + private val allBinaryOpsGen: Gen[String] = + Gen.oneOf(CommonBinaryOps ++ NumericBinaryOps).flatMap(randomCapitalization) + private val commonBinaryOpsGen: Gen[String] = Gen.oneOf(CommonBinaryOps).flatMap(randomCapitalization) private val numericBinaryOpsGen: Gen[String] = Gen.oneOf(NumericBinaryOps).flatMap(randomCapitalization) private val inValueCharsGen: Gen[Char] = arbitrary[Char].filter(_ != ',') - private val nonEmptyString = arbitrary[String].filter { s => !s.safeTrim.isEmpty } + private val nonEmptyString = arbitrary[String].filter { s => + !s.safeTrim.isEmpty + } private val numericBinaryAtomValuesGen: Gen[String] = arbitrary[Long].map(_.toString) private val inValueGen: Gen[String] = { @@ -208,18 +228,22 @@ class SearchFilterParserSuite extends FreeSpecLike with Checkers { Gen.containerOfN[Seq, String](size, inValueGen).map(_.mkString(",")) } - private def queryGen(dimensionGen: Gen[String], opGen: Gen[String], valueGen: Gen[String]): Gen[String] = for { - dimension <- dimensionGen - op <- opGen - value <- valueGen - } yield s"$dimension $op $value" + private def queryGen(dimensionGen: Gen[String], opGen: Gen[String], valueGen: Gen[String]): Gen[String] = + for { + dimension <- dimensionGen + op <- opGen + value <- valueGen + } yield s"$dimension $op $value" private def randomCapitalization(input: String): Gen[String] = { Gen.containerOfN[Seq, Boolean](input.length, arbitrary[Boolean]).map { capitalize => - input.view.zip(capitalize).map { - case (currChar, true) => currChar.toUpper - case (currChar, false) => currChar - }.mkString + input.view + .zip(capitalize) + .map { + case (currChar, true) => currChar.toUpper + case (currChar, false) => currChar + } + .mkString } } |