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.test.*
-import net.pterodactylus.sone.utils.*
import net.pterodactylus.util.notify.*
+import net.pterodactylus.util.template.*
import org.hamcrest.MatcherAssert.*
import org.hamcrest.Matchers.*
import java.io.*
@Suppress("UnstableApiUsage")
private val eventBus = EventBus()
private val notificationManager = NotificationManager()
- private val handler = NewSoneHandler(notificationManager, "<% sones>".asTemplate())
+ private val notification = ListNotification<Sone>("", "", Template())
+ private val handler = NewSoneHandler(notificationManager, notification)
init {
eventBus.register(handler)
@Test
fun `handler adds notification if new sone event is fired`() {
eventBus.post(NewSoneFoundEvent(sone))
- val notification = notificationManager.notifications.single() as ListNotification<*>
- assertThat(notification.id, equalTo("new-sone-notification"))
+ assertThat(notificationManager.notifications, contains<Notification>(notification))
}
@Test
fun `handler adds sone to notification`() {
eventBus.post(NewSoneFoundEvent(sone))
- val notification = notificationManager.notifications.single() as ListNotification<*>
- assertThat(notification.elements, contains<Any>(sone))
- }
-
- @Test
- fun `handler sets correct key for sones`() {
- eventBus.post(NewSoneFoundEvent(sone))
- val notification = notificationManager.notifications.single() as ListNotification<*>
- assertThat(notification.render(), equalTo(listOf(sone).toString()))
- }
-
- @Test
- fun `handler creates non-dismissable notification`() {
- eventBus.post(NewSoneFoundEvent(sone))
- val notification = notificationManager.notifications.single() as ListNotification<*>
- assertThat(notification, matches("is not dismissable") { !it.isDismissable })
+ assertThat(notification.elements, contains(sone))
}
@Test
override fun render(writer: Writer) = Unit
})
eventBus.post(NewSoneFoundEvent(sone))
- val notification = notificationManager.notifications.single()
- assertThat(notification.id, equalTo("first-start-notification"))
+ assertThat(notificationManager.notifications.single().id, equalTo("first-start-notification"))
}
@Test
fun `handler removes sone from notification if sone is marked as known`() {
- eventBus.post(NewSoneFoundEvent(sone))
- val notification = notificationManager.notifications.single() as ListNotification<*>
+ notification.add(sone)
eventBus.post(MarkSoneKnownEvent(sone))
assertThat(notification.elements, emptyIterable())
}
@Test
fun `handler removes sone from notification if sone is removed`() {
- eventBus.post(NewSoneFoundEvent(sone))
- val notification = notificationManager.notifications.single() as ListNotification<*>
+ notification.add(sone)
eventBus.post(SoneRemovedEvent(sone))
assertThat(notification.elements, emptyIterable())
}
}
-private val sone = IdOnlySone("sone-id")
+private val sone: Sone = IdOnlySone("sone-id")
assertThat(injector.getInstance<ListNotification<Sone>>(named("soneLockedOnStartup")).isDismissable, equalTo(true))
}
+ @Test
+ fun `new-sone handler can be created`() {
+ assertThat(injector.getInstance<NewSoneHandler>(), notNullValue())
+ }
+
+ @Test
+ fun `new-sone handler is created as singleton`() {
+ injector.verifySingletonInstance<NewSoneHandler>()
+ }
+
+ @Test
+ fun `new-sone notification has correct ID`() {
+ assertThat(injector.getInstance<ListNotification<Sone>>(named("newSone")).id, equalTo("new-sone-notification"))
+ }
+
+ @Test
+ fun `new-sone notification has correct key and template`() {
+ loaders.templates += "/templates/notify/newSoneNotification.html" to "<% sones>".asTemplate()
+ val notification = injector.getInstance<ListNotification<Sone>>(named("newSone"))
+ val sones = listOf(IdOnlySone("sone1"), IdOnlySone("sone2"))
+ sones.forEach(notification::add)
+ assertThat(notification.render(), equalTo(sones.toString()))
+ }
+
+ @Test
+ fun `new-sone notification is not dismissable`() {
+ assertThat(injector.getInstance<ListNotification<Sone>>(named("newSone")).isDismissable, equalTo(false))
+ }
+
}