diff --git a/build.gradle b/build.gradle index 53ec183..3d1220c 100644 --- a/build.gradle +++ b/build.gradle @@ -158,6 +158,7 @@ sonarqube { property('sonar.organization', 'ethauvin-github') property('sonar.projectKey', 'ethauvin_mobibot') property('sonar.host.url', 'https://sonarcloud.io') + property('sonar.coverage.jacoco.xmlReportPaths', "${project.buildDir}/reports/kover/report.xml") } } @@ -174,7 +175,7 @@ jacocoTestReport { } tasks.sonarqube { - dependsOn 'jacocoTestReport' + dependsOn 'koverReport' } task copyToDeploy(type: Copy) { diff --git a/src/main/kotlin/net/thauvin/erik/mobibot/commands/links/View.kt b/src/main/kotlin/net/thauvin/erik/mobibot/commands/links/View.kt index c9021fb..9ec9f70 100644 --- a/src/main/kotlin/net/thauvin/erik/mobibot/commands/links/View.kt +++ b/src/main/kotlin/net/thauvin/erik/mobibot/commands/links/View.kt @@ -44,7 +44,6 @@ import org.pircbotx.hooks.events.PrivateMessageEvent import org.pircbotx.hooks.types.GenericMessageEvent class View : AbstractCommand() { - private val maxEntries = 6 override val name = VIEW_CMD override val help = listOf( "To list or search the current URL posts:", @@ -55,6 +54,7 @@ class View : AbstractCommand() { override val isVisible = true companion object { + const val MAX_ENTRIES = 6 const val VIEW_CMD = "view" } @@ -70,8 +70,8 @@ class View : AbstractCommand() { internal fun parseArgs(args: String): Pair { var query = args.lowercase().trim() var start = 0 - if (query.isEmpty() && entries.links.size > maxEntries) { - start = entries.links.size - maxEntries + if (query.isEmpty() && entries.links.size > MAX_ENTRIES) { + start = entries.links.size - MAX_ENTRIES } if (query.matches("^\\d+(| .*)".toRegex())) { // view [] [] val split = query.split(" ", limit = 2) @@ -96,7 +96,7 @@ class View : AbstractCommand() { var index = start var entry: EntryLink var sent = 0 - while (index < entries.links.size && sent < maxEntries) { + while (index < entries.links.size && sent < MAX_ENTRIES) { entry = entries.links[index] if (query.isNotBlank()) { if (entry.matches(query)) { @@ -108,7 +108,7 @@ class View : AbstractCommand() { sent++ } index++ - if (sent == maxEntries && index < entries.links.size) { + if (sent == MAX_ENTRIES && index < entries.links.size) { event.sendMessage("To view more, try: ") event.sendMessage( helpFormat( diff --git a/src/test/kotlin/net/thauvin/erik/mobibot/commands/links/ViewTest.kt b/src/test/kotlin/net/thauvin/erik/mobibot/commands/links/ViewTest.kt index a239dfd..dae5cb4 100644 --- a/src/test/kotlin/net/thauvin/erik/mobibot/commands/links/ViewTest.kt +++ b/src/test/kotlin/net/thauvin/erik/mobibot/commands/links/ViewTest.kt @@ -44,7 +44,7 @@ class ViewTest { fun testParseArgs() { val view = View() - for (i in 1..3) { + for (i in 1..10) { LinksMgr.entries.links.add( EntryLink( "https://www.example.com/$i", @@ -77,8 +77,28 @@ class ViewTest { prop(Pair::second).isEqualTo("foo bar") } - assertThat(view.parseArgs("5"), "parseArgs(5)").all { + assertThat(view.parseArgs("foo bar"), "parseArgs(foo bar)").all { prop(Pair::first).isEqualTo(0) + prop(Pair::second).isEqualTo("foo bar") + } + + assertThat(view.parseArgs("${Int.MAX_VALUE}1"), "parseArgs(overflow)").all { + prop(Pair::first).isEqualTo(0) + prop(Pair::second).isEqualTo("${Int.MAX_VALUE}1") + } + + assertThat(view.parseArgs("1a"), "parseArgs(1a)").all { + prop(Pair::first).isEqualTo(0) + prop(Pair::second).isEqualTo("1a") + } + + assertThat(view.parseArgs("20"), "parseArgs(20)").all { + prop(Pair::first).isEqualTo(0) + prop(Pair::second).isEqualTo("") + } + + assertThat(view.parseArgs(""), "parseArgs()").all { + prop(Pair::first).isEqualTo(LinksMgr.entries.links.size - View.MAX_ENTRIES) prop(Pair::second).isEqualTo("") }