1 package net.pterodactylus.sone.main
3 import com.google.common.base.*
4 import com.google.common.eventbus.*
5 import com.google.inject.Guice.*
6 import com.google.inject.name.Names.*
7 import net.pterodactylus.sone.database.*
8 import net.pterodactylus.sone.database.memory.*
9 import net.pterodactylus.sone.freenet.wot.*
10 import net.pterodactylus.sone.test.*
11 import net.pterodactylus.util.config.*
12 import net.pterodactylus.util.version.Version
13 import org.hamcrest.MatcherAssert.*
14 import org.hamcrest.Matchers.*
17 import java.util.concurrent.atomic.*
19 const val versionString = "v80"
21 class SoneModuleTest {
23 private val currentDir: File = File(".")
24 private val pluginVersion = Version("", 80)
25 private val pluginYear = 2019
26 private val pluginHomepage = "home://page"
27 private val sonePlugin = mock<SonePlugin>().apply {
28 whenever(version).thenReturn(versionString)
29 whenever(year).thenReturn(pluginYear)
30 whenever(homepage).thenReturn(pluginHomepage)
33 private val injector by lazy { createInjector(SoneModule(sonePlugin)) }
36 fun removePropertiesFromCurrentDirectory() {
37 File(currentDir, "sone.properties").delete()
41 fun `creator binds configuration when no file is present`() {
42 File(currentDir, "sone.properties").delete()
43 assertThat(injector.getInstance<Configuration>(), notNullValue())
47 fun `creator binds first start to true when no file is present`() {
48 File(currentDir, "sone.properties").delete()
49 assertThat(injector.getInstance(named("FirstStart")), equalTo(true))
53 fun `config file is created in current directory if not present`() {
54 File(currentDir, "sone.properties").delete()
55 val configuration = injector.getInstance<Configuration>()
57 assertThat(File(currentDir, "sone.properties").exists(), equalTo(true))
61 fun `creator binds configuration when file is present`() {
62 File(currentDir, "sone.properties").writeText("Option=old")
63 assertThat(injector.getInstance<Configuration>().getStringValue("Option").value, equalTo("old"))
67 fun `creator binds first start to false when file is present`() {
68 File(currentDir, "sone.properties").writeText("Option=old")
69 assertThat(injector.getInstance(named("FirstStart")), equalTo(false))
73 fun `invalid config file leads to new config being created`() {
74 File(currentDir, "sone.properties").writeText("Option=old\nbroken")
75 val configuration = injector.getInstance<Configuration>()
76 assertThat(configuration.getStringValue("Option").getValue(null), nullValue())
80 fun `invalid config file leads to new config being set to true`() {
81 File(currentDir, "sone.properties").writeText("Option=old\nbroken")
82 assertThat(injector.getInstance(named("NewConfig")), equalTo(true))
86 fun `valid config file leads to new config being set to false`() {
87 File(currentDir, "sone.properties").writeText("Option=old")
88 assertThat(injector.getInstance(named("NewConfig")), equalTo(false))
92 fun `event bus is bound`() {
93 assertThat(injector.getInstance<EventBus>(), notNullValue())
97 fun `context is bound`() {
98 assertThat(injector.getInstance<Context>().context, equalTo("Sone"))
102 fun `optional context is bound`() {
103 assertThat(injector.getInstance<Optional<Context>>().get().context, equalTo("Sone"))
107 fun `sone plugin is bound`() {
108 assertThat(injector.getInstance(), sameInstance(sonePlugin))
112 fun `version is bound`() {
113 assertThat(injector.getInstance(), equalTo(pluginVersion))
117 fun `plugin version is bound`() {
118 assertThat(injector.getInstance(), equalTo(PluginVersion(versionString)))
122 fun `plugin year is bound`() {
123 assertThat(injector.getInstance(), equalTo(PluginYear(pluginYear)))
127 fun `plugin homepage in bound`() {
128 assertThat(injector.getInstance(), equalTo(PluginHomepage(pluginHomepage)))
132 fun `database is bound correctly`() {
133 assertThat(injector.getInstance<Database>(), instanceOf(MemoryDatabase::class.java))
137 fun `default loader is used without dev options`() {
138 assertThat(injector.getInstance<Loaders>(), instanceOf(DefaultLoaders::class.java))
142 fun `default loaders are used if no path is given`() {
143 File(currentDir, "sone.properties").writeText("Developer.LoadFromFilesystem=true")
144 assertThat(injector.getInstance<Loaders>(), instanceOf(DefaultLoaders::class.java))
148 fun `debug loaders are used if path is given`() {
149 File(currentDir, "sone.properties").writeText("Developer.LoadFromFilesystem=true\nDeveloper.FilesystemPath=/tmp")
150 assertThat(injector.getInstance<Loaders>(), instanceOf(DebugLoaders::class.java))
154 val ref: AtomicReference<Any?> = AtomicReference()
156 fun testEvent(event: Any?) {
162 fun `created objects are registered with event bus`() {
163 val eventBus: EventBus = injector.getInstance()
164 val testObject = injector.getInstance<TestObject>()
167 assertThat(testObject.ref.get(), sameInstance(event))