package edu.asu.spring.quadriga.utilities;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import edu.asu.spring.quadriga.domain.enums.ETextAccessibility;
import edu.asu.spring.quadriga.domain.factory.workspace.ITextFileFactory;
import edu.asu.spring.quadriga.domain.impl.workspace.TextFile;
import edu.asu.spring.quadriga.domain.workspace.ITextFile;
import edu.asu.spring.quadriga.exceptions.TextFileParseException;
import edu.asu.spring.quadriga.utilities.ITextXMLParser;
import edu.asu.spring.quadriga.utilities.impl.TextXMLParser;
/**
* Unit Test for Text XML Parser Functions
*
* @author Nischal Samji
*
*/
public class TextXMLParserTest {
@InjectMocks
private ITextXMLParser textXMLParser = new TextXMLParser();
@Mock
private ITextFileFactory txtFileFactory;
@Rule
public ExpectedException textFileException = ExpectedException.none();
private String wellFormedXML;
private String malformedXML;
private String invalidXML;
private String missingXML;
private String projid;
private String wsid;
@Before
public void init() throws TextFileParseException {
MockitoAnnotations.initMocks(this);
wellFormedXML = new String(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><textfile><text>This is the actual textfile content</text><handle>thishandle</handle><file_name>newfile</file_name><accessibility>public</accessibility></textfile>");
malformedXML = new String(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><textfile>This is the actual textfile content</text><handle>thishandle</handle><file_name>newfile</file_name></textfile>");
invalidXML = new String(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><textfile><text>This is the actual textfile content</text><handle>thishandle</handle><file_name></file_name><accessibility>public</accessibility></textfile>");
missingXML = new String(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><textfile><handle>thishandle</handle><file_name>newfile</file_name></textfile>");
String projid = "PROJ_XYZ_WERT";
String wsid = "WS_123_456";
ITextFile properText = new TextFile();
Mockito.when(txtFileFactory.createTextFileObject()).thenReturn(properText);
}
@Test
public void testWellFormedXML() throws TextFileParseException {
ITextFile txtFile = textXMLParser.parseTextXML(wellFormedXML, wsid, projid);
Assert.assertEquals(wsid, txtFile.getWorkspaceId());
Assert.assertEquals(projid, txtFile.getProjectId());
Assert.assertEquals("thishandle", txtFile.getRefId());
Assert.assertEquals("This is the actual textfile content", txtFile.getFileContent());
Assert.assertEquals("newfile", txtFile.getFileName());
Assert.assertEquals(ETextAccessibility.PUBLIC, txtFile.getAccessibility());
}
@Test
public void testMalformedXML() throws Exception {
textFileException.expect(TextFileParseException.class);
textXMLParser.parseTextXML(malformedXML, wsid, projid);
}
@Test
public void testInvalidXML() throws Exception {
textFileException.expect(TextFileParseException.class);
textFileException.expectMessage("Filename cannot be empty");
textXMLParser.parseTextXML(invalidXML, wsid, projid);
}
@Test
public void testMissingXML() throws Exception {
textFileException.expect(TextFileParseException.class);
textFileException.expectMessage("File content must be specified in the input XML");
textXMLParser.parseTextXML(missingXML, wsid, projid);
}
}