🎨 Reduce dependency on Node’s fields
[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.client.async.ClientContext
6 import freenet.client.async.USKManager
7 import freenet.clients.http.*
8 import freenet.node.*
9 import freenet.pluginmanager.*
10 import net.pterodactylus.sone.freenet.HighLevelSimpleClientCreator
11 import net.pterodactylus.sone.freenet.plugin.*
12 import net.pterodactylus.sone.test.*
13 import org.hamcrest.MatcherAssert.*
14 import org.hamcrest.Matchers.*
15 import org.junit.*
16 import org.junit.rules.*
17 import org.mockito.*
18 import org.mockito.Mockito.*
19
20 /**
21  * Unit test for [FreenetModule].
22  */
23 class FreenetModuleTest {
24
25         @Rule
26         @JvmField
27         val expectedException = ExpectedException.none()!!
28
29         private val sessionManager = mock<SessionManager>()
30         private val uskManager = mock<USKManager>()
31         private val clientContext = mock<ClientContext>()
32         private val pluginRespirator = deepMock<PluginRespirator>().apply {
33                 whenever(getSessionManager("Sone")).thenReturn(sessionManager)
34         }
35         private val nodeClientCore = mock<NodeClientCore>().also {
36                 setField(it, "uskManager", uskManager)
37                 setField(it, "clientContext", clientContext)
38         }
39         private val node = pluginRespirator.node!!.also {
40                 setField(it, "clientCore", nodeClientCore)
41         }
42         private val highLevelSimpleClient = pluginRespirator.hlSimpleClient!!
43         private val toadletContainer: ToadletContainer = pluginRespirator.toadletContainer
44         private val pageMaker: PageMaker = pluginRespirator.pageMaker
45         private val module = FreenetModule(pluginRespirator)
46         private val injector = Guice.createInjector(module)
47
48         @Test
49         fun `plugin respirator is not bound`() {
50                 expectedException.expect(Exception::class.java)
51                 injector.getInstance<PluginRespirator>()
52         }
53
54         @Test
55         fun `node is returned correctly`() {
56                 assertThat(injector.getInstance(), sameInstance(node))
57         }
58
59         @Test
60         fun `node is returned as singleton`() {
61                 injector.verifySingletonInstance<Node>()
62         }
63
64         @Test
65         fun `high level simply client is returned correctly`() {
66                 assertThat(injector.getInstance(), sameInstance(highLevelSimpleClient))
67         }
68
69         @Test
70         fun `high level simply client is returned as singleton`() {
71                 injector.verifySingletonInstance<HighLevelSimpleClient>()
72         }
73
74         @Test
75         fun `session manager is returned correctly`() {
76                 assertThat(injector.getInstance(), sameInstance(sessionManager))
77         }
78
79         @Test
80         fun `session manager is returned as singleton`() {
81                 injector.verifySingletonInstance<SessionManager>()
82                 verify(pluginRespirator).getSessionManager("Sone")
83         }
84
85         @Test
86         fun `toadlet container is returned correctly`() {
87                 assertThat(injector.getInstance(), sameInstance(toadletContainer))
88         }
89
90         @Test
91         fun `toadlet container is returned as singleten`() {
92                 injector.verifySingletonInstance<ToadletContainer>()
93         }
94
95         @Test
96         fun `page maker is returned correctly`() {
97                 assertThat(injector.getInstance(), sameInstance(pageMaker))
98         }
99
100         @Test
101         fun `page maker is returned as singleton`() {
102                 injector.verifySingletonInstance<PageMaker>()
103         }
104
105         @Test
106         fun `plugin respirator facade is returned correctly`() {
107                 val pluginRespiratorFacade = injector.getInstance<PluginRespiratorFacade>()
108                 pluginRespiratorFacade.getPluginTalker(mock(), "test.plugin", "test-request-1")
109                 verify(pluginRespirator).getPluginTalker(any(), ArgumentMatchers.eq("test.plugin"), ArgumentMatchers.eq("test-request-1"))
110         }
111
112         @Test
113         fun `plugin respirator facade is returned as singleton`() {
114                 injector.verifySingletonInstance<PluginRespiratorFacade>()
115         }
116
117         @Test
118         fun `plugin connector is returned correctly`() {
119                 assertThat(injector.getInstance<PluginConnector>(), notNullValue())
120         }
121
122         @Test
123         fun `plugin connector facade is returned as singleton`() {
124                 injector.verifySingletonInstance<PluginConnector>()
125         }
126
127         @Test
128         fun `high level simple client creator is returned correctly`() {
129                 assertThat(injector.getInstance<HighLevelSimpleClientCreator>(), notNullValue());
130         }
131
132         @Test
133         fun `client context is returned correctly`() {
134                 assertThat(injector.getInstance<ClientContext>(), sameInstance(clientContext))
135         }
136
137         @Test
138         fun `usk manager is returned correctly`() {
139                 assertThat(injector.getInstance<USKManager>(), sameInstance(uskManager))
140         }
141
142 }