From: David ‘Bombe’ Roden Date: Tue, 3 Dec 2019 17:56:09 +0000 (+0100) Subject: 🎨 Fix module and handler for locked Sones X-Git-Tag: v81^2~5^2~80 X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=commitdiff_plain;h=7cb0100ec63244e5f64654947206b610f96b006f 🎨 Fix module and handler for locked Sones --- diff --git a/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModule.kt b/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModule.kt index 5f3af43..02bc3f9 100644 --- a/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModule.kt +++ b/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModule.kt @@ -19,15 +19,35 @@ package net.pterodactylus.sone.web.notification import com.google.inject.* import net.pterodactylus.sone.core.* +import net.pterodactylus.sone.data.* +import net.pterodactylus.sone.main.* +import net.pterodactylus.sone.notify.* import net.pterodactylus.util.notify.* +import javax.inject.* +import javax.inject.Singleton /** * Guice module for creating all notification handlers. */ class NotificationHandlerModule : AbstractModule() { + override fun configure() { + bind(NotificationHandler::class.java).`in`(Singleton::class.java) + } + @Provides fun getMarkPostKnownDuringFirstStartHandler(core: Core, notificationManager: NotificationManager) = MarkPostKnownDuringFirstStartHandler(notificationManager, core::markPostKnown) + @Provides + @Singleton + fun getSoneLockedOnStartupHandler(notificationManager: NotificationManager, @Named("soneLockedOnStartup") notification: ListNotification) = + SoneLockedOnStartupHandler(notificationManager, notification) + + @Provides + @Singleton + @Named("soneLockedOnStartup") + fun getSoneLockedOnStartupNotification(loaders: Loaders) = + ListNotification("sone-locked-on-startup", "sones", loaders.loadTemplate("/templates/notify/soneLockedOnStartupNotification.html")) + } diff --git a/src/main/kotlin/net/pterodactylus/sone/web/notification/SoneLockedOnStartupHandler.kt b/src/main/kotlin/net/pterodactylus/sone/web/notification/SoneLockedOnStartupHandler.kt index d6ec08f..aa3a417 100644 --- a/src/main/kotlin/net/pterodactylus/sone/web/notification/SoneLockedOnStartupHandler.kt +++ b/src/main/kotlin/net/pterodactylus/sone/web/notification/SoneLockedOnStartupHandler.kt @@ -22,15 +22,12 @@ import net.pterodactylus.sone.core.event.* import net.pterodactylus.sone.data.* import net.pterodactylus.sone.notify.* import net.pterodactylus.util.notify.* -import net.pterodactylus.util.template.* /** * Handler for [SoneLockedOnStartup][net.pterodactylus.sone.core.event.SoneLockedOnStartup] events * that adds the appropriate notification to the [NotificationManager]. */ -class SoneLockedOnStartupHandler(private val notificationManager: NotificationManager, template: Template) { - - private val notification = ListNotification("sone-locked-on-startup", "sones", template) +class SoneLockedOnStartupHandler(private val notificationManager: NotificationManager, private val notification: ListNotification) { @Subscribe @Suppress("UnstableApiUsage") diff --git a/src/test/kotlin/net/pterodactylus/sone/web/WebInterfaceModuleTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/WebInterfaceModuleTest.kt index 7a9d38e..8840caf 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/WebInterfaceModuleTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/WebInterfaceModuleTest.kt @@ -286,14 +286,4 @@ class WebInterfaceModuleTest { injector.verifySingletonInstance() } - @Test - fun `notification handler can be created`() { - assertThat(injector.getInstance(), notNullValue()) - } - - @Test - fun `notification handler is created as singleton`() { - injector.verifySingletonInstance() - } - } diff --git a/src/test/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModuleTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModuleTest.kt index d2106d8..665e69d 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModuleTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModuleTest.kt @@ -19,10 +19,15 @@ package net.pterodactylus.sone.web.notification import com.google.inject.* import com.google.inject.Guice.* +import com.google.inject.name.Names.* import net.pterodactylus.sone.core.* import net.pterodactylus.sone.core.event.* import net.pterodactylus.sone.data.* +import net.pterodactylus.sone.data.impl.* +import net.pterodactylus.sone.main.* +import net.pterodactylus.sone.notify.* import net.pterodactylus.sone.test.* +import net.pterodactylus.sone.utils.* import net.pterodactylus.util.notify.* import org.hamcrest.MatcherAssert.* import org.hamcrest.Matchers.* @@ -37,9 +42,11 @@ class NotificationHandlerModuleTest { private val core = mock() private val notificationManager = NotificationManager() + private val loaders = TestLoaders() private val injector: Injector = createInjector( Core::class.isProvidedBy(core), NotificationManager::class.isProvidedBy(notificationManager), + Loaders::class.isProvidedBy(loaders), NotificationHandlerModule() ) @@ -49,6 +56,11 @@ class NotificationHandlerModuleTest { } @Test + fun `notification handler is created as singleton`() { + injector.verifySingletonInstance() + } + + @Test fun `module can create mark-post-known-during-first-start handler`() { assertThat(injector.getInstance(), notNullValue()) } @@ -64,4 +76,41 @@ class NotificationHandlerModuleTest { verify(core).markPostKnown(post) } + @Test + fun `module can create sone-locked-on-startup handler`() { + assertThat(injector.getInstance(), notNullValue()) + } + + @Test + fun `sone-locked-on-startup handler is created as singleton`() { + injector.verifySingletonInstance() + } + + @Test + fun `module can create sone-locked-on-startup notification with correct id`() { + val notification = injector.getInstance>(named("soneLockedOnStartup")) + assertThat(notification.id, equalTo("sone-locked-on-startup")) + } + + @Test + fun `sone-locked-on-startup notification is created as singleton`() { + injector.verifySingletonInstance>(named("soneLockedOnStartup")) + } + + @Test + fun `module can create sone-locked-on-startup notification with correct template and key`() { + loaders.templates += "/templates/notify/soneLockedOnStartupNotification.html" to "<% sones>".asTemplate() + val notification = injector.getInstance>(named("soneLockedOnStartup")) + val sone1 = IdOnlySone("sone1") + val sone2 = IdOnlySone("sone2") + notification.add(sone1) + notification.add(sone2) + assertThat(notification.render(), equalTo(listOf(sone1, sone2).toString())) + } + + @Test + fun `sone-locked-on-startup notification is dismissable`() { + assertThat(injector.getInstance>(named("soneLockedOnStartup")).isDismissable, equalTo(true)) + } + } diff --git a/src/test/kotlin/net/pterodactylus/sone/web/notification/SoneLockedOnStartupHandlerTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/notification/SoneLockedOnStartupHandlerTest.kt index 0b9d1e1..36a8836 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/notification/SoneLockedOnStartupHandlerTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/notification/SoneLockedOnStartupHandlerTest.kt @@ -19,10 +19,11 @@ package net.pterodactylus.sone.web.notification import com.google.common.eventbus.* import net.pterodactylus.sone.core.event.* +import net.pterodactylus.sone.data.* import net.pterodactylus.sone.data.impl.* import net.pterodactylus.sone.notify.* -import net.pterodactylus.sone.utils.* import net.pterodactylus.util.notify.* +import net.pterodactylus.util.template.* import org.hamcrest.MatcherAssert.* import org.hamcrest.Matchers.* import kotlin.test.* @@ -35,29 +36,24 @@ class SoneLockedOnStartupHandlerTest { @Suppress("UnstableApiUsage") private val eventBus = EventBus() private val manager = NotificationManager() - private val notification by lazy { manager.notifications.single() as ListNotification<*> } + private val notification = ListNotification("", "", Template()) init { - SoneLockedOnStartupHandler(manager, template).also(eventBus::register) - eventBus.post(SoneLockedOnStartup(sone)) - } - - @Test - fun `notification has correct id`() { - assertThat(notification.id, equalTo("sone-locked-on-startup")) + SoneLockedOnStartupHandler(manager, notification).also(eventBus::register) } @Test fun `handler adds sone to notification when event is posted`() { + eventBus.post(SoneLockedOnStartup(sone)) assertThat(notification.elements, contains(sone)) } @Test - fun `handler creates notification with correct key`() { - assertThat(notification.render(), equalTo(listOf(sone).toString())) + fun `handler adds notification to manager`() { + eventBus.post(SoneLockedOnStartup(sone)) + assertThat(manager.notifications, contains(notification)) } } private val sone = IdOnlySone("sone-id") -private val template = "<% sones>".asTemplate()