Skip to content
This repository has been archived by the owner on Mar 26, 2019. It is now read-only.

Commit

Permalink
tep-1005: perf testing, clean ups and documentation
Browse files Browse the repository at this point in the history
Signed-off-by: jaa127 <jaa@sn127.fi>
  • Loading branch information
jaa127 committed Dec 7, 2018
1 parent 03f0a89 commit 33e4887
Show file tree
Hide file tree
Showing 11 changed files with 501 additions and 125 deletions.
6 changes: 4 additions & 2 deletions api/src/main/scala/fi/sn127/tackler/api/TxnFilter.scala
Expand Up @@ -63,18 +63,20 @@ sealed trait TxnFilters extends TxnFilter {
val txnFilters: Seq[TxnFilter]
val opTxt: String

require(txnFilters.size > 1, "There must be at least two TxnFilters")

override def text(indent: String): String = {
val myIndent = indent + " "
indent + opTxt + "\n" + txnFilters.map(f => f.text(myIndent)).mkString("\n")
}
}

final case class TxnFiltersAND(txnFilters: Seq[TxnFilter]) extends TxnFilters() {
final case class TxnFilterAND(txnFilters: Seq[TxnFilter]) extends TxnFilters() {
val opTxt = "AND"

}

sealed case class TxnFiltersOR(txnFilters: Seq[TxnFilter]) extends TxnFilters {
sealed case class TxnFilterOR(txnFilters: Seq[TxnFilter]) extends TxnFilters {
val opTxt = "OR"
}

Expand Down
12 changes: 6 additions & 6 deletions core/src/main/scala/fi/sn127/tackler/filter/package.scala
Expand Up @@ -18,8 +18,8 @@ package object filter {
case tf: TxnFilterRoot => TxnFilterRootF.filter(tf, txn)

// Logicals
case tf: TxnFiltersAND => TxnFiltersANDF.filter(tf, txn)
case tf: TxnFiltersOR => TxnFilterORF.filter(tf, txn)
case tf: TxnFilterAND => TxnFilterANDF.filter(tf, txn)
case tf: TxnFilterOR => TxnFilterORF.filter(tf, txn)
case tf: TxnFilterNOT => TxnFilterNOTF.filter(tf, txn)

// TXN Header
Expand Down Expand Up @@ -66,16 +66,16 @@ package object filter {
}
}

implicit object TxnFiltersANDF extends CanTxnFilter[TxnFiltersAND] {
implicit object TxnFilterANDF extends CanTxnFilter[TxnFilterAND] {

override def filter(tf: TxnFiltersAND, txn: Transaction): Boolean = {
override def filter(tf: TxnFilterAND, txn: Transaction): Boolean = {
tf.txnFilters.forall(f => f.filter(txn))
}
}

implicit object TxnFilterORF extends CanTxnFilter[TxnFiltersOR] {
implicit object TxnFilterORF extends CanTxnFilter[TxnFilterOR] {

override def filter(tf: TxnFiltersOR, txn: Transaction): Boolean = {
override def filter(tf: TxnFilterOR, txn: Transaction): Boolean = {
tf.txnFilters.exists(f => f.filter(txn) === true)
}
}
Expand Down
78 changes: 68 additions & 10 deletions core/src/test/scala/fi/sn127/tackler/filter/TxnFilterJsonTest.scala
Expand Up @@ -32,10 +32,10 @@ class TxnFilterJsonTest extends TxnFilterSpec with FunSpecLike {
val filterJsonStr =
"""{
| "txnFilter" : {
| "TxnFiltersAND" : {
| "TxnFilterAND" : {
| "txnFilters" : [
| {
| "TxnFiltersAND" : {
| "TxnFilterAND" : {
| "txnFilters" : [
| {
| "TxnFilterTxnTSBegin" : {
Expand Down Expand Up @@ -71,7 +71,7 @@ class TxnFilterJsonTest extends TxnFilterSpec with FunSpecLike {
| }
| },
| {
| "TxnFiltersOR" : {
| "TxnFilterOR" : {
| "txnFilters" : [
| {
| "TxnFilterPostingAccount" : {
Expand Down Expand Up @@ -211,12 +211,18 @@ class TxnFilterJsonTest extends TxnFilterSpec with FunSpecLike {
"""
|{
| "txnFilter" : {
| "TxnFiltersAND" : {
| "TxnFilterAND" : {
| "txnFilters" : [
| {
| "TxnFilterPostingAccount" : {
| "regex" : ".*:abc"
| }
| },
| {
| "TxnFilterPostingAmountGreater" : {
| "regex" : ".*:abc",
| "amount" : 2.99
| }
| }
| ]
| }
Expand All @@ -231,22 +237,74 @@ class TxnFilterJsonTest extends TxnFilterSpec with FunSpecLike {
assert(txnData.txns.size === 1)
assert(checkUUID(txnData, uuidTxn04))
}

/**
* test: 2671b0ff-8b8d-42c8-95ae-e2dcf4d15ab0
*/
it("reject JSON AND filter with only one filter") {
val filterStr =
"""
|{
| "txnFilter" : {
| "TxnFilterAND" : {
| "txnFilters" : [
| {
| "TxnFilterPostingAccount" : {
| "regex" : ".*:abc"
| }
| }
| ]
| }
| }
|}
""".stripMargin

assertThrows[IllegalArgumentException] {
val _ = decode[TxnFilterRoot](filterStr)
}
}

/**
* test: 00754b91-91e4-4ace-b4e4-0f43ff599939
*/
it("reject JSON OR filter with only one filter") {
val filterStr =
"""
|{
| "txnFilter" : {
| "TxnFilterOR" : {
| "txnFilters" : [
| {
| "TxnFilterPostingAccount" : {
| "regex" : ".*:abc"
| }
| }
| ]
| }
| }
|}
""".stripMargin

assertThrows[IllegalArgumentException] {
val _ = decode[TxnFilterRoot](filterStr)
}
}
}

describe("Encode Filter and it's metadata") {
val txnData = TxnData(None, Seq.empty)

val txnFilter = TxnFilterRoot(
TxnFiltersAND(List[TxnFilter](
TxnFiltersAND(List[TxnFilter](
TxnFilterAND(List[TxnFilter](
TxnFilterAND(List[TxnFilter](
TxnFilterTxnTSBegin(ZonedDateTime.parse("2018-01-01T10:11:22.345+02:00")),
TxnFilterTxnTSEnd(ZonedDateTime.parse("2018-12-01T14:11:22.678+02:00")),
TxnFilterTxnCode("txn.code"),
TxnFilterTxnDescription("txn.desc"),
TxnFilterTxnUUID(UUID.fromString("29c548db-deb7-44bd-a6a2-e5e4258d256a")),
TxnFilterTxnComments("txn.comments"),
)),
TxnFiltersOR(List[TxnFilter](
TxnFilterOR(List[TxnFilter](
TxnFilterPostingAccount("posting:account"),
TxnFilterPostingAmountEqual("posting:amount:equal", 1),
TxnFilterPostingAmountLess("posting.amount:less", 2),
Expand Down Expand Up @@ -286,10 +344,10 @@ class TxnFilterJsonTest extends TxnFilterSpec with FunSpecLike {
| "TxnFilterDefinition" : {
| "txnFilterRoot" : {
| "txnFilter" : {
| "TxnFiltersAND" : {
| "TxnFilterAND" : {
| "txnFilters" : [
| {
| "TxnFiltersAND" : {
| "TxnFilterAND" : {
| "txnFilters" : [
| {
| "TxnFilterTxnTSBegin" : {
Expand Down Expand Up @@ -325,7 +383,7 @@ class TxnFilterJsonTest extends TxnFilterSpec with FunSpecLike {
| }
| },
| {
| "TxnFiltersOR" : {
| "TxnFilterOR" : {
| "txnFilters" : [
| {
| "TxnFilterPostingAccount" : {
Expand Down
Expand Up @@ -71,7 +71,7 @@ class TxnFilterPostingTest extends TxnFilterSpec with FlatSpecLike {
* test: 7784049f-ef3e-4185-8d33-f8c78478eef1
*/
it must "filter by account name with wildcard at begin" in {
val txnFilter = TxnFiltersAND(List(TxnFilterPostingAccount(".*:abc")))
val txnFilter =TxnFilterPostingAccount(".*:abc")

val txnData = txnsAll.filter(TxnFilterRoot(txnFilter))

Expand Down

0 comments on commit 33e4887

Please sign in to comment.