package com.metservice.kanban; import static com.metservice.kanban.KanbanService.KANBAN_HOME_PROPERTY_NAME; import static com.metservice.kanban.tests.util.TestUtils.createTestProject; import static org.apache.commons.io.FileUtils.readFileToString; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsCollectionContaining.hasItem; import static org.hamcrest.core.IsCollectionContaining.hasItems; import static org.hamcrest.core.IsNot.not; import static org.junit.Assert.assertThat; import java.io.File; import java.io.IOException; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class KanbanServiceTest { @Rule public TemporaryFolder kanbanHome = new TemporaryFolder(); @Before public void before() { System.setProperty(KANBAN_HOME_PROPERTY_NAME, kanbanHome.getRoot().getAbsolutePath()); } @Test public void getsKanbanHomeFromSystemProperty() { KanbanService service = new KanbanService(); assertThat(service.getHome(), is(kanbanHome.getRoot())); } @Test public void getUserDirectoryWhenKanbanHomePropertyNotSet() { System.clearProperty(KANBAN_HOME_PROPERTY_NAME); KanbanService service = new KanbanService(); assertThat(service.getHome(), is(new File(System.getProperty("user.home"), ".kanban"))); } @Test public void subdirectoriesOfKanbanHomeAreProjects() { kanbanHome.newFolder("project1"); kanbanHome.newFolder("project2"); KanbanService service = new KanbanService(); assertThat(service.getProjects(), hasItems("project1", "project2")); } @Test public void dotDirectoriesAreNotProjects() { kanbanHome.newFolder(".svn"); kanbanHome.newFolder(".somethingElse"); KanbanService service = new KanbanService(); assertThat(service.getProjects(), not(hasItem(".svn"))); assertThat(service.getProjects(), not(hasItem(".somethingElse"))); } @Test public void canCreateNewProjects() throws IOException { File root = kanbanHome.getRoot(); File projectHome = new File(root, "New project"); File propertiesFile = new File(projectHome, "kanban.properties"); KanbanService kanbanService = new KanbanService(root); kanbanService.createProject("New project", "property=value"); assertThat(readFileToString(propertiesFile), is("property=value")); assertThat(projectHome.getParentFile(), is(root)); } @Test(expected = IllegalArgumentException.class) public void refusesToCreateAProjectWithAnExistingName() throws IOException { createTestProject(kanbanHome.getRoot(), "Test project", "/end-to-end-test/"); KanbanService kanbanService = new KanbanService(kanbanHome.getRoot()); kanbanService.createProject("Test project", "some new settings"); } @Test public void getFilteredProjectsSkipUnderscores() { kanbanHome.newFolder("project1"); kanbanHome.newFolder("_project2"); kanbanHome.newFolder("project3"); kanbanHome.newFolder("_project4"); KanbanService service = new KanbanService(); assertThat(service.getProjects(), hasItems("project1", "_project2", "project3", "_project4")); assertThat(service.getFilteredProjects(), hasItems("project1", "project3")); assertThat(service.getFilteredProjects(), not(hasItem("_project2"))); assertThat(service.getFilteredProjects(), not(hasItem("_project4"))); } }