@Test
fun `notification is added to notification manager from command`() {
eventBus.post(SoneLockedEvent(sone))
- executor.scheduledDelay.single().command.run()
+ executor.scheduleds.single().command.run()
assertThat(notificationManager.notifications, contains<Any>(notification))
}
@Test
fun `command is registered with a delay of five minutes`() {
eventBus.post(SoneLockedEvent(sone))
- with(executor.scheduledDelay.single()) {
+ with(executor.scheduleds.single()) {
assertThat(timeUnit.toNanos(delay), equalTo(TimeUnit.MINUTES.toNanos(5)))
}
}
fun `unlocking sone after locking will cancel the future`() {
eventBus.post(SoneLockedEvent(sone))
eventBus.post(SoneUnlockedEvent(sone))
- assertThat(executor.scheduledDelay.first().future.isCancelled, equalTo(true))
+ assertThat(executor.scheduleds.first().future.isCancelled, equalTo(true))
}
@Test
@Test
fun `unlocking sone after showing the notification will remove the sone from the notification`() {
eventBus.post(SoneLockedEvent(sone))
- executor.scheduledDelay.single().command.run()
+ executor.scheduleds.single().command.run()
eventBus.post(SoneUnlockedEvent(sone))
assertThat(notification.elements, emptyIterable())
}
fun `locking two sones will cancel the first command`() {
eventBus.post(SoneLockedEvent(sone))
eventBus.post(SoneLockedEvent(sone))
- assertThat(executor.scheduledDelay.first().future.isCancelled, equalTo(true))
+ assertThat(executor.scheduleds.first().future.isCancelled, equalTo(true))
}
@Test
fun `locking two sones will schedule a second command`() {
eventBus.post(SoneLockedEvent(sone))
eventBus.post(SoneLockedEvent(sone))
- assertThat(executor.scheduledDelay[1], notNullValue())
+ assertThat(executor.scheduleds[1], notNullValue())
}
}
private val sone: Sone = IdOnlySone("sone")
-
-private data class Scheduled(val command: Runnable, val delay: Long, val timeUnit: TimeUnit, val future: ScheduledFuture<*>)
-
-private class TestScheduledThreadPoolExecutor : ScheduledThreadPoolExecutor(1) {
-
- val scheduledDelay = mutableListOf<Scheduled>()
-
- override fun schedule(command: Runnable, delay: Long, unit: TimeUnit): ScheduledFuture<*> =
- super.schedule(command, delay, unit)
- .also { scheduledDelay += Scheduled(command, delay, unit, it) }
-
-}
--- /dev/null
+/**
+ * Sone - Testing.kt - Copyright © 2019 David ‘Bombe’ Roden
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.pterodactylus.sone.web.notification
+
+import java.util.concurrent.*
+
+/** Information about a scheduled runnable. */
+data class Scheduled(val command: Runnable, val delay: Long, val timeUnit: TimeUnit, val future: ScheduledFuture<*>)
+
+/**
+ * [ScheduledThreadPoolExecutor] extension that stores parameters and return
+ * values for the [ScheduledThreadPoolExecutor.schedule] method.
+ */
+class TestScheduledThreadPoolExecutor : ScheduledThreadPoolExecutor(1) {
+
+ val scheduleds = mutableListOf<Scheduled>()
+
+ override fun schedule(command: Runnable, delay: Long, unit: TimeUnit): ScheduledFuture<*> =
+ super.schedule(command, delay, unit)
+ .also { scheduleds += Scheduled(command, delay, unit, it) }
+
+}