♻️ Extract interface for plugin connector
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / main / FreenetModuleTest.kt
1 package net.pterodactylus.sone.main
2
3 import com.google.inject.*
4 import freenet.client.*
5 import freenet.clients.http.*
6 import freenet.node.*
7 import freenet.pluginmanager.*
8 import net.pterodactylus.sone.freenet.plugin.*
9 import net.pterodactylus.sone.test.*
10 import org.hamcrest.MatcherAssert.*
11 import org.hamcrest.Matchers.*
12 import org.junit.*
13 import org.junit.rules.*
14 import org.mockito.*
15 import org.mockito.Mockito.*
16
17 /**
18  * Unit test for [FreenetModule].
19  */
20 class FreenetModuleTest {
21
22         @Rule
23         @JvmField
24         val expectedException = ExpectedException.none()!!
25
26         private val sessionManager = mock<SessionManager>()
27         private val pluginRespirator = deepMock<PluginRespirator>().apply {
28                 whenever(getSessionManager("Sone")).thenReturn(sessionManager)
29         }
30         private val node = pluginRespirator.node!!
31         private val highLevelSimpleClient = pluginRespirator.hlSimpleClient!!
32         private val toadletContainer: ToadletContainer = pluginRespirator.toadletContainer
33         private val pageMaker: PageMaker = pluginRespirator.pageMaker
34         private val module = FreenetModule(pluginRespirator)
35         private val injector = Guice.createInjector(module)
36
37         private inline fun <reified T : Any> verifySingletonInstance() {
38                 val firstInstance = injector.getInstance<T>()
39                 val secondInstance = injector.getInstance<T>()
40                 assertThat(firstInstance, sameInstance(secondInstance))
41         }
42
43         @Test
44         fun `plugin respirator is not bound`() {
45                 expectedException.expect(Exception::class.java)
46                 injector.getInstance<PluginRespirator>()
47         }
48
49         @Test
50         fun `node is returned correctly`() {
51                 assertThat(injector.getInstance(), sameInstance(node))
52         }
53
54         @Test
55         fun `node is returned as singleton`() {
56                 verifySingletonInstance<Node>()
57         }
58
59         @Test
60         fun `high level simply client is returned correctly`() {
61                 assertThat(injector.getInstance(), sameInstance(highLevelSimpleClient))
62         }
63
64         @Test
65         fun `high level simply client is returned as singleton`() {
66                 verifySingletonInstance<HighLevelSimpleClient>()
67         }
68
69         @Test
70         fun `session manager is returned correctly`() {
71                 assertThat(injector.getInstance(), sameInstance(sessionManager))
72         }
73
74         @Test
75         fun `session manager is returned as singleton`() {
76                 verifySingletonInstance<SessionManager>()
77                 verify(pluginRespirator).getSessionManager("Sone")
78         }
79
80         @Test
81         fun `toadlet container is returned correctly`() {
82                 assertThat(injector.getInstance(), sameInstance(toadletContainer))
83         }
84
85         @Test
86         fun `toadlet container is returned as singleten`() {
87                 verifySingletonInstance<ToadletContainer>()
88         }
89
90         @Test
91         fun `page maker is returned correctly`() {
92                 assertThat(injector.getInstance(), sameInstance(pageMaker))
93         }
94
95         @Test
96         fun `page maker is returned as singleten`() {
97                 verifySingletonInstance<PageMaker>()
98         }
99
100         @Test
101         fun `plugin respirator facade is returned correctly`() {
102                 val pluginRespiratorFacade = injector.getInstance<PluginRespiratorFacade>()
103                 pluginRespiratorFacade.getPluginTalker(mock(), "test.plugin", "test-request-1")
104                 verify(pluginRespirator).getPluginTalker(any(), ArgumentMatchers.eq("test.plugin"), ArgumentMatchers.eq("test-request-1"))
105         }
106
107         @Test
108         fun `plugin respirator facade is returned as singleton`() {
109                 verifySingletonInstance<PluginRespiratorFacade>()
110         }
111
112         @Test
113         fun `plugin connector is returned correctly`() {
114                 assertThat(injector.getInstance<PluginConnector>(), notNullValue())
115         }
116
117         @Test
118         fun `plugin connector facade is returned as singleton`() {
119                 verifySingletonInstance<PluginConnector>()
120         }
121
122 }