Added more tests.
This commit is contained in:
parent
fd39c25c7d
commit
562adec177
7 changed files with 293 additions and 13 deletions
86
src/test/kotlin/net/thauvin/erik/mobibot/AddonsTest.kt
Normal file
86
src/test/kotlin/net/thauvin/erik/mobibot/AddonsTest.kt
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
* AddonsTest.kt
|
||||||
|
*
|
||||||
|
* Copyright (c) 2004-2021, Erik C. Thauvin (erik@thauvin.net)
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of this project nor the names of its contributors may be
|
||||||
|
* used to endorse or promote products derived from this software without
|
||||||
|
* specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.thauvin.erik.mobibot
|
||||||
|
|
||||||
|
import assertk.assertThat
|
||||||
|
import assertk.assertions.containsExactly
|
||||||
|
import assertk.assertions.isEqualTo
|
||||||
|
import net.thauvin.erik.mobibot.commands.ChannelFeed
|
||||||
|
import net.thauvin.erik.mobibot.commands.Cycle
|
||||||
|
import net.thauvin.erik.mobibot.commands.Die
|
||||||
|
import net.thauvin.erik.mobibot.commands.Ignore
|
||||||
|
import net.thauvin.erik.mobibot.commands.links.Comment
|
||||||
|
import net.thauvin.erik.mobibot.commands.links.View
|
||||||
|
import net.thauvin.erik.mobibot.modules.Joke
|
||||||
|
import net.thauvin.erik.mobibot.modules.RockPaperScissors
|
||||||
|
import net.thauvin.erik.mobibot.modules.Twitter
|
||||||
|
import org.testng.annotations.Test
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class AddonsTest {
|
||||||
|
private val addons = Addons()
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun addTest() {
|
||||||
|
val p = Properties()
|
||||||
|
|
||||||
|
// Modules
|
||||||
|
addons.add(Joke(), p)
|
||||||
|
addons.add(RockPaperScissors(), p)
|
||||||
|
addons.add(Twitter(), p) // no properties, disabled.
|
||||||
|
assertThat(addons.modules.size, "modules = 2").isEqualTo(2)
|
||||||
|
|
||||||
|
assertThat(addons.modulesNames, "module names").containsExactly("Joke", "RockPaperScissors")
|
||||||
|
|
||||||
|
// Commands
|
||||||
|
addons.add(View(), p)
|
||||||
|
addons.add(Comment(), p)
|
||||||
|
addons.add(Cycle(), p)
|
||||||
|
addons.add(Die(), p) // invisible
|
||||||
|
addons.add(ChannelFeed("channel"), p) // no properties, disabled
|
||||||
|
addons.add(Ignore(), p.apply { put(Ignore.IGNORE_PROP, "nick") })
|
||||||
|
assertThat(addons.commands.size, "commands = 4").isEqualTo(5)
|
||||||
|
|
||||||
|
assertThat(addons.ops, "ops").containsExactly("cycle")
|
||||||
|
|
||||||
|
assertThat(addons.names, "names").containsExactly(
|
||||||
|
"joke",
|
||||||
|
"rock",
|
||||||
|
"paper",
|
||||||
|
"scissors",
|
||||||
|
"view",
|
||||||
|
"comment",
|
||||||
|
"ignore"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
|
@ -44,11 +44,18 @@ class RecapTest {
|
||||||
@Test
|
@Test
|
||||||
fun storeRecapTest() {
|
fun storeRecapTest() {
|
||||||
for (i in 1..20) {
|
for (i in 1..20) {
|
||||||
Recap.storeRecap("sender$i", "test $1", false)
|
Recap.storeRecap("sender$i", "test $i", false)
|
||||||
}
|
}
|
||||||
assertThat(Recap.recaps).all {
|
assertThat(Recap.recaps, "recap first and last").all {
|
||||||
size().isEqualTo(Recap.MAX_RECAPS)
|
size().isEqualTo(Recap.MAX_RECAPS)
|
||||||
prop(MutableList<String>::last).contains("sender20")
|
prop(MutableList<String>::first)
|
||||||
}
|
.matches("[1-2]\\d{3}-[01]\\d-[0-3]\\d [0-2]\\d:[0-6]\\d - sender11: test 11".toRegex())
|
||||||
|
prop(MutableList<String>::last)
|
||||||
|
.matches("[1-2]\\d{3}-[01]\\d-[0-3]\\d [0-2]\\d:[0-6]\\d - sender20: test 20".toRegex())
|
||||||
|
}
|
||||||
|
|
||||||
|
Recap.storeRecap("sender", "test action", true)
|
||||||
|
assertThat(Recap.recaps.last())
|
||||||
|
.matches("[1-2]\\d{3}-[01]\\d-[0-3]\\d [0-2]\\d:[0-6]\\d - sender test action".toRegex())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,9 +68,6 @@ class TellMessageTest {
|
||||||
tellMessage.isReceived = false
|
tellMessage.isReceived = false
|
||||||
assertThat(tellMessage.receptionDate, "reception date not set").isEqualTo(LocalDateTime.MIN)
|
assertThat(tellMessage.receptionDate, "reception date not set").isEqualTo(LocalDateTime.MIN)
|
||||||
tellMessage.isReceived = true
|
tellMessage.isReceived = true
|
||||||
assertThat(tellMessage.isReceived, "is received").isTrue()
|
|
||||||
assertThat(isValidDate(tellMessage.receptionDate), "received is valid date/time").isTrue()
|
assertThat(isValidDate(tellMessage.receptionDate), "received is valid date/time").isTrue()
|
||||||
tellMessage.isNotified = true
|
|
||||||
assertThat(tellMessage.isNotified, "is notified").isTrue()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
/*
|
||||||
|
* TellMessagesMgrTest.kt
|
||||||
|
*
|
||||||
|
* Copyright (c) 2004-2021, Erik C. Thauvin (erik@thauvin.net)
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of this project nor the names of its contributors may be
|
||||||
|
* used to endorse or promote products derived from this software without
|
||||||
|
* specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.thauvin.erik.mobibot.commands.tell
|
||||||
|
|
||||||
|
import assertk.all
|
||||||
|
import assertk.assertThat
|
||||||
|
import assertk.assertions.*
|
||||||
|
import org.testng.annotations.AfterClass
|
||||||
|
import org.testng.annotations.BeforeClass
|
||||||
|
import org.testng.annotations.Test
|
||||||
|
import java.time.LocalDateTime
|
||||||
|
import kotlin.io.path.createTempFile
|
||||||
|
import kotlin.io.path.deleteIfExists
|
||||||
|
import kotlin.io.path.fileSize
|
||||||
|
|
||||||
|
class TellMessagesMgrTest {
|
||||||
|
private val testFile = createTempFile(suffix = ".ser")
|
||||||
|
private val maxDays = 10L
|
||||||
|
private val testMessages = mutableListOf<TellMessage>().apply {
|
||||||
|
for (i in 0..5) {
|
||||||
|
this.add(i, TellMessage("sender$i", "recipient$i", "message $i"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
fun saveTest() {
|
||||||
|
TellMessagesMgr.save(testFile.toAbsolutePath().toString(), testMessages)
|
||||||
|
assertThat(testFile.fileSize()).isGreaterThan(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
fun afterClass() {
|
||||||
|
testFile.deleteIfExists()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun cleanTest() {
|
||||||
|
testMessages.add(TellMessage("sender", "recipient", "message").apply {
|
||||||
|
queued = LocalDateTime.now().minusDays(maxDays)
|
||||||
|
})
|
||||||
|
val size = testMessages.size
|
||||||
|
assertThat(TellMessagesMgr.clean(testMessages, maxDays + 2), "maxDays = 12").isFalse()
|
||||||
|
assertThat(TellMessagesMgr.clean(testMessages, maxDays), "maxDays = 10").isTrue()
|
||||||
|
assertThat(testMessages.size, "size-- after clean").isEqualTo(size - 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun loadTest() {
|
||||||
|
val messages = TellMessagesMgr.load(testFile.toAbsolutePath().toString())
|
||||||
|
for (i in messages.indices) {
|
||||||
|
assertThat(messages[i]).all {
|
||||||
|
prop(TellMessage::sender).isEqualTo(testMessages[i].sender)
|
||||||
|
prop(TellMessage::recipient).isEqualTo(testMessages[i].recipient)
|
||||||
|
prop(TellMessage::message).isEqualTo(testMessages[i].message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
/*
|
||||||
|
* EntriesUtilsTest.kt
|
||||||
|
*
|
||||||
|
* Copyright (c) 2004-2021, Erik C. Thauvin (erik@thauvin.net)
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of this project nor the names of its contributors may be
|
||||||
|
* used to endorse or promote products derived from this software without
|
||||||
|
* specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.thauvin.erik.mobibot.entries
|
||||||
|
|
||||||
|
import assertk.assertThat
|
||||||
|
import assertk.assertions.contains
|
||||||
|
import assertk.assertions.isEqualTo
|
||||||
|
import net.thauvin.erik.mobibot.Constants
|
||||||
|
import net.thauvin.erik.mobibot.entries.EntriesUtils.buildComment
|
||||||
|
import net.thauvin.erik.mobibot.entries.EntriesUtils.buildLink
|
||||||
|
import net.thauvin.erik.mobibot.entries.EntriesUtils.buildLinkLabel
|
||||||
|
import net.thauvin.erik.mobibot.entries.EntriesUtils.buildTags
|
||||||
|
import org.testng.annotations.Test
|
||||||
|
|
||||||
|
class EntriesUtilsTest {
|
||||||
|
private val comment = EntryComment("comment", "nick")
|
||||||
|
private val links = buildList {
|
||||||
|
for (i in 0..5) {
|
||||||
|
add(
|
||||||
|
EntryLink(
|
||||||
|
"https://www.mobitopia.org/$i",
|
||||||
|
"Mobitopia$i",
|
||||||
|
"Skynx$i",
|
||||||
|
"JimH$i",
|
||||||
|
"#mobitopia$i",
|
||||||
|
listOf("tag1", "tag2", "tag3", "TAG4", "Tag5")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun buildLinkLabelTest() {
|
||||||
|
assertThat(buildLinkLabel(1)).isEqualTo("${Constants.LINK_CMD}2")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun buildCommentTest() {
|
||||||
|
assertThat(buildComment(0, 0, comment)).isEqualTo("${Constants.LINK_CMD}1.1: [nick] comment")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun buildLinkTest() {
|
||||||
|
for (i in links.indices) {
|
||||||
|
assertThat(
|
||||||
|
buildLink(i - 1, links[i]), "link $i"
|
||||||
|
).isEqualTo("L$i: [Skynx$i] \u0002Mobitopia$i\u0002 ( \u000303https://www.mobitopia.org/$i\u000F )")
|
||||||
|
}
|
||||||
|
|
||||||
|
assertThat(links.first().addComment(comment), "add comment").isEqualTo(0)
|
||||||
|
assertThat(buildLink(0, links.first(), isView = true), "isView = true").contains("[+1]")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun buildTagsTest() {
|
||||||
|
for (i in links.indices) {
|
||||||
|
assertThat(
|
||||||
|
buildTags(i - 1, links[i]), "tag $i"
|
||||||
|
).isEqualTo("L${i}T: Skynx$i, tag1, tag2, tag3, tag4, tag5")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -81,13 +81,13 @@ class FeedMgrTest {
|
||||||
with(entries.links.first()) {
|
with(entries.links.first()) {
|
||||||
assertThat(nick, "first nick").isEqualTo("ErikT")
|
assertThat(nick, "first nick").isEqualTo("ErikT")
|
||||||
assertThat(date, "first date").isEqualTo(Date(1635638400000L))
|
assertThat(date, "first date").isEqualTo(Date(1635638400000L))
|
||||||
comments.forEachIndexed { i, entryComment ->
|
assertThat(comments.first(), "first comment").all {
|
||||||
assertThat(entryComment.comment, "comment ${i + 1}").endsWith("comment ${i + 1}.")
|
prop(EntryComment::comment).endsWith("comment 1.")
|
||||||
if (i == 0) {
|
prop(EntryComment::nick).isEqualTo("ErikT")
|
||||||
assertThat(entryComment.nick, "comment ${i + 1} nick").isEqualTo("ErikT")
|
|
||||||
} else {
|
|
||||||
assertThat(entryComment.nick, "comment ${i + 1} nick").isEqualTo("Skynx")
|
|
||||||
}
|
}
|
||||||
|
assertThat(comments.last(), "last comment").all {
|
||||||
|
prop(EntryComment::comment).endsWith("comment 2.")
|
||||||
|
prop(EntryComment::nick).isEqualTo("Skynx")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,16 @@ class TestMessage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testPrivateMessage() {
|
||||||
|
val msg = PrivateMessage("foo")
|
||||||
|
assertThat(msg).all {
|
||||||
|
prop(Message::isPrivate).isTrue()
|
||||||
|
prop(Message::isError).isFalse()
|
||||||
|
prop(Message::isNotice).isFalse()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testPublicMessage() {
|
fun testPublicMessage() {
|
||||||
val msg = PublicMessage("foo")
|
val msg = PublicMessage("foo")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue