package net.sourceforge.cruisecontrol.dashboard.service; import net.sourceforge.cruisecontrol.dashboard.StoryTracker; import org.jmock.Mock; import org.jmock.cglib.MockObjectTestCase; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileNotFoundException; import java.util.List; import java.util.Map; public class DashboardXmlConfigServiceTest extends MockObjectTestCase { private static String dashboardConfig = "<dashboard>\n" + " \t<buildloop\n" + " \t\thome=\"c:\\\"\n" + " \tconfigfile=\"config.xml\"\n" + " \tlogsdir=\"logs\"\n" + " \tartifactsdir=\"artifacts\"\n" + "\t\tprojectsdir=\"projects\"\n" + " \tjmxport=\"8000\"\n" + " \trmiport=\"1099\"/>\n" + "\t<features allowforcebuild=\"true\"/>\n" + "\t<trackingtool projectname=\"project1\" baseurl=\"https://mingle05." + "thoughtworks.com/projects/project1/cards/\" keywords=\"#,build,story,card\"/>\n" + "\t<trackingtool projectname=\"project2\" baseurl=\"https://mingle05." + "thoughtworks.com/projects/project2/cards/\" keywords=\"#,build,story,card\"/>\n" + "<subtabs>\n" + " <subtab class=\"net.sourceforge.cruisecontrol.dashboard.widgets.MergedCheckStyleWidget\" />\n" + " <subtab class=\"net.sourceforge.cruisecontrol.dashboard.widgets.PanopticodeWidget\" />\n" + " <subtab class=\"net.sourceforge.cruisecontrol.dashboard.widgets.EmmaArtifactWidget\" />\n" + "</subtabs>\n" + " </dashboard>"; public void testShouldReturnBuildLoop() throws Exception { DashboardXmlConfigService c = buildConfigService(); c.afterPropertiesSet(); assertEquals("logs", c.getLogsDir()); assertEquals("artifacts", c.getArtifactsDir()); assertEquals("true", c.isForceBuildEnabled()); } public void testShouldReturnInvalidIfCannotFindDashboardConfigFile() throws Exception { Mock mock = mock(DashboardConfigFileFactory.class); mock.expects(once()).method("asStream").will(throwException(new FileNotFoundException("not found"))); DashboardXmlConfigService dashboardConfigService = new DashboardXmlConfigService((DashboardConfigFileFactory) mock.proxy()); dashboardConfigService.afterPropertiesSet(); assertEquals("", dashboardConfigService.getLogsDir()); assertEquals("", dashboardConfigService.getArtifactsDir()); assertEquals("", dashboardConfigService.isForceBuildEnabled()); } public void testShouldReturnStoryTrackers() throws Exception { DashboardXmlConfigService configService = buildConfigService(); configService.afterPropertiesSet(); Map storyTrackers = configService.getStoryTrackers(); assertEquals(2, storyTrackers.size()); assertTrue(storyTrackers.containsKey("project1")); assertTrue(storyTrackers.containsKey("project2")); StoryTracker cc = (StoryTracker) storyTrackers.get("project1"); assertEquals("https://mingle05.thoughtworks.com/projects/project1/cards/", cc.getBaseUrl()); assertEquals("#,build,story,card", cc.getKeywords()); } public void testShouldReturnDashboardConfigurationFile() throws Exception { File dashboardConfigFile = new File("dc.xml"); Mock mock = mock(DashboardConfigFileFactory.class); mock.expects(once()).method("getDashboardConfigFileLocation").will(returnValue(dashboardConfigFile)); DashboardXmlConfigService configService = new DashboardXmlConfigService((DashboardConfigFileFactory) mock.proxy()); assertEquals(dashboardConfigFile, configService.getConfigurationFile()); } public void testShouldGetAllSubtabClasses() throws Exception { DashboardXmlConfigService configService = buildConfigService(); configService.afterPropertiesSet(); List subTabClasses = configService.getSubTabClassNames(); assertEquals(3, subTabClasses.size()); assertTrue( subTabClasses .contains("net.sourceforge.cruisecontrol.dashboard.widgets.MergedCheckStyleWidget")); assertTrue( subTabClasses .contains("net.sourceforge.cruisecontrol.dashboard.widgets.EmmaArtifactWidget")); assertTrue( subTabClasses .contains("net.sourceforge.cruisecontrol.dashboard.widgets.PanopticodeWidget")); } public void testShouldReturnEmptyListIfCOnfigurationIsInvalid() throws Exception { Mock mock = mock(DashboardConfigFileFactory.class); mock.expects(once()).method("asStream").will(returnValue(null)); DashboardXmlConfigService configService = new DashboardXmlConfigService((DashboardConfigFileFactory) mock.proxy()); configService.afterPropertiesSet(); assertEquals(0, configService.getSubTabClassNames().size()); } private DashboardXmlConfigService buildConfigService() { Mock mock = mock(DashboardConfigFileFactory.class); mock.expects(once()).method("asStream").will( returnValue(new ByteArrayInputStream(dashboardConfig.getBytes()))); return new DashboardXmlConfigService((DashboardConfigFileFactory) mock.proxy()); } }