X-Git-Url: https://git.pterodactylus.net/?p=jSite.git;a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Ftodesbaum%2Fjsite%2Fapplication%2Fvalidation%2FProjectValidatorTest.java;fp=src%2Ftest%2Fjava%2Fde%2Ftodesbaum%2Fjsite%2Fapplication%2Fvalidation%2FProjectValidatorTest.java;h=545ab4584e4e93760480a7d80c8e869db8107990;hp=0000000000000000000000000000000000000000;hb=2d6256e4191697fdc4d033e93d53a59308a516fe;hpb=37618fed55c2d4afe2fdcb9b4b8de1539fdf163d diff --git a/src/test/java/de/todesbaum/jsite/application/validation/ProjectValidatorTest.java b/src/test/java/de/todesbaum/jsite/application/validation/ProjectValidatorTest.java new file mode 100644 index 0000000..545ab45 --- /dev/null +++ b/src/test/java/de/todesbaum/jsite/application/validation/ProjectValidatorTest.java @@ -0,0 +1,172 @@ +package de.todesbaum.jsite.application.validation; + +import static de.todesbaum.jsite.application.validation.ProjectValidator.validateProject; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.not; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.StandardOpenOption; + +import de.todesbaum.jsite.application.Project; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +/** + * Unit test for {@link ProjectValidator}. + * + * @author David ‘Bombe’ Roden + */ +public class ProjectValidatorTest { + + @Rule + public final TemporaryFolder temporaryFolder = new TemporaryFolder(); + + private Project project = new Project(); + + @Before + public void setupProject() throws Exception { + project.setLocalPath(temporaryFolder.getRoot().getPath()); + project.setPath("temp"); + project.setIndexFile("index.html"); + temporaryFolder.newFile("index.html").createNewFile(); + } + + @Test + public void completelyValidProjectDoesNotGenerateAnyIssues() { + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), empty()); + } + + @Test + public void missingLocalPathResultsInError() { + project.setLocalPath(null); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("error.no-local-path", true))); + } + + @Test + public void emptyLocalPathResultsInError() { + project.setLocalPath(" "); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("error.no-local-path", true))); + } + + @Test + public void missingPathResultsInError() { + project.setPath(null); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("error.no-path", true))); + } + + @Test + public void emptyPathResultsInError() { + project.setPath(" "); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("error.no-path", true))); + } + + @Test + public void missingIndexFileResultsInWarning() { + project.setIndexFile(null); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("warning.empty-index", false))); + } + + @Test + public void emptyIndexFileResultsInWarning() { + project.setIndexFile(""); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("warning.empty-index", false))); + } + + @Test + public void settingIndexFileWithoutExistingFileResultsInWarning() { + project.setIndexFile("test.html"); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("error.index-missing", true))); + } + + @Test + public void usingNonHtmlMimeTypeForIndexFileResultsInWarning() { + project.getFileOption("index.html").setMimeType("text/plain"); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("warning.index-not-html", false))); + } + + @Test + public void notInsertingTheIndexFileAnyFileResultsInError() { + project.getFileOption("index.html").setInsert(false); + project.getFileOption("index.html").setInsertRedirect(false); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("error.index-not-inserted", true))); + } + + @Test + public void insertingARedirectWithRedirectUrlResultsInError() { + project.getFileOption("index.html").setInsert(false); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("error.no-custom-key", true, "index.html"))); + } + + @Test + public void insertingARedirectEmptyKeyUrlResultsInError() { + project.getFileOption("index.html").setInsert(false); + project.getFileOption("index.html").setCustomKey(null); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("error.no-custom-key", true, "index.html"))); + } + + @Test + public void insertingARedirectToCHKUrlResultsInError() { + project.getFileOption("index.html").setInsert(false); + project.getFileOption("index.html").setCustomKey("CHK@"); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("error.no-custom-key", true, "index.html"))); + } + + @Test + public void notInsertingAnyFileResultsInError() { + project.getFileOption("index.html").setInsert(false); + project.getFileOption("index.html").setInsertRedirect(false); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("error.no-files-to-insert", true))); + } + + @Test + public void filesWithDuplicateTargetNamesResultInAnError() { + project.getFileOption("second.html").setChangedName("index.html"); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("error.duplicate-file", true, "index.html"))); + } + + @Test + public void filesWithLessThenOrEqualTo2MegabytesDoNotResultInWarning() throws Exception { + File largeFile = new File(temporaryFolder.getRoot(), "large.html"); + Files.write(largeFile.toPath(), new byte[2 * 1048576], StandardOpenOption.CREATE_NEW); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), not(hasItem(new Issue("warning.site-larger-than-2-mib", false)))); + } + + @Test + public void filesWithSizeOfMoreThan2MegabytesDoNotResultInWarning() throws Exception { + File largeFile = new File(temporaryFolder.getRoot(), "large.html"); + Files.write(largeFile.toPath(), new byte[2 * 1048576 + 1], StandardOpenOption.CREATE_NEW); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), hasItem(new Issue("warning.site-larger-than-2-mib", false))); + } + + @Test + public void filesAreCorrectlyIgnoreForSizeCheckIfNotInserted() throws Exception { + File largeFile = new File(temporaryFolder.getRoot(), "large.html"); + Files.write(largeFile.toPath(), new byte[2 * 1048576 + 1], StandardOpenOption.CREATE_NEW); + project.getFileOption("large.html").setInsert(false); + CheckReport checkReport = validateProject(project); + assertThat(checkReport.getIssues(), not(hasItem(new Issue("warning.site-larger-than-2-mib", false)))); + } + +}