package com.niklim.clicktrace.view.session; import static org.fest.assertions.Assertions.assertThat; import java.io.File; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.fest.swing.core.matcher.JButtonMatcher; import org.fest.swing.exception.WaitTimedOutError; import org.fest.swing.fixture.DialogFixture; import org.fest.swing.fixture.JOptionPaneFixture; import org.junit.Test; import com.niklim.clicktrace.AbstractSystemTest; import com.niklim.clicktrace.Files; import com.niklim.clicktrace.TestSessionsData; import com.niklim.clicktrace.service.FileManager; import com.niklim.clicktrace.service.SessionManager; public class NewSessionTest extends AbstractSystemTest { @Test public void shouldCreateNewSession() throws InterruptedException, ConfigurationException { // given final String sessionName = "test session"; final String sessionDescription = null; // when editorFixture.menuItemWithPath("File", "New session").click(); DialogFixture dialogPane = editorFixture.dialog(); dialogPane.textBox("name").setText(sessionName); dialogPane.button(JButtonMatcher.withText("Create")).click(); // then try { assertThat(editorFixture.optionPane()).isNull(); } catch (WaitTimedOutError ex) { } assertThat(activeSession.isSessionLoaded()).isTrue(); assertThat(activeSession.getSession()).isNotNull(); assertThat(activeSession.getSession().getName()).isEqualTo(sessionName); assertDataPersisted(sessionName, sessionDescription); assertControlsState(); } @Test public void shouldCreateNewSessionWithDescription() throws InterruptedException, ConfigurationException { // given final String sessionName = "test session"; final String sessionDescription = "test session description"; // when editorFixture.menuItemWithPath("File", "New session").click(); DialogFixture dialogPane = editorFixture.dialog(); dialogPane.textBox("name").setText(sessionName); dialogPane.textBox("description").setText(sessionDescription); dialogPane.button(JButtonMatcher.withText("Create")).click(); // then try { assertThat(editorFixture.optionPane()).isNull(); } catch (WaitTimedOutError ex) { } assertThat(activeSession.isSessionLoaded()).isTrue(); assertThat(activeSession.getSession()).isNotNull(); assertThat(activeSession.getSession().getDescription()).isEqualTo(sessionDescription); assertDataPersisted(sessionName, sessionDescription); assertControlsState(); } private void assertDataPersisted(String sessionName, String sessionDescription) throws ConfigurationException { boolean sessionDirExists = Files.exists(props.getSessionsDirPath() + sessionName); assertThat(sessionDirExists).isTrue(); String propsPath = props.getSessionsDirPath() + sessionName + File.separator + FileManager.SESSION_PROPS_FILENAME; boolean propsFileExists = Files.exists(propsPath); assertThat(propsFileExists).isTrue(); PropertiesConfiguration props = new PropertiesConfiguration(propsPath); assertThat(props.getString(SessionManager.PROP_SESSION_DESCRIPTION)).isEqualTo(sessionDescription); } private void assertControlsState() { for (String item : new String[] { "Start recording", "Refresh session", "Select all screenshots", "Deselect all screenshots", "Delete selected screenshots", "Delete current session" }) { editorFixture.menuItemWithPath("Session", item).requireEnabled(); } editorFixture.menuItemWithPath("Session", "Stop recording").requireDisabled(); } @Test public void shouldNotCreateExistingSession() throws InterruptedException { // given final String sessionName = "test session"; // when editorFixture.menuItemWithPath("File", "New session").click(); DialogFixture dialogPane = editorFixture.dialog(); dialogPane.textBox("name").setText(sessionName); dialogPane.button(JButtonMatcher.withText("Create")).click(); editorFixture.menuItemWithPath("File", "New session").click(); dialogPane.textBox("name").setText(sessionName); dialogPane.button(JButtonMatcher.withText("Create")).click(); // then JOptionPaneFixture optionPane = editorFixture.optionPane(); assertThat(optionPane).isNotNull(); optionPane.button().click(); boolean sessionDirExists = Files.exists(props.getSessionsDirPath() + sessionName); assertThat(sessionDirExists).isTrue(); } @Override protected TestSessionsData getSessionsData() { return TestSessionsData.EMPTY; } }