ed2037dddcbec899564bc1a7b17e18e3ecaa0261
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / main / FreenetModuleTest.kt
1 package net.pterodactylus.sone.main
2
3 import com.google.inject.Guice
4 import freenet.client.HighLevelSimpleClient
5 import freenet.clients.http.*
6 import freenet.node.Node
7 import freenet.pluginmanager.PluginRespirator
8 import net.pterodactylus.sone.test.deepMock
9 import net.pterodactylus.sone.test.getInstance
10 import net.pterodactylus.sone.test.mock
11 import net.pterodactylus.sone.test.whenever
12 import org.hamcrest.MatcherAssert.assertThat
13 import org.hamcrest.Matchers.sameInstance
14 import org.junit.Test
15 import org.mockito.Mockito.verify
16
17 /**
18  * Unit test for [FreenetModule].
19  */
20 class FreenetModuleTest {
21
22         private val sessionManager = mock<SessionManager>()
23         private val pluginRespirator = deepMock<PluginRespirator>().apply {
24                 whenever(getSessionManager("Sone")).thenReturn(sessionManager)
25         }
26         private val node = pluginRespirator.node!!
27         private val highLevelSimpleClient = pluginRespirator.hlSimpleClient!!
28         private val toadletContainer: ToadletContainer = pluginRespirator.toadletContainer
29         private val module = FreenetModule(pluginRespirator)
30         private val injector = Guice.createInjector(module)
31
32         private inline fun <reified T: Any> verifySingletonInstance() {
33                 val firstInstance = injector.getInstance<T>()
34                 val secondInstance = injector.getInstance<T>()
35                 assertThat(firstInstance, sameInstance(secondInstance))
36         }
37
38         @Test
39         fun `plugin respirator is returned correctly`() {
40                 assertThat(injector.getInstance(), sameInstance(pluginRespirator))
41         }
42
43         @Test
44         fun `plugin respirator is returned as singleton`() {
45                 verifySingletonInstance<PluginRespirator>()
46         }
47
48         @Test
49         fun `node is returned correctly`() {
50                 assertThat(injector.getInstance(), sameInstance(node))
51         }
52
53         @Test
54         fun `node is returned as singleton`() {
55                 verifySingletonInstance<Node>()
56         }
57
58         @Test
59         fun `high level simply client is returned correctly`() {
60                 assertThat(injector.getInstance(), sameInstance(highLevelSimpleClient))
61         }
62
63         @Test
64         fun `high level simply client is returned as singleton`() {
65                 verifySingletonInstance<HighLevelSimpleClient>()
66         }
67
68         @Test
69         fun `session manager is returned correctly`() {
70                 assertThat(injector.getInstance(), sameInstance(sessionManager))
71         }
72
73         @Test
74         fun `session manager is returned as singleton`() {
75                 verifySingletonInstance<SessionManager>()
76                 verify(pluginRespirator).getSessionManager("Sone")
77         }
78
79         @Test
80         fun `toadlet container is returned correctly`() {
81             assertThat(injector.getInstance(), sameInstance(toadletContainer))
82         }
83
84         @Test
85         fun `toadlet container is returned as singleten`() {
86                 verifySingletonInstance<ToadletContainer>()
87         }
88
89 }