diff --git a/build.sbt b/build.sbt index 884234f3..1c4c170b 100644 --- a/build.sbt +++ b/build.sbt @@ -51,6 +51,11 @@ val testSettings = Seq( Test / fork := true ) +val testSettingsMUnit = Seq( + libraryDependencies ++= Dependencies.munit.map(_ % Test), + testFrameworks += new TestFramework("munit.Framework") +) + lazy val noPublish = Seq( publish := {}, publishLocal := {}, @@ -267,11 +272,12 @@ ${lines.map(_._1).mkString(",\n")} val query = crossProject(JSPlatform, JVMPlatform) + .withoutSuffixFor(JVMPlatform) .crossType(CrossType.Pure) .in(file("modules/query")) .disablePlugins(RevolverPlugin) .settings(sharedSettings) - .settings(testSettings) + .settings(testSettingsMUnit) .settings( name := "docspell-query", libraryDependencies += diff --git a/modules/query/src/test/scala/docspell/query/internal/AttrParserTest.scala b/modules/query/src/test/scala/docspell/query/internal/AttrParserTest.scala index 0634c83e..4c6dce3c 100644 --- a/modules/query/src/test/scala/docspell/query/internal/AttrParserTest.scala +++ b/modules/query/src/test/scala/docspell/query/internal/AttrParserTest.scala @@ -2,9 +2,9 @@ package docspell.query.internal import docspell.query.ItemQuery.Attr import docspell.query.internal.AttrParser -import minitest._ +import munit._ -object AttrParserTest extends SimpleTestSuite { +class AttrParserTest extends FunSuite { test("string attributes") { val p = AttrParser.stringAttr diff --git a/modules/query/src/test/scala/docspell/query/internal/BasicParserTest.scala b/modules/query/src/test/scala/docspell/query/internal/BasicParserTest.scala index c272298a..e397ce9b 100644 --- a/modules/query/src/test/scala/docspell/query/internal/BasicParserTest.scala +++ b/modules/query/src/test/scala/docspell/query/internal/BasicParserTest.scala @@ -1,10 +1,10 @@ package docspell.query.internal -import minitest._ +import munit._ import cats.data.{NonEmptyList => Nel} import docspell.query.internal.BasicParser -object BasicParserTest extends SimpleTestSuite { +class BasicParserTest extends FunSuite { test("single string values") { val p = BasicParser.singleString assertEquals(p.parseAll("abcde"), Right("abcde")) diff --git a/modules/query/src/test/scala/docspell/query/internal/DateParserTest.scala b/modules/query/src/test/scala/docspell/query/internal/DateParserTest.scala index ff538363..ec836ced 100644 --- a/modules/query/src/test/scala/docspell/query/internal/DateParserTest.scala +++ b/modules/query/src/test/scala/docspell/query/internal/DateParserTest.scala @@ -1,19 +1,10 @@ package docspell.query.internal -import minitest._ +import munit._ import docspell.query.Date import java.time.Period -object DateParserTest extends SimpleTestSuite { - - def ld(year: Int, m: Int, d: Int): Date.DateLiteral = - Date(year, m, d).fold(throw _, identity) - - def ldPlus(year: Int, m: Int, d: Int, p: Period): Date.Calc = - Date.Calc(ld(year, m, d), Date.CalcDirection.Plus, p) - - def ldMinus(year: Int, m: Int, d: Int, p: Period): Date.Calc = - Date.Calc(ld(year, m, d), Date.CalcDirection.Minus, p) +class DateParserTest extends FunSuite with ValueHelper { test("local date string") { val p = DateParser.dateFromString diff --git a/modules/query/src/test/scala/docspell/query/internal/ExprParserTest.scala b/modules/query/src/test/scala/docspell/query/internal/ExprParserTest.scala index f918e361..6f0fe07f 100644 --- a/modules/query/src/test/scala/docspell/query/internal/ExprParserTest.scala +++ b/modules/query/src/test/scala/docspell/query/internal/ExprParserTest.scala @@ -1,11 +1,10 @@ package docspell.query.internal import docspell.query.ItemQuery._ -import docspell.query.internal.SimpleExprParserTest.stringExpr -import minitest._ +import munit._ import cats.data.{NonEmptyList => Nel} -object ExprParserTest extends SimpleTestSuite { +class ExprParserTest extends FunSuite with ValueHelper { test("simple expr") { val p = ExprParser.exprParser diff --git a/modules/query/src/test/scala/docspell/query/internal/ItemQueryParserTest.scala b/modules/query/src/test/scala/docspell/query/internal/ItemQueryParserTest.scala index 4074748c..61dfdf86 100644 --- a/modules/query/src/test/scala/docspell/query/internal/ItemQueryParserTest.scala +++ b/modules/query/src/test/scala/docspell/query/internal/ItemQueryParserTest.scala @@ -1,10 +1,10 @@ package docspell.query.internal -import minitest._ +import munit._ import docspell.query.ItemQueryParser import docspell.query.ItemQuery -object ItemQueryParserTest extends SimpleTestSuite { +class ItemQueryParserTest extends FunSuite { test("reduce ands") { val q = ItemQueryParser.parseUnsafe("(&(&(&(& name:hello))))") diff --git a/modules/query/src/test/scala/docspell/query/internal/MacroParserTest.scala b/modules/query/src/test/scala/docspell/query/internal/MacroParserTest.scala index 0836884a..045d1120 100644 --- a/modules/query/src/test/scala/docspell/query/internal/MacroParserTest.scala +++ b/modules/query/src/test/scala/docspell/query/internal/MacroParserTest.scala @@ -1,9 +1,9 @@ package docspell.query.internal -import minitest._ +import munit._ import cats.parse.{Parser => P} -object MacroParserTest extends SimpleTestSuite { +class MacroParserTest extends FunSuite { test("fail with unkown macro names") { val p = MacroParser.parser(Map.empty) diff --git a/modules/query/src/test/scala/docspell/query/internal/OperatorParserTest.scala b/modules/query/src/test/scala/docspell/query/internal/OperatorParserTest.scala index b451289c..1a5a8af0 100644 --- a/modules/query/src/test/scala/docspell/query/internal/OperatorParserTest.scala +++ b/modules/query/src/test/scala/docspell/query/internal/OperatorParserTest.scala @@ -1,10 +1,10 @@ package docspell.query.internal -import minitest._ +import munit._ import docspell.query.ItemQuery.{Operator, TagOperator} import docspell.query.internal.OperatorParser -object OperatorParserTest extends SimpleTestSuite { +class OperatorParserTest extends FunSuite { test("operator values") { val p = OperatorParser.op assertEquals(p.parseAll("="), Right(Operator.Eq)) diff --git a/modules/query/src/test/scala/docspell/query/internal/SimpleExprParserTest.scala b/modules/query/src/test/scala/docspell/query/internal/SimpleExprParserTest.scala index 9f79aa51..32c152a0 100644 --- a/modules/query/src/test/scala/docspell/query/internal/SimpleExprParserTest.scala +++ b/modules/query/src/test/scala/docspell/query/internal/SimpleExprParserTest.scala @@ -2,11 +2,11 @@ package docspell.query.internal import cats.data.{NonEmptyList => Nel} import docspell.query.ItemQuery._ -import minitest._ +import munit._ import docspell.query.Date import java.time.Period -object SimpleExprParserTest extends SimpleTestSuite { +class SimpleExprParserTest extends FunSuite with ValueHelper { test("string expr") { val p = SimpleExprParser.stringExpr @@ -175,12 +175,4 @@ object SimpleExprParserTest extends SimpleTestSuite { ) } - def ld(y: Int, m: Int, d: Int) = - DateParserTest.ld(y, m, d) - - def stringExpr(op: Operator, name: Attr.StringAttr, value: String): Expr.SimpleExpr = - Expr.SimpleExpr(op, Property.StringProperty(name, value)) - - def dateExpr(op: Operator, name: Attr.DateAttr, value: Date): Expr.SimpleExpr = - Expr.SimpleExpr(op, Property.DateProperty(name, value)) } diff --git a/modules/query/src/test/scala/docspell/query/internal/ValueHelper.scala b/modules/query/src/test/scala/docspell/query/internal/ValueHelper.scala new file mode 100644 index 00000000..f2729f18 --- /dev/null +++ b/modules/query/src/test/scala/docspell/query/internal/ValueHelper.scala @@ -0,0 +1,24 @@ +package docspell.query.internal + +import docspell.query.Date +import docspell.query.ItemQuery._ +import java.time.Period + +trait ValueHelper { + + def ld(year: Int, m: Int, d: Int): Date.DateLiteral = + Date(year, m, d).fold(throw _, identity) + + def ldPlus(year: Int, m: Int, d: Int, p: Period): Date.Calc = + Date.Calc(ld(year, m, d), Date.CalcDirection.Plus, p) + + def ldMinus(year: Int, m: Int, d: Int, p: Period): Date.Calc = + Date.Calc(ld(year, m, d), Date.CalcDirection.Minus, p) + + def stringExpr(op: Operator, name: Attr.StringAttr, value: String): Expr.SimpleExpr = + Expr.SimpleExpr(op, Property.StringProperty(name, value)) + + def dateExpr(op: Operator, name: Attr.DateAttr, value: Date): Expr.SimpleExpr = + Expr.SimpleExpr(op, Property.DateProperty(name, value)) + +} diff --git a/modules/store/src/main/scala/docspell/store/qb/generator/ItemQueryGenerator.scala b/modules/store/src/main/scala/docspell/store/qb/generator/ItemQueryGenerator.scala index 173e8399..d02e9660 100644 --- a/modules/store/src/main/scala/docspell/store/qb/generator/ItemQueryGenerator.scala +++ b/modules/store/src/main/scala/docspell/store/qb/generator/ItemQueryGenerator.scala @@ -156,7 +156,6 @@ object ItemQueryGenerator { date match { case d: Date.DateLiteral => val ld = dateLiteralToDate(today)(d) - println(s">>>> date= $ld") Timestamp.atUtc(ld.atStartOfDay) case Date.Calc(date, c, period) => val ld = c match { @@ -165,7 +164,6 @@ object ItemQueryGenerator { case Date.CalcDirection.Minus => dateLiteralToDate(today)(date).minus(period) } - println(s">>>> date= $ld") Timestamp.atUtc(ld.atStartOfDay()) } diff --git a/modules/store/src/test/scala/docspell/store/generator/ItemQueryGeneratorTest.scala b/modules/store/src/test/scala/docspell/store/generator/ItemQueryGeneratorTest.scala index e2358f94..3d9e5b2e 100644 --- a/modules/store/src/test/scala/docspell/store/generator/ItemQueryGeneratorTest.scala +++ b/modules/store/src/test/scala/docspell/store/generator/ItemQueryGeneratorTest.scala @@ -24,14 +24,17 @@ object ItemQueryGeneratorTest extends SimpleTestSuite { ) val now: LocalDate = LocalDate.of(2021, 2, 25) + def mkTimestamp(year: Int, month: Int, day: Int): Timestamp = + Timestamp.atUtc(LocalDate.of(year, month, day).atStartOfDay()) + test("basic test") { val q = ItemQueryParser - .parseUnsafe("(& name:hello date>=2020-02-01 (| source=expense folder=test ))") + .parseUnsafe("(& name:hello date>=2020-02-01 (| source:expense* folder=test ))") val cond = ItemQueryGenerator(now, tables, Ident.unsafe("coll"))(q) val expect = - tables.item.name.like("hello") && tables.item.itemDate >= Timestamp.atUtc( - LocalDate.of(2020, 2, 1).atStartOfDay() - ) && (tables.item.source === "expense" || tables.folder.name === "test") + tables.item.name.like("hello") && + tables.item.itemDate >= mkTimestamp(2020, 2, 1) && + (tables.item.source.like("expense%") || tables.folder.name === "test") assertEquals(cond, expect) } diff --git a/project/Dependencies.scala b/project/Dependencies.scala index d737e1c9..8197c338 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -28,6 +28,7 @@ object Dependencies { val LogbackVersion = "1.2.3" val MariaDbVersion = "2.7.2" val MiniTestVersion = "2.9.3" + val MUnitVersion = "0.7.22" val OrganizeImportsVersion = "0.5.0" val PdfboxVersion = "2.0.22" val PoiVersion = "4.1.2" @@ -271,6 +272,11 @@ object Dependencies { "io.monix" %% "minitest-laws" % MiniTestVersion ).map(_ % Test) + val munit = Seq( + "org.scalameta" %% "munit" % MUnitVersion, + "org.scalameta" %% "munit-scalacheck" % MUnitVersion + ) + val kindProjectorPlugin = "org.typelevel" %% "kind-projector" % KindProjectorVersion val betterMonadicFor = "com.olegpy" %% "better-monadic-for" % BetterMonadicForVersion