X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2FPageToadletRegistryTest.kt;fp=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2FPageToadletRegistryTest.kt;h=d242b32d2a307904fafcb22a6efebec312acee2c;hp=0000000000000000000000000000000000000000;hb=03cec6a6772c2d836d94864adddaf544cbe9d72f;hpb=6f1f26e3998cfef155b0cf59152827accea70d30 diff --git a/src/test/kotlin/net/pterodactylus/sone/web/PageToadletRegistryTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/PageToadletRegistryTest.kt new file mode 100644 index 0000000..d242b32 --- /dev/null +++ b/src/test/kotlin/net/pterodactylus/sone/web/PageToadletRegistryTest.kt @@ -0,0 +1,95 @@ +package net.pterodactylus.sone.web + +import com.google.inject.* +import freenet.clients.http.* +import net.pterodactylus.sone.main.* +import net.pterodactylus.sone.test.* +import net.pterodactylus.sone.web.page.* +import net.pterodactylus.util.web.* +import org.junit.* +import org.junit.rules.* +import org.mockito.Mockito.* + +class PageToadletRegistryTest { + + private val pageMaker = mock() + private val toadletContainer = mock() + private val pageToadletFactory = mock() + private val sonePlugin = mock() + + private val injector = Guice.createInjector( + PageMaker::class.isProvidedBy(pageMaker), + ToadletContainer::class.isProvidedBy(toadletContainer), + PageToadletFactory::class.isProvidedBy(pageToadletFactory), + SonePlugin::class.isProvidedBy(sonePlugin) + ) + + @JvmField + @Rule + val expectedException: ExpectedException = ExpectedException.none() + private val pageToadletRegistry = injector.getInstance() + + @Test + fun `registry adds navigation category to page maker`() { + pageToadletRegistry.registerToadlets() + verify(pageMaker).addNavigationCategory("/Sone/index.html", "Navigation.Menu.Sone.Name", "Navigation.Menu.Sone.Tooltip", sonePlugin) + } + + private val page = TestPage() + + @Test + fun `adding a page without menuname will add it correctly`() { + val toadletWithoutMenuname = createPageToadlet() + whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadletWithoutMenuname) + pageToadletRegistry.addPage(page) + pageToadletRegistry.registerToadlets() + verify(toadletContainer).register(toadletWithoutMenuname, null, "/Sone/", true, false) + } + + @Test + fun `adding a page with menuname will add it correctly`() { + val toadletWithMenuname = createPageToadlet("Test") + whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadletWithMenuname) + pageToadletRegistry.addPage(page) + pageToadletRegistry.registerToadlets() + verify(toadletContainer).register(toadletWithMenuname, "Navigation.Menu.Sone.Name", "/Sone/", true, "Navigation.Menu.Sone.Item.Test.Name", "Navigation.Menu.Sone.Item.Test.Tooltip", false, toadletWithMenuname) + } + + @Test + fun `adding a page after registering will throw an exception`() { + val toadletWithMenuname = createPageToadlet("Test") + whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadletWithMenuname) + pageToadletRegistry.registerToadlets() + expectedException.expect(IllegalStateException::class.java) + pageToadletRegistry.addPage(page) + } + + @Test + fun `unregistering toadlets will remove category link`() { + pageToadletRegistry.unregisterToadlets() + verify(pageMaker).removeNavigationCategory("Navigation.Menu.Sone.Name") + } + + @Test + fun `unregistering toadlets will unregister them from the container`() { + val toadletWithMenuname = createPageToadlet("Test") + whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadletWithMenuname) + pageToadletRegistry.addPage(page) + pageToadletRegistry.registerToadlets() + pageToadletRegistry.unregisterToadlets() + verify(toadletContainer).unregister(toadletWithMenuname) + } + + private fun createPageToadlet(menuName: String? = null) = + mock().apply { + whenever(this.path()).thenReturn("/Sone/") + whenever(this.menuName).thenReturn(menuName) + } + + private class TestPage : Page { + override fun getPath() = "" + override fun isPrefixPage() = false + override fun handleRequest(freenetRequest: FreenetRequest, response: Response) = response + } + +}