All checks were successful
/ Build and Release Library (push) Successful in 2m31s
Reviewed-on: #3
244 lines
7.6 KiB
Scala
244 lines
7.6 KiB
Scala
package gs.predicate.v0.json
|
|
|
|
import gs.datagen.v0.Gen
|
|
import gs.datagen.v0.generators.Range
|
|
import io.circe.Json
|
|
import java.time.LocalDate
|
|
import munit.FunSuite
|
|
|
|
class JsonComparisonTests extends FunSuite:
|
|
import JsonComparisonTests.*
|
|
|
|
test("should support True") {
|
|
val jc = JsonComparison.True
|
|
assert(jc.compare(Json.obj()))
|
|
}
|
|
|
|
test("should support False") {
|
|
val jc = JsonComparison.False
|
|
assert(!jc.compare(Json.obj()))
|
|
}
|
|
|
|
test("should support And") {
|
|
val jc1 = JsonComparison.And(
|
|
List(JsonComparison.True, JsonComparison.True, JsonComparison.False)
|
|
)
|
|
val jc2 = JsonComparison.And(List(JsonComparison.True, JsonComparison.True))
|
|
val jc3 = JsonComparison.And(List())
|
|
val json = Json.obj()
|
|
assert(!jc1.compare(json))
|
|
assert(jc2.compare(json))
|
|
assert(jc3.compare(json))
|
|
}
|
|
|
|
test("should support Or") {
|
|
val jc1 = JsonComparison.Or(
|
|
List(JsonComparison.True, JsonComparison.True, JsonComparison.False)
|
|
)
|
|
val jc2 =
|
|
JsonComparison.Or(List(JsonComparison.False, JsonComparison.False))
|
|
val jc3 = JsonComparison.Or(List())
|
|
val json = Json.obj()
|
|
assert(jc1.compare(json))
|
|
assert(!jc2.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
test("should support Eq") {
|
|
val key = keyGen.gen()
|
|
val value = jsonStringGen.gen()
|
|
val json = Json.obj(key -> value)
|
|
val other = Json.obj("x" -> value)
|
|
val jc = JsonComparison.Eq(json)
|
|
assert(jc.compare(json))
|
|
assert(!jc.compare(other))
|
|
}
|
|
|
|
test("should support Neq") {
|
|
val key = keyGen.gen()
|
|
val value = jsonStringGen.gen()
|
|
val json = Json.obj(key -> value)
|
|
val other = Json.obj("x" -> value)
|
|
val jc = JsonComparison.Neq(json)
|
|
assert(!jc.compare(json))
|
|
assert(jc.compare(other))
|
|
}
|
|
|
|
test("should support StringContains") {
|
|
val str = strGen.gen()
|
|
val substr = str.substring(3, 7)
|
|
val json = Json.fromString(str)
|
|
val jc1 = JsonComparison.StringContains(substr)
|
|
val jc2 = JsonComparison.StringContains(str)
|
|
val jc3 = JsonComparison.StringContains(longStrGen.gen())
|
|
assert(jc1.compare(json))
|
|
assert(jc2.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
test("should support StringPrefix") {
|
|
val str = strGen.gen()
|
|
val substr = str.take(4)
|
|
val json = Json.fromString(str)
|
|
val jc1 = JsonComparison.StringPrefix(substr)
|
|
val jc2 = JsonComparison.StringPrefix(str)
|
|
val jc3 = JsonComparison.StringPrefix(longStrGen.gen())
|
|
assert(jc1.compare(json))
|
|
assert(jc2.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
test("should support StringSuffix") {
|
|
val str = strGen.gen()
|
|
val substr = str.takeRight(4)
|
|
val json = Json.fromString(str)
|
|
val jc1 = JsonComparison.StringSuffix(substr)
|
|
val jc2 = JsonComparison.StringSuffix(str)
|
|
val jc3 = JsonComparison.StringSuffix(longStrGen.gen())
|
|
assert(jc1.compare(json))
|
|
assert(jc2.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
test("should support IntLessThan") {
|
|
val int = intGen.gen()
|
|
val target = 101
|
|
val json = Json.fromInt(int)
|
|
val jc1 = JsonComparison.IntLessThan(target)
|
|
val jc3 = JsonComparison.IntLessThan(-1)
|
|
assert(jc1.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
test("should support IntLessThanOrEqualTo") {
|
|
val int = intGen.gen()
|
|
val target = 101
|
|
val json = Json.fromInt(int)
|
|
val jc1 = JsonComparison.IntLessThanOrEqualTo(target)
|
|
val jc2 = JsonComparison.IntLessThanOrEqualTo(int)
|
|
val jc3 = JsonComparison.IntLessThan(-1)
|
|
assert(jc1.compare(json))
|
|
assert(jc2.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
test("should support IntGreaterThan") {
|
|
val int = intGen.gen()
|
|
val target = -1
|
|
val json = Json.fromInt(int)
|
|
val jc1 = JsonComparison.IntGreaterThan(target)
|
|
val jc3 = JsonComparison.IntGreaterThan(101)
|
|
assert(jc1.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
test("should support IntGreaterThanOrEqualTo") {
|
|
val int = intGen.gen()
|
|
val target = -1
|
|
val json = Json.fromInt(int)
|
|
val jc1 = JsonComparison.IntGreaterThanOrEqualTo(target)
|
|
val jc2 = JsonComparison.IntGreaterThanOrEqualTo(int)
|
|
val jc3 = JsonComparison.IntGreaterThan(101)
|
|
assert(jc1.compare(json))
|
|
assert(jc2.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
test("should support IntBetweenInclusive") {
|
|
val int = intGen.gen()
|
|
val lower = 0
|
|
val upper = 100
|
|
val json = Json.fromInt(int)
|
|
val jc1 = JsonComparison.IntBetweenInclusive(lower, upper)
|
|
val jc2 = JsonComparison.IntBetweenInclusive(int, int)
|
|
val jc3 = JsonComparison.IntBetweenInclusive(1000, 10000)
|
|
assert(jc1.compare(json))
|
|
assert(jc2.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
test("should support IntBetweenExclusive") {
|
|
val int = intGen.gen()
|
|
val lower = -1
|
|
val upper = 101
|
|
val json = Json.fromInt(int)
|
|
val jc1 = JsonComparison.IntBetweenExclusive(lower, upper)
|
|
val jc2 = JsonComparison.IntBetweenExclusive(int, int)
|
|
val jc3 = JsonComparison.IntBetweenExclusive(1000, 10000)
|
|
assert(jc1.compare(json))
|
|
assert(!jc2.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
test("should support DateEq") {
|
|
val date = dateGen.gen()
|
|
val target = date
|
|
val json = Json.fromString(date.toString())
|
|
val jc1 = JsonComparison.DateEq(target)
|
|
val jc2 = JsonComparison.DateEq(target.plusDays(1L))
|
|
assert(jc1.compare(json))
|
|
assert(!jc2.compare(json))
|
|
}
|
|
|
|
test("should support DateBefore") {
|
|
val date = dateGen.gen()
|
|
val target = date.plusDays(1L)
|
|
val json = Json.fromString(date.toString())
|
|
val jc1 = JsonComparison.DateBefore(target)
|
|
val jc2 = JsonComparison.DateBefore(date)
|
|
assert(jc1.compare(json))
|
|
assert(!jc2.compare(json))
|
|
}
|
|
|
|
test("should support DateAfter") {
|
|
val date = dateGen.gen()
|
|
val target = date.minusDays(1L)
|
|
val json = Json.fromString(date.toString())
|
|
val jc1 = JsonComparison.DateAfter(target)
|
|
val jc2 = JsonComparison.DateAfter(date)
|
|
assert(jc1.compare(json))
|
|
assert(!jc2.compare(json))
|
|
}
|
|
|
|
test("should support DateBetweenInclusive") {
|
|
val date = dateGen.gen()
|
|
val lower = date.minusDays(1L)
|
|
val upper = date.plusDays(1L)
|
|
val json = Json.fromString(date.toString())
|
|
val jc1 = JsonComparison.DateBetweenInclusive(lower, upper)
|
|
val jc2 = JsonComparison.DateBetweenInclusive(date, date)
|
|
val jc3 = JsonComparison.DateBetweenInclusive(
|
|
date.plusDays(1L),
|
|
date.plusDays(1000L)
|
|
)
|
|
assert(jc1.compare(json))
|
|
assert(jc2.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
test("should support DateBetweenExclusive") {
|
|
val date = dateGen.gen()
|
|
val lower = date.minusDays(1L)
|
|
val upper = date.plusDays(1L)
|
|
val json = Json.fromString(date.toString())
|
|
val jc1 = JsonComparison.DateBetweenExclusive(lower, upper)
|
|
val jc2 = JsonComparison.DateBetweenExclusive(date, date)
|
|
val jc3 = JsonComparison.DateBetweenExclusive(
|
|
date.plusDays(1L),
|
|
date.plusDays(1000L)
|
|
)
|
|
assert(jc1.compare(json))
|
|
assert(!jc2.compare(json))
|
|
assert(!jc3.compare(json))
|
|
}
|
|
|
|
object JsonComparisonTests:
|
|
|
|
val keyGen: Gen[String] = Gen.string.alphaNumeric(Range.between(8, 16))
|
|
val strGen: Gen[String] = Gen.string.alphaNumeric(Range.between(8, 16))
|
|
val longStrGen: Gen[String] = Gen.string.alphaNumeric(Range.fixed(32))
|
|
val jsonStringGen: Gen[Json] = strGen.map(Json.fromString)
|
|
val intGen: Gen[Int] = Gen.integer.inRange(0, 100)
|
|
val dateGen: Gen[LocalDate] = Gen.date.aroundToday(Range.between(1, 3))
|
|
|
|
end JsonComparisonTests
|