From 4b2cc51efed050a19dc2c8e27a7dbb656960321a Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Mon, 9 Dec 2019 21:01:46 +0100 Subject: [PATCH] =?utf8?q?=E2=9C=A8=20Add=20remote-post=20handler=20to=20n?= =?utf8?q?otification=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../sone/web/notification/NotificationHandler.kt | 3 +- .../web/notification/NotificationHandlerModule.kt | 12 ++++++ .../notification/NotificationHandlerModuleTest.kt | 45 ++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandler.kt b/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandler.kt index 9863013..d2ae085 100644 --- a/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandler.kt +++ b/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandler.kt @@ -25,5 +25,6 @@ import javax.inject.* */ @Suppress("UNUSED_PARAMETER") class NotificationHandler @Inject constructor( - markPostKnownDuringFirstStartHandler: MarkPostKnownDuringFirstStartHandler + markPostKnownDuringFirstStartHandler: MarkPostKnownDuringFirstStartHandler, + newRemotePostHandler: NewRemotePostHandler ) 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 b843cca..279944c 100644 --- a/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModule.kt +++ b/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModule.kt @@ -36,6 +36,7 @@ class NotificationHandlerModule : AbstractModule() { } @Provides + @Singleton fun getMarkPostKnownDuringFirstStartHandler(core: Core, notificationManager: NotificationManager) = MarkPostKnownDuringFirstStartHandler(notificationManager, core::markPostKnown) @@ -60,4 +61,15 @@ class NotificationHandlerModule : AbstractModule() { fun getNewSoneNotification(loaders: Loaders) = ListNotification("new-sone-notification", "sones", loaders.loadTemplate("/templates/notify/newSoneNotification.html"), dismissable = false) + @Provides + @Singleton + fun getNewRemotePostHandler(notificationManager: NotificationManager, @Named("newRemotePost") newPostNotification: ListNotification) = + NewRemotePostHandler(notificationManager, newPostNotification) + + @Provides + @Singleton + @Named("newRemotePost") + fun getNewPostNotification(loaders: Loaders) = + ListNotification("new-post-notification", "posts", loaders.loadTemplate("/templates/notify/newPostNotification.html"), dismissable = false) + } 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 76926fb..a37abd8 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModuleTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModuleTest.kt @@ -23,6 +23,7 @@ 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.Post.* import net.pterodactylus.sone.data.impl.* import net.pterodactylus.sone.main.* import net.pterodactylus.sone.notify.* @@ -66,6 +67,11 @@ class NotificationHandlerModuleTest { } @Test + fun `mark-post-known-during-first-start handler is created as singleton`() { + injector.verifySingletonInstance() + } + + @Test fun `mark-post-known-during-first-start handler is created with correct action`() { notificationManager.addNotification(object : AbstractNotification("first-start-notification") { override fun render(writer: Writer?) = Unit @@ -142,4 +148,43 @@ class NotificationHandlerModuleTest { assertThat(injector.getInstance>(named("newSone")).isDismissable, equalTo(false)) } + @Test + fun `new-remote-post handler can be created`() { + assertThat(injector.getInstance(), notNullValue()) + } + + @Test + fun `new-remote-post handler is created as singleton`() { + injector.verifySingletonInstance() + } + + @Test + fun `new-remote-post notification can be created`() { + assertThat(injector.getInstance>(named("newRemotePost")), notNullValue()) + } + + @Test + fun `new-remote-post notification is created as singleton`() { + injector.verifySingletonInstance>(named("newRemotePost")) + } + + @Test + fun `new-remote-post notification has correct ID`() { + assertThat(injector.getInstance>(named("newRemotePost")).id, equalTo("new-post-notification")) + } + + @Test + fun `new-remote-post notification is not dismissable`() { + assertThat(injector.getInstance>(named("newRemotePost")).isDismissable, equalTo(false)) + } + + @Test + fun `new-remote-post notification has correct key and template`() { + loaders.templates += "/templates/notify/newPostNotification.html" to "<% posts>".asTemplate() + val notification = injector.getInstance>(named("newRemotePost")) + val posts = listOf(EmptyPost("post1"), EmptyPost("post2")) + posts.forEach(notification::add) + assertThat(notification.render(), equalTo(posts.toString())) + } + } -- 2.7.4