fix morny test package path problem, add test for hash file and NamingUtils

This commit is contained in:
A.C.Sukazyo Eyre 2023-10-18 23:40:17 +08:00
parent e7f403202d
commit a32018d600
Signed by: Eyre_S
GPG Key ID: C17CE40291207874
11 changed files with 97 additions and 72 deletions

View File

@ -23,7 +23,8 @@ if (!proj_git)
println "[MornyBuild] git repository not available for current working space! git version tag will be disabled." println "[MornyBuild] git repository not available for current working space! git version tag will be disabled."
else if (isCleanBuild()) { else if (isCleanBuild()) {
println "git: clean build at ${grgit.head().id}" println "git: clean build at ${grgit.head().id}"
} else { }
else {
final Status status = grgit.status() final Status status = grgit.status()
println "git: non-clean-build" println "git: non-clean-build"
if (!status.unstaged.allChanges.empty) { if (!status.unstaged.allChanges.empty) {
@ -45,7 +46,8 @@ final String proj_version_base = VERSION
final String proj_version_delta = VERSION_DELTA final String proj_version_delta = VERSION_DELTA
final boolean proj_version_use_delta = Boolean.parseBoolean(USE_DELTA) final boolean proj_version_use_delta = Boolean.parseBoolean(USE_DELTA)
final String proj_version = proj_version_base + (proj_version_use_delta ? "-δ${proj_version_delta}" : "") final String proj_version = proj_version_base + (proj_version_use_delta ? "-δ${proj_version_delta}" : "")
final String proj_version_full = proj_version + (proj_git ? "+git.${proj_commit.substring(0, 8)}" + (proj_clean?"":".δ") : "") final String proj_version_full = proj_version + (proj_git ?
"+git.${proj_commit.substring(0, 8)}" + (proj_clean ? "" : ".δ") : "")
final String proj_version_codename = CODENAME final String proj_version_codename = CODENAME
final long proj_code_time = proj_clean ? grgit.head().dateTime.toInstant().toEpochMilli() : System.currentTimeMillis() final long proj_code_time = proj_clean ? grgit.head().dateTime.toInstant().toEpochMilli() : System.currentTimeMillis()
@ -80,6 +82,7 @@ dependencies {
implementation "cc.sukazyo:messiva:${lib_messiva_v}" implementation "cc.sukazyo:messiva:${lib_messiva_v}"
implementation "cc.sukazyo:resource-tools:${lib_resourcetools_v}" implementation "cc.sukazyo:resource-tools:${lib_resourcetools_v}"
testImplementation "cc.sukazyo:resource-tools:${lib_resourcetools_v}"
implementation "com.github.pengrad:java-telegram-bot-api:${lib_javatelegramapi_v}" implementation "com.github.pengrad:java-telegram-bot-api:${lib_javatelegramapi_v}"
implementation "com.squareup.okhttp3:okhttp:${lib_okhttp_v}" implementation "com.squareup.okhttp3:okhttp:${lib_okhttp_v}"
@ -88,7 +91,8 @@ dependencies {
testImplementation "org.scalatest:scalatest_$proj_scala_api:${lib_scalatest_v}" testImplementation "org.scalatest:scalatest_$proj_scala_api:${lib_scalatest_v}"
testImplementation "org.scalatest:scalatest-freespec_$proj_scala_api:${lib_scalatest_v}" testImplementation "org.scalatest:scalatest-freespec_$proj_scala_api:${lib_scalatest_v}"
testRuntimeOnly "org.scala-lang.modules:scala-xml_$proj_scala_api:${lib_scalamodule_xml_v}" testRuntimeOnly "org.scala-lang.modules:scala-xml_$proj_scala_api:${lib_scalamodule_xml_v}"
testRuntimeOnly 'com.vladsch.flexmark:flexmark-all:0.64.6' // for generating HTML report // required by gradle-scalatest plugin testRuntimeOnly 'com.vladsch.flexmark:flexmark-all:0.64.6'
// for generating HTML report // required by gradle-scalatest plugin
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

View File

@ -1,10 +1,14 @@
package cc.sukazyo.cono.morny.test package cc.sukazyo.cono.morny.test
import cc.sukazyo.restools.ResourcesPackage
import org.scalatest.freespec.AnyFreeSpec import org.scalatest.freespec.AnyFreeSpec
import org.scalatest.matchers.should import org.scalatest.matchers.should
abstract class MornyTests extends AnyFreeSpec with should.Matchers { abstract class MornyTests extends AnyFreeSpec with should.Matchers {
val assets: ResourcesPackage =
ResourcesPackage(classOf[MornyTests], "assets_morny_tests")
val pending_val = "[not-implemented]" val pending_val = "[not-implemented]"
} }

View File

@ -1,4 +1,4 @@
package cc.sukazyo.cono.morny.test.cc.sukazyo.cono.morny.bot.event package cc.sukazyo.cono.morny.test.bot.event
import cc.sukazyo.cono.morny.bot.event.OnQuestionMarkReply import cc.sukazyo.cono.morny.bot.event.OnQuestionMarkReply
import cc.sukazyo.cono.morny.test.MornyTests import cc.sukazyo.cono.morny.test.MornyTests

View File

@ -1,42 +0,0 @@
package cc.sukazyo.cono.morny.test.cc.sukazyo.cono.morny.daemon
import cc.sukazyo.cono.morny.daemon.MedicationTimer
import cc.sukazyo.cono.morny.test.MornyTests
import cc.sukazyo.cono.morny.util.EpochDateTime.EpochMillis
import org.scalatest.prop.TableDrivenPropertyChecks
import java.time.ZoneOffset
class MedicationTimerTest extends MornyTests with TableDrivenPropertyChecks {
"on calculating next notify time :" - {
val examples = Table(
("current" , "notifyAt" , "useTimezone", "nextNotifyTime"),
(("2023-10-09T23:54:10.000","+8"), Set(1, 5, 19) , "+8" , ("2023-10-10T01:00:00.000","+8")),
(("2022-11-13T13:14:15.000","+2"), Set(7, 19, 21) , "+2" , ("2022-11-13T19:00:00.000","+2")),
(("2022-11-13T13:14:35.000","+8"), Set(7, 19, 21) , "+8" , ("2022-11-13T19:00:00" ,"+8")),
(("2022-11-13T13:14:35.174","+2"), Set(7, 19, 21) , "+2" , ("2022-11-13T19:00:00" ,"+2")),
(("1998-02-01T08:14:35.871","+8"), Set(7, 19, 21) , "+8" , ("1998-02-01T19:00:00" ,"+8")),
(("2022-11-13T00:00:00.000","-1"), Set(7, 19, 21) , "-1" , ("2022-11-13T07:00:00" ,"-1")),
(("2022-11-21T19:00:00.000","+0"), Set(7, 19, 21) , "+0" , ("2022-11-21T21:00:00" ,"+0")),
(("2022-12-31T21:00:00.000","+0"), Set(7, 19, 21) , "+0" , ("2023-01-01T07:00:00" ,"+0")),
(("2125-11-18T23:45:27.062","+0"), Set(7, 19, 21) , "+0" , ("2125-11-19T07:00:00" ,"+0"))
)
forAll (examples) { (current, notifyAt, useTimezone, nextNotifyTime) =>
val _curr = EpochMillis(current)
val _tz = ZoneOffset of useTimezone
val _next = EpochMillis(nextNotifyTime)
s"at time [$_curr], and need to be notify at hours ${notifyAt.mkString(",")} with $_tz :" - {
s"next notify should at time [$_curr]" in {
MedicationTimer.calcNextRoutineTimestamp(_curr, _tz, notifyAt) shouldEqual _next
}
}
}
}
}

View File

@ -0,0 +1,42 @@
package cc.sukazyo.cono.morny.test.daemon
import cc.sukazyo.cono.morny.daemon.MedicationTimer
import cc.sukazyo.cono.morny.test.MornyTests
import cc.sukazyo.cono.morny.util.EpochDateTime.EpochMillis
import org.scalatest.prop.TableDrivenPropertyChecks
import java.time.ZoneOffset
class MedicationTimerTest extends MornyTests with TableDrivenPropertyChecks {
"on calculating next notify time :" - {
val examples = Table(
("current", "notifyAt", "useTimezone", "nextNotifyTime"),
(("2023-10-09T23:54:10.000", "+8"), Set(1, 5, 19), "+8", ("2023-10-10T01:00:00.000", "+8")),
(("2022-11-13T13:14:15.000", "+2"), Set(7, 19, 21), "+2", ("2022-11-13T19:00:00.000", "+2")),
(("2022-11-13T13:14:35.000", "+8"), Set(7, 19, 21), "+8", ("2022-11-13T19:00:00", "+8")),
(("2022-11-13T13:14:35.174", "+2"), Set(7, 19, 21), "+2", ("2022-11-13T19:00:00", "+2")),
(("1998-02-01T08:14:35.871", "+8"), Set(7, 19, 21), "+8", ("1998-02-01T19:00:00", "+8")),
(("2022-11-13T00:00:00.000", "-1"), Set(7, 19, 21), "-1", ("2022-11-13T07:00:00", "-1")),
(("2022-11-21T19:00:00.000", "+0"), Set(7, 19, 21), "+0", ("2022-11-21T21:00:00", "+0")),
(("2022-12-31T21:00:00.000", "+0"), Set(7, 19, 21), "+0", ("2023-01-01T07:00:00", "+0")),
(("2125-11-18T23:45:27.062", "+0"), Set(7, 19, 21), "+0", ("2125-11-19T07:00:00", "+0"))
)
forAll(examples) { (current, notifyAt, useTimezone, nextNotifyTime) =>
val _curr = EpochMillis(current)
val _tz = ZoneOffset of useTimezone
val _next = EpochMillis(nextNotifyTime)
s"at time [$_curr], and need to be notify at hours ${notifyAt.mkString(",")} with $_tz :" - {
s"next notify should at time [$_curr]" in {
MedicationTimer.calcNextRoutineTimestamp(_curr, _tz, notifyAt) shouldEqual _next
}
}
}
}
}

View File

@ -1,4 +1,4 @@
package cc.sukazyo.cono.morny.test.cc.sukazyo.cono.morny.data package cc.sukazyo.cono.morny.test.data
import cc.sukazyo.cono.morny.data.BilibiliForms.* import cc.sukazyo.cono.morny.data.BilibiliForms.*
import cc.sukazyo.cono.morny.test.MornyTests import cc.sukazyo.cono.morny.test.MornyTests

View File

@ -67,13 +67,23 @@ class CommonEncryptTest extends MornyTests with TableDrivenPropertyChecks {
"da39a3ee5e6b4b0d3255bfef95601890afd80709", "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
) )),
) (
"md5.gif", ExampleHashValue(
"f5ca4f935d44b85c431a8bf788c0eaca",
"784cefac7a3699d704756d1a04189d6157405906",
"c0aa75d5345efae1019ca7a56eabc8673499dcee8ab8a8d657fb69f1f929b909",
"2d3123c543aa1745eeae57d2e6c31b6ea07dd2bb14cef2b5939116f9cf705953fb43cf6162c87ee1c7175d1de4af6d9de6f2bc817065cc854b912877848f937b"
))
) )
forAll(examples_binary) { (file, hashes) => forAll(examples_binary) { (file, hashes) =>
val _name = if file == null then "empty file" else s"file $file" val _name = if file == null then "empty file" else s"file $file"
val _data = if file == null then Array.empty[Byte] else throw NotImplementedError("does not applied file get yet") val _data =
if file == null then
Array.empty[Byte]
else
assets.getResource(file).read.readAllBytes
s"while hashing binary $_name :" - { s"while hashing binary $_name :" - {

View File

@ -1,9 +0,0 @@
package cc.sukazyo.cono.morny.test.utils
import cc.sukazyo.cono.morny.test.MornyTests
class FileUtilsTest extends MornyTests {
"while getting the MD5 hash of a file :" in pending
}

View File

@ -1,24 +1,39 @@
package cc.sukazyo.cono.morny.test.utils.tgapi.formatting package cc.sukazyo.cono.morny.test.utils.tgapi.formatting
import cc.sukazyo.cono.morny.test.MornyTests import cc.sukazyo.cono.morny.test.MornyTests
import cc.sukazyo.cono.morny.util.tgapi.formatting.NamingUtils
class NamingUtilsTest extends MornyTests { class NamingUtilsTest extends MornyTests {
"while generating inline query result id :" - { "while generating inline query result id :" - {
import NamingUtils.inlineQueryId
"while not use no data :" - { "while not use no data :" - {
"(different tag) should return different id" in pending "(different tag) should return different id" in:
"(same tag) should return the same id" in pending inlineQueryId("abc") should not equal inlineQueryId("abd")
inlineQueryId("abc") should not equal inlineQueryId("abe")
"(same tag) should return the same id" in:
inlineQueryId("abc") shouldEqual inlineQueryId("abc")
inlineQueryId("[e]vo]wvr'L\"pno[irvP)v]") shouldEqual inlineQueryId("[e]vo]wvr'L\"pno[irvP)v]")
} }
"while use data :" - { "while use data :" - {
"(same tag) with (same data) should return the same id" in pending "(same tag) with (same data) should return the same id" in:
"(same tag) with (different data) should return different id" in pending inlineQueryId("random-tag", "123456789") shouldEqual
"(different tag) with (same data) should return different id" in pending inlineQueryId("random-tag", "123456789")
"change tag and data position should return different id" in pending "(same tag) with (different data) should return different id" in:
inlineQueryId("random-tag", "123456789") should not equal
inlineQueryId("random-tag", "987654321")
"(different tag) with (same data) should return different id" in:
inlineQueryId("random-tag", "123456789") should not equal
inlineQueryId("set-tag", "123456789")
"change tag and data position should return different id" in:
inlineQueryId("tag", "data") should not equal
inlineQueryId("data", "tag")
} }

View File

@ -9,6 +9,7 @@ class TelegramUserInformationTest extends MornyTests with TableDrivenPropertyChe
private val examples_telegram_cdn = Table( private val examples_telegram_cdn = Table(
("username", "cdn"), ("username", "cdn"),
("Eyre_S", "cdn5"), ("Eyre_S", "cdn5"),
("ankarinnie", "cdn1")
) )
forAll(examples_telegram_cdn) ((username, cdn) => s"while user is @$username :" - { forAll(examples_telegram_cdn) ((username, cdn) => s"while user is @$username :" - {