package husaccttest.control;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import husacct.ServiceProvider;
import husacct.common.Resource;
import husacct.control.ControlServiceImpl;
import husacct.control.domain.Workspace;
import husacct.control.task.MainController;
import husacct.control.task.WorkspaceController;
import husacct.control.task.resources.XmlResource;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashMap;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class WorkspaceControllerTest {
WorkspaceController workspaceController;
File testFile = new File("WorkspaceTestFile.xml");
File validTestFile;
@Before
public void setup(){
ServiceProvider serviceProvider = ServiceProvider.getInstance();
serviceProvider.resetServices();
ControlServiceImpl controlService = (ControlServiceImpl) serviceProvider.getControlService();
MainController mainController = controlService.getMainController();
workspaceController = mainController.getWorkspaceController();
URL testFileURI = Resource.get(Resource.CONTROL_TEST_WORKSPACE);
try {
validTestFile = new File(testFileURI.toURI());
} catch (URISyntaxException e) {
System.out.println("Unable to load valid test file from resources");
}
}
@After
public void cleanup(){
testFile.delete();
}
@Test
public void testNewWorkspace(){
workspaceController.createWorkspace("JUnitTestWorkspace");
assertNotNull(workspaceController.getCurrentWorkspace());
}
@Test
public void testIsOpenWorkspace(){
workspaceController.createWorkspace("JUnitTestWorkspace");
assertTrue(workspaceController.isAWorkspaceOpened());
}
@Test
public void testCloseWorkspace(){
workspaceController.createWorkspace("JUnitTestWorkspace");
workspaceController.closeWorkspace();
assertNull(workspaceController.getCurrentWorkspace());
}
@Test
public void testSetWorkspace(){
Workspace workspace1 = new Workspace();
workspaceController.setWorkspace(workspace1);
Workspace workspace2 = workspaceController.getCurrentWorkspace();
assertSame(workspace1, workspace2);
}
@Test
public void testGetWorkspaceData(){
Document doc = workspaceController.getWorkspaceData();
assertNotNull(doc.getRootElement());
}
@Test
public void testLoadWorkspaceData(){
HashMap<String, Object> data = new HashMap<String, Object>();
data.put("file", validTestFile);
workspaceController.loadWorkspace("xml", data);
assertNotNull(workspaceController.getCurrentWorkspace());
XmlResource xmlResource = new XmlResource();
Document doc1 = xmlResource.load(data);
Document doc2 = workspaceController.getWorkspaceData();
Element doc1ControlServiceElement = doc1.getRootElement().getChild("husacct.control.ControlServiceImpl");
Element doc2ControlServiceElement = doc2.getRootElement().getChild("husacct.control.ControlServiceImpl");
XMLOutputter outputter = new XMLOutputter();
outputter.setFormat(Format.getCompactFormat());
String doc1String = outputter.outputString(doc1ControlServiceElement);
String doc2String = outputter.outputString(doc2ControlServiceElement);
assertEquals(doc1String.length(), doc2String.length());
}
@Test
public void testSaveWorkspace(){
HashMap<String, Object> data = new HashMap<String, Object>();
HashMap<String, Object> config = new HashMap<String, Object>();
data.put("file", testFile);
config.put("doCompress", false);
config.put("doPasswordProtection", false);
workspaceController.saveWorkspace("xml", data,config);
assertTrue(testFile.exists());
}
}