Fix bug when JAR file is stored in path with non-US-ASCII characters
[jSite.git] / src / test / java / de / todesbaum / jsite / main / ConfigurationLocatorTest.java
diff --git a/src/test/java/de/todesbaum/jsite/main/ConfigurationLocatorTest.java b/src/test/java/de/todesbaum/jsite/main/ConfigurationLocatorTest.java
new file mode 100644 (file)
index 0000000..779fb0f
--- /dev/null
@@ -0,0 +1,62 @@
+package de.todesbaum.jsite.main;
+
+import static de.todesbaum.jsite.main.ConfigurationLocator.ConfigurationLocation.CUSTOM;
+import static de.todesbaum.jsite.main.ConfigurationLocator.ConfigurationLocation.HOME_DIRECTORY;
+import static de.todesbaum.jsite.main.ConfigurationLocator.ConfigurationLocation.NEXT_TO_JAR_FILE;
+import static java.util.Optional.empty;
+import static java.util.Optional.of;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.endsWith;
+import static org.hamcrest.Matchers.is;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+/**
+ * Unit test for {@link ConfigurationLocator}.
+ */
+public class ConfigurationLocatorTest {
+
+       @Rule
+       public final TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+       @Test
+       public void configurationLocatorPrefersHomeDirectoryIfJarFileCanNotBeFound() {
+               JarFileLocator jarFileLocator = mock(JarFileLocator.class);
+               when(jarFileLocator.locateJarFile()).thenReturn(empty());
+               ConfigurationLocator locator = new ConfigurationLocator(jarFileLocator);
+               assertThat(locator.findPreferredLocation(), is(HOME_DIRECTORY));
+               assertThat(locator.getFile(HOME_DIRECTORY), endsWith("/config7"));
+               assertThat(locator.isValidLocation(HOME_DIRECTORY), is(true));
+       }
+
+       @Test
+       public void configurationLocatorUsesFileNextToJarFileIfJarFileIsFound() throws Exception {
+               File jarFile = temporaryFolder.newFile("test.jar");
+               temporaryFolder.newFile("jSite.conf");
+               JarFileLocator jarFileLocator = mock(JarFileLocator.class);
+               when(jarFileLocator.locateJarFile()).thenReturn(of(jarFile));
+               ConfigurationLocator locator = new ConfigurationLocator(jarFileLocator);
+               assertThat(locator.findPreferredLocation(), is(NEXT_TO_JAR_FILE));
+               assertThat(locator.getFile(NEXT_TO_JAR_FILE), endsWith("/jSite.conf"));
+               assertThat(locator.isValidLocation(NEXT_TO_JAR_FILE), is(true));
+       }
+
+       @Test
+       public void customLocationCanBeSet() throws Exception {
+               File configFile = temporaryFolder.newFile("jSite.conf");
+               JarFileLocator jarFileLocator = mock(JarFileLocator.class);
+               when(jarFileLocator.locateJarFile()).thenReturn(empty());
+               ConfigurationLocator locator = new ConfigurationLocator(jarFileLocator);
+               locator.setCustomLocation(configFile.getPath());
+               assertThat(locator.findPreferredLocation(), is(CUSTOM));
+               assertThat(locator.getFile(CUSTOM), is(configFile.getPath()));
+               assertThat(locator.isValidLocation(CUSTOM), is(true));
+       }
+
+}