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<Sone>) =
+ SoneLockedOnStartupHandler(notificationManager, notification)
+
+ @Provides
+ @Singleton
+ @Named("soneLockedOnStartup")
+ fun getSoneLockedOnStartupNotification(loaders: Loaders) =
+ ListNotification<Sone>("sone-locked-on-startup", "sones", loaders.loadTemplate("/templates/notify/soneLockedOnStartupNotification.html"))
+
}
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>("sone-locked-on-startup", "sones", template)
+class SoneLockedOnStartupHandler(private val notificationManager: NotificationManager, private val notification: ListNotification<Sone>) {
@Subscribe
@Suppress("UnstableApiUsage")
injector.verifySingletonInstance<NotificationManager>()
}
- @Test
- fun `notification handler can be created`() {
- assertThat(injector.getInstance<NotificationHandler>(), notNullValue())
- }
-
- @Test
- fun `notification handler is created as singleton`() {
- injector.verifySingletonInstance<NotificationHandler>()
- }
-
}
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.*
private val core = mock<Core>()
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()
)
}
@Test
+ fun `notification handler is created as singleton`() {
+ injector.verifySingletonInstance<NotificationHandler>()
+ }
+
+ @Test
fun `module can create mark-post-known-during-first-start handler`() {
assertThat(injector.getInstance<MarkPostKnownDuringFirstStartHandler>(), notNullValue())
}
verify(core).markPostKnown(post)
}
+ @Test
+ fun `module can create sone-locked-on-startup handler`() {
+ assertThat(injector.getInstance<SoneLockedOnStartupHandler>(), notNullValue())
+ }
+
+ @Test
+ fun `sone-locked-on-startup handler is created as singleton`() {
+ injector.verifySingletonInstance<SoneLockedOnStartupHandler>()
+ }
+
+ @Test
+ fun `module can create sone-locked-on-startup notification with correct id`() {
+ val notification = injector.getInstance<ListNotification<Sone>>(named("soneLockedOnStartup"))
+ assertThat(notification.id, equalTo("sone-locked-on-startup"))
+ }
+
+ @Test
+ fun `sone-locked-on-startup notification is created as singleton`() {
+ injector.verifySingletonInstance<ListNotification<Sone>>(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<ListNotification<Sone>>(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<ListNotification<Sone>>(named("soneLockedOnStartup")).isDismissable, equalTo(true))
+ }
+
}
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.*
@Suppress("UnstableApiUsage")
private val eventBus = EventBus()
private val manager = NotificationManager()
- private val notification by lazy { manager.notifications.single() as ListNotification<*> }
+ private val notification = ListNotification<Sone>("", "", 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<Any>(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>(notification))
}
}
private val sone = IdOnlySone("sone-id")
-private val template = "<% sones>".asTemplate()