@Subscribe
fun soneLocked(soneLockedEvent: SoneLockedEvent) {
synchronized(future) {
- future.get()?.also { cancelPreviousFuture(it, soneLockedEvent.sone) }
- future.set(executor.schedule(showNotification(soneLockedEvent.sone), 5, TimeUnit.MINUTES))
+ notification.add(soneLockedEvent.sone)
+ future.get()?.also(this::cancelPreviousFuture)
+ future.set(executor.schedule(::showNotification, 5, TimeUnit.MINUTES))
}
}
@Subscribe
fun soneUnlocked(soneUnlockedEvent: SoneUnlockedEvent) {
synchronized(future) {
- future.get()?.also { cancelPreviousFuture(it, soneUnlockedEvent.sone) }
+ notification.remove(soneUnlockedEvent.sone)
+ future.get()?.also(::cancelPreviousFuture)
}
}
- private fun cancelPreviousFuture(future: ScheduledFuture<*>, sone: Sone) {
- notification.remove(sone)
+ private fun cancelPreviousFuture(future: ScheduledFuture<*>) {
future.cancel(true)
}
- private fun showNotification(sone: Sone): () -> Unit = {
- notification.add(sone)
+ private fun showNotification() {
notificationManager.addNotification(notification)
}
SoneLockedHandler(notificationManager, notification, executor).also(eventBus::register)
}
+ @AfterTest
+ fun shutdownExecutor() = executor.shutdown()
+
@Test
- fun `notification is not added during the first five minutes`() {
+ fun `notification is not added before the command is run`() {
eventBus.post(SoneLockedEvent(sone))
assertThat(notificationManager.notifications, emptyIterable())
}
@Test
- fun `sone is added to notification from command`() {
+ fun `sone is added to notification immediately`() {
eventBus.post(SoneLockedEvent(sone))
- executor.scheduledDelay.single().command.run()
assertThat(notification.elements, contains(sone))
}