1 package net.pterodactylus.sone.web
3 import com.google.inject.*
4 import freenet.clients.http.*
5 import net.pterodactylus.sone.main.*
6 import net.pterodactylus.sone.test.*
7 import net.pterodactylus.sone.web.page.*
9 import org.junit.rules.*
10 import org.mockito.Mockito.*
11 import kotlin.test.Test
13 class PageToadletRegistryTest {
15 private val pageMaker = mock<PageMaker>()
16 private val toadletContainer = mock<ToadletContainer>()
17 private val pageToadletFactory = mock<PageToadletFactory>()
18 private val sonePlugin = mock<SonePlugin>()
20 private val injector = Guice.createInjector(
21 PageMaker::class.isProvidedBy(pageMaker),
22 ToadletContainer::class.isProvidedBy(toadletContainer),
23 PageToadletFactory::class.isProvidedBy(pageToadletFactory),
24 SonePlugin::class.isProvidedBy(sonePlugin)
29 val expectedException: ExpectedException = ExpectedException.none()
30 private val pageToadletRegistry = injector.getInstance<PageToadletRegistry>()
33 fun `registry adds navigation category to page maker`() {
34 pageToadletRegistry.registerToadlets()
35 verify(pageMaker).addNavigationCategory("/Sone/index.html", "Navigation.Menu.Sone.Name", "Navigation.Menu.Sone.Tooltip", sonePlugin)
38 private val page = TestPage<FreenetRequest>()
41 fun `adding a page without menuname will add it correctly`() {
42 val toadletWithoutMenuname = createPageToadlet()
43 whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadletWithoutMenuname)
44 pageToadletRegistry.addPage(page)
45 pageToadletRegistry.registerToadlets()
46 verify(toadletContainer).register(toadletWithoutMenuname, null, "/Sone/", true, false)
50 fun `adding a page with menuname will add it correctly`() {
51 val toadletWithMenuname = createPageToadlet("Test")
52 whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadletWithMenuname)
53 pageToadletRegistry.addPage(page)
54 pageToadletRegistry.registerToadlets()
55 verify(toadletContainer).register(toadletWithMenuname, "Navigation.Menu.Sone.Name", "/Sone/", true, "Navigation.Menu.Sone.Item.Test.Name", "Navigation.Menu.Sone.Item.Test.Tooltip", false, toadletWithMenuname)
59 fun `adding a page after registering will throw an exception`() {
60 val toadletWithMenuname = createPageToadlet("Test")
61 whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadletWithMenuname)
62 pageToadletRegistry.registerToadlets()
63 expectedException.expect(IllegalStateException::class.java)
64 pageToadletRegistry.addPage(page)
68 fun `unregistering toadlets will remove category link`() {
69 pageToadletRegistry.unregisterToadlets()
70 verify(pageMaker).removeNavigationCategory("Navigation.Menu.Sone.Name")
74 fun `unregistering toadlets will unregister them from the container`() {
75 val toadletWithMenuname = createPageToadlet("Test")
76 whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadletWithMenuname)
77 pageToadletRegistry.addPage(page)
78 pageToadletRegistry.registerToadlets()
79 pageToadletRegistry.unregisterToadlets()
80 verify(toadletContainer).unregister(toadletWithMenuname)
84 fun `adding a debug page will not add it to the container`() {
85 val toadlet = createPageToadlet()
86 whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadlet)
87 pageToadletRegistry.addDebugPage(page)
88 pageToadletRegistry.registerToadlets()
89 verify(toadletContainer, never()).register(toadlet, null, "/Sone/", true, false)
93 fun `adding a debug page and activating debug mode will add it to the container`() {
94 val toadlet = createPageToadlet()
95 whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadlet)
96 pageToadletRegistry.addDebugPage(page)
97 pageToadletRegistry.registerToadlets()
98 pageToadletRegistry.activateDebugMode()
99 verify(toadletContainer).register(toadlet, null, "/Sone/", true, false)
103 fun `adding a debug page and activating debug mode twice will add it to the container once`() {
104 val toadlet = createPageToadlet()
105 whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadlet)
106 pageToadletRegistry.addDebugPage(page)
107 pageToadletRegistry.registerToadlets()
108 pageToadletRegistry.activateDebugMode()
109 pageToadletRegistry.activateDebugMode()
110 verify(toadletContainer, times(1)).register(toadlet, null, "/Sone/", true, false)
114 fun `debug pages are ungegistered from the container`() {
115 val toadlet = createPageToadlet()
116 whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadlet)
117 pageToadletRegistry.addDebugPage(page)
118 pageToadletRegistry.registerToadlets()
119 pageToadletRegistry.activateDebugMode()
120 pageToadletRegistry.unregisterToadlets()
121 verify(toadletContainer).unregister(toadlet)
125 fun `inactive debug pages are not ungegistered from the container`() {
126 val toadlet = createPageToadlet()
127 whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadlet)
128 pageToadletRegistry.addDebugPage(page)
129 pageToadletRegistry.registerToadlets()
130 pageToadletRegistry.unregisterToadlets()
131 verify(toadletContainer, never()).unregister(toadlet)
135 fun `debug page can not be added after registering`() {
136 val toadlet = createPageToadlet()
137 whenever(pageToadletFactory.createPageToadlet(page)).thenReturn(toadlet)
138 pageToadletRegistry.registerToadlets()
139 expectedException.expect(IllegalStateException::class.java)
140 pageToadletRegistry.addDebugPage(page)
143 private fun createPageToadlet(menuName: String? = null) =
144 mock<PageToadlet>().apply {
145 whenever(this.path()).thenReturn("/Sone/")
146 whenever(this.menuName).thenReturn(menuName)