This is an automated email from the ASF dual-hosted git repository.
guoyp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/griffin.git
The following commit(s) were added to refs/heads/master by this push:
new 350663f [GRIFFIN-298] add CompletenessExpr2DQSteps test case
350663f is described below
commit 350663f61842ede34f06224aec92e38d1bff92ee
Author: wankunde <[email protected]>
AuthorDate: Sat Nov 16 11:11:34 2019 +0800
[GRIFFIN-298] add CompletenessExpr2DQSteps test case
Add some test case for CompletenessExpr2DQSteps transform, in addition some
small code optimization.
Author: wankunde <[email protected]>
Closes #550 from wankunde/CompletenessExpr2DQSteps.
---
measure/pom.xml | 16 ++++---
.../dsl/transform/CompletenessExpr2DQSteps.scala | 13 +++---
.../transform/CompletenessExpr2DQStepsTest.scala | 50 ++++++++++++++++++++++
3 files changed, 67 insertions(+), 12 deletions(-)
diff --git a/measure/pom.xml b/measure/pom.xml
index 8fa5f5d..66ebe4c 100644
--- a/measure/pom.xml
+++ b/measure/pom.xml
@@ -44,7 +44,7 @@ under the License.
<slf4j.version>1.7.21</slf4j.version>
<log4j.version>1.2.16</log4j.version>
<curator.version>2.10.0</curator.version>
- <scalamock.version>3.6.0</scalamock.version>
+ <mockito.version>1.10.19</mockito.version>
<mysql.java.version>5.1.47</mysql.java.version>
<cassandra.connector.version>2.4.1</cassandra.connector.version>
</properties>
@@ -169,12 +169,16 @@ under the License.
<version>${scalatest.version}</version>
<scope>test</scope>
</dependency>
-
- <!--scala mock-->
<dependency>
- <groupId>org.scalamock</groupId>
-
<artifactId>scalamock-scalatest-support_${scala.binary.version}</artifactId>
- <version>${scalamock.version}</version>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>${mockito.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <version>${mockito.version}</version>
<scope>test</scope>
</dependency>
diff --git
a/measure/src/main/scala/org/apache/griffin/measure/step/builder/dsl/transform/CompletenessExpr2DQSteps.scala
b/measure/src/main/scala/org/apache/griffin/measure/step/builder/dsl/transform/CompletenessExpr2DQSteps.scala
index 46def8f..f5b2581 100644
---
a/measure/src/main/scala/org/apache/griffin/measure/step/builder/dsl/transform/CompletenessExpr2DQSteps.scala
+++
b/measure/src/main/scala/org/apache/griffin/measure/step/builder/dsl/transform/CompletenessExpr2DQSteps.scala
@@ -143,6 +143,7 @@ case class CompletenessExpr2DQSteps(context: DQContext,
// 5. complete metric
val completeTableName = ruleParam.getOutDfName()
val completeColName = details.getStringOrKey(_complete)
+ // scalastyle:off
val completeMetricSql = procType match {
case BatchProcessType =>
s"""
@@ -161,6 +162,7 @@ case class CompletenessExpr2DQSteps(context: DQContext,
|ON `${totalCountTableName}`.`${ConstantColumns.tmst}` =
`${incompleteCountTableName}`.`${ConstantColumns.tmst}`
""".stripMargin
}
+ // scalastyle:on
val completeWriteStep = {
val metricOpt = ruleParam.getOutputOpt(MetricOutputType)
val mwName =
metricOpt.flatMap(_.getNameOpt).getOrElse(completeTableName)
@@ -198,31 +200,30 @@ case class CompletenessExpr2DQSteps(context: DQContext,
// only have one regular expression
val regexValue: String = errorConf.getValues.apply(0)
val afterReplace: String = regexValue.replaceAll("""\\""", """\\\\""")
- val result: String = s"`${columnName}` REGEXP '${afterReplace}'"
- return result
+ return s"(`${columnName}` REGEXP '${afterReplace}')"
} else if ("enumeration".equalsIgnoreCase(errorType.get)) {
val values: Seq[String] = errorConf.getValues
var inResult = ""
var nullResult = ""
if (values.contains("hive_none")) {
// hive_none means NULL
- nullResult = s"(`${columnName}` IS NULL)"
+ nullResult = s"`${columnName}` IS NULL"
}
val valueWithQuote: String = values.filter(value =>
!"hive_none".equals(value))
.map(value => s"'${value}'").mkString(", ")
if (!StringUtils.isEmpty(valueWithQuote)) {
- inResult = s"(`${columnName}` IN (${valueWithQuote}))"
+ inResult = s"`${columnName}` IN (${valueWithQuote})"
}
var result = ""
if (!StringUtils.isEmpty(inResult) && !StringUtils.isEmpty(nullResult)) {
result = s"(${inResult} OR ${nullResult})"
} else if (!StringUtils.isEmpty(inResult)) {
- result = inResult
+ result = s"($inResult)"
} else {
- result = nullResult
+ result = s"($nullResult)"
}
return result
diff --git
a/measure/src/test/scala/org/apache/griffin/measure/step/builder/dsl/transform/CompletenessExpr2DQStepsTest.scala
b/measure/src/test/scala/org/apache/griffin/measure/step/builder/dsl/transform/CompletenessExpr2DQStepsTest.scala
new file mode 100644
index 0000000..d9c5af6
--- /dev/null
+++
b/measure/src/test/scala/org/apache/griffin/measure/step/builder/dsl/transform/CompletenessExpr2DQStepsTest.scala
@@ -0,0 +1,50 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+package org.apache.griffin.measure.step.builder.dsl.transform
+
+import org.scalatest._
+import org.scalatest.mockito.MockitoSugar
+
+import org.apache.griffin.measure.configuration.dqdefinition.RuleErrorConfParam
+import org.apache.griffin.measure.configuration.dqdefinition.RuleParam
+import org.apache.griffin.measure.context.DQContext
+import org.apache.griffin.measure.step.builder.dsl.expr.Expr
+
+class CompletenessExpr2DQStepsTest extends FlatSpec with Matchers with
MockitoSugar {
+
+ "CompletenessExpr2DQSteps" should "get correct where clause" in {
+ val completeness = CompletenessExpr2DQSteps(mock[DQContext], mock[Expr],
mock[RuleParam])
+
+ val regexClause = completeness.getEachErrorWhereClause(
+ RuleErrorConfParam("id", "regex", List(raw"\d+")))
+ regexClause shouldBe (raw"(`id` REGEXP '\\d+')")
+
+ val enumerationClause = completeness.getEachErrorWhereClause(
+ RuleErrorConfParam("id", "enumeration", List("1", "2", "3")))
+ enumerationClause shouldBe ("(`id` IN ('1', '2', '3'))")
+
+ val noneClause = completeness.getEachErrorWhereClause(
+ RuleErrorConfParam("id", "enumeration", List("hive_none")))
+ noneClause shouldBe ("(`id` IS NULL)")
+
+ val fullClause = completeness.getEachErrorWhereClause(
+ RuleErrorConfParam("id", "enumeration", List("1", "hive_none", "3",
"foo,bar")))
+ fullClause shouldBe ("(`id` IN ('1', '3', 'foo,bar') OR `id` IS NULL)")
+ }
+}