package gov.samhsa.acs.xdsb.repository.wsclient.adapter;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import gov.samhsa.acs.common.tool.SimpleMarshaller;
import gov.samhsa.acs.common.tool.XmlTransformer;
import gov.samhsa.acs.common.tool.exception.SimpleMarshallerException;
import gov.samhsa.acs.xdsb.common.XdsbDocumentType;
import gov.samhsa.acs.xdsb.common.XdsbMetadataGeneratorImpl;
import gov.samhsa.acs.xdsb.repository.wsclient.XDSRepositorybWebServiceClient;
import gov.samhsa.acs.xdsb.repository.wsclient.exception.XdsbRepositoryAdapterException;
import ihe.iti.xds_b._2007.ProvideAndRegisterDocumentSetRequest;
import ihe.iti.xds_b._2007.ProvideAndRegisterDocumentSetRequest.Document;
import ihe.iti.xds_b._2007.RetrieveDocumentSetRequest;
import ihe.iti.xds_b._2007.RetrieveDocumentSetRequest.DocumentRequest;
import ihe.iti.xds_b._2007.RetrieveDocumentSetResponse;
import java.util.ArrayList;
import java.util.List;
import oasis.names.tc.ebxml_regrep.xsd.lcm._3.SubmitObjectsRequest;
import oasis.names.tc.ebxml_regrep.xsd.rs._3.RegistryResponse;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
public class XdsbRepositoryAdapterTest {
// Constants
private static final String DOCUMENT_XML_STRING = "DOCUMENT_XML_STRING";
private static final String HOME_COMMUNITY_ID = "HOME_COMMUNITY_ID";
private static final String SUBMIT_OBJECTS_REQUEST_STRING = "SUBMIT_OBJECTS_REQUEST_STRING";
// System under test
private static XdsbRepositoryAdapter xdsbRepositoryAdapterSpy;
// Mocks
@Mock
private XDSRepositorybWebServiceClient xdsbRepositoryMock;
@Mock
private XdsbMetadataGeneratorImpl xdsbMetadataGeneratorMock;
@Mock
private SimpleMarshaller marshallerMock;
@Mock
private RetrieveDocumentSetResponseFilter responseFilterMock;
@Mock
private XmlTransformer xmlTransformerMock;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
final XdsbRepositoryAdapter xdsbRepositoryAdapter = new XdsbRepositoryAdapter(
xdsbRepositoryMock, marshallerMock, responseFilterMock,
xmlTransformerMock);
xdsbRepositoryAdapterSpy = spy(xdsbRepositoryAdapter);
}
@Test
public void testcreateRetrieveDocumentSetRequest() {
final DocumentRequest documentRequest = mock(DocumentRequest.class);
final RetrieveDocumentSetRequest requestExpected = new RetrieveDocumentSetRequest();
requestExpected.getDocumentRequest().add(documentRequest);
final RetrieveDocumentSetRequest requestActual = xdsbRepositoryAdapterSpy
.createRetrieveDocumentSetRequest(documentRequest);
assertEquals(requestExpected.getDocumentRequest(),
requestActual.getDocumentRequest());
}
@Test
public void testCreateRetrieveDocumentSetRequest() {
final List<DocumentRequest> docRequest = new ArrayList();
final DocumentRequest documentRequest = mock(DocumentRequest.class);
final DocumentRequest documentRequest2 = mock(DocumentRequest.class);
docRequest.add(documentRequest);
docRequest.add(documentRequest2);
final RetrieveDocumentSetRequest requestExpected = new RetrieveDocumentSetRequest();
requestExpected.getDocumentRequest().addAll(docRequest);
final RetrieveDocumentSetRequest requestActual = xdsbRepositoryAdapterSpy
.createRetrieveDocumentSetRequest(docRequest);
assertEquals(requestExpected.getDocumentRequest(),
requestActual.getDocumentRequest());
}
@Test(expected = IllegalArgumentException.class)
public void testProvideAndRegisterDocumentSet()
throws XdsbRepositoryAdapterException, SimpleMarshallerException {
xdsbRepositoryAdapterSpy.provideAndRegisterDocumentSet(
DOCUMENT_XML_STRING, HOME_COMMUNITY_ID,
XdsbDocumentType.DEPRECATE_PRIVACY_CONSENT, "1", null);
}
@Test
public void testProvideAndRegisterDocumentSetRequest_Given_DocumentXml_HomeCommunityId()
throws Throwable {
// Arrange
when(
xdsbMetadataGeneratorMock.generateMetadataXml(
DOCUMENT_XML_STRING, HOME_COMMUNITY_ID, null, null))
.thenReturn(SUBMIT_OBJECTS_REQUEST_STRING);
final SubmitObjectsRequest submitObjectRequest = new SubmitObjectsRequest();
when(
marshallerMock.unmarshalFromXml(SubmitObjectsRequest.class,
SUBMIT_OBJECTS_REQUEST_STRING)).thenReturn(
submitObjectRequest);
final Document document = new Document();
when(xdsbRepositoryAdapterSpy.createDocument(DOCUMENT_XML_STRING))
.thenReturn(document);
final ProvideAndRegisterDocumentSetRequest request = new ProvideAndRegisterDocumentSetRequest();
when(
xdsbRepositoryAdapterSpy
.createProvideAndRegisterDocumentSetRequest(
submitObjectRequest, document)).thenReturn(
request);
final RegistryResponse response = new RegistryResponse();
when(xdsbRepositoryMock.provideAndRegisterDocumentSet(request))
.thenReturn(response);
when(
xdsbRepositoryAdapterSpy
.createXdsbMetadataGenerator(isA(XdsbDocumentType.class)))
.thenReturn(xdsbMetadataGeneratorMock);
// Act
final RegistryResponse actualResponse = xdsbRepositoryAdapterSpy
.provideAndRegisterDocumentSet(DOCUMENT_XML_STRING,
HOME_COMMUNITY_ID, XdsbDocumentType.CLINICAL_DOCUMENT,
null, null);
// Assert
assertEquals(response, actualResponse);
}
@Test(expected = XdsbRepositoryAdapterException.class)
public void testProvideAndRegisterDocumentSetRequest_Given_DocumentXml_HomeCommunityId_throw_exception()
throws Throwable {
// Arrange
when(
xdsbMetadataGeneratorMock.generateMetadataXml(
DOCUMENT_XML_STRING, HOME_COMMUNITY_ID, null, null))
.thenReturn(SUBMIT_OBJECTS_REQUEST_STRING);
final SubmitObjectsRequest submitObjectRequest = new SubmitObjectsRequest();
when(
marshallerMock.unmarshalFromXml(SubmitObjectsRequest.class,
SUBMIT_OBJECTS_REQUEST_STRING)).thenThrow(
SimpleMarshallerException.class);
final Document document = new Document();
when(xdsbRepositoryAdapterSpy.createDocument(DOCUMENT_XML_STRING))
.thenReturn(document);
final ProvideAndRegisterDocumentSetRequest request = new ProvideAndRegisterDocumentSetRequest();
when(
xdsbRepositoryAdapterSpy
.createProvideAndRegisterDocumentSetRequest(
submitObjectRequest, document)).thenReturn(
request);
final RegistryResponse response = new RegistryResponse();
when(xdsbRepositoryMock.provideAndRegisterDocumentSet(request))
.thenReturn(response);
when(
xdsbRepositoryAdapterSpy
.createXdsbMetadataGenerator(isA(XdsbDocumentType.class)))
.thenReturn(xdsbMetadataGeneratorMock);
// Act
final RegistryResponse actualResponse = xdsbRepositoryAdapterSpy
.provideAndRegisterDocumentSet(DOCUMENT_XML_STRING,
HOME_COMMUNITY_ID, XdsbDocumentType.CLINICAL_DOCUMENT,
null, null);
// Assert
assertEquals(response, actualResponse);
}
@Test
public void testProvideAndRegisterDocumentSetRequest_Given_DocumentXml_HomeCommunityId2()
throws Throwable {
// Arrange
when(
xdsbMetadataGeneratorMock.generateMetadataXml(
DOCUMENT_XML_STRING, HOME_COMMUNITY_ID, null, null))
.thenReturn(SUBMIT_OBJECTS_REQUEST_STRING);
final SubmitObjectsRequest submitObjectRequest = new SubmitObjectsRequest();
when(
marshallerMock.unmarshalFromXml(SubmitObjectsRequest.class,
SUBMIT_OBJECTS_REQUEST_STRING)).thenReturn(
submitObjectRequest);
final Document document = new Document();
when(xdsbRepositoryAdapterSpy.createDocument(DOCUMENT_XML_STRING))
.thenReturn(document);
final ProvideAndRegisterDocumentSetRequest request = new ProvideAndRegisterDocumentSetRequest();
when(
xdsbRepositoryAdapterSpy
.createProvideAndRegisterDocumentSetRequest(
submitObjectRequest, document)).thenReturn(
request);
final RegistryResponse response = new RegistryResponse();
when(xdsbRepositoryMock.provideAndRegisterDocumentSet(request))
.thenReturn(response);
when(
xdsbRepositoryAdapterSpy
.createXdsbMetadataGenerator(isA(XdsbDocumentType.class)))
.thenReturn(xdsbMetadataGeneratorMock);
// Act
final RegistryResponse actualResponse = xdsbRepositoryAdapterSpy
.provideAndRegisterDocumentSet("<empty/>", HOME_COMMUNITY_ID,
XdsbDocumentType.CLINICAL_DOCUMENT, null, null);
// Assert
assertEquals(null, actualResponse);
}
@Test
public void testProvideAndRegisterDocumentSetRequest_Given_ProvideAndRegisterDocumentSetRequest() {
// Arrange
final ProvideAndRegisterDocumentSetRequest provideAndRegisterDocumentSetRequest = new ProvideAndRegisterDocumentSetRequest();
final RegistryResponse registryResponse = new RegistryResponse();
when(
xdsbRepositoryMock
.provideAndRegisterDocumentSet(provideAndRegisterDocumentSetRequest))
.thenReturn(registryResponse);
// Act
final RegistryResponse actualRegistryResponse = xdsbRepositoryAdapterSpy
.provideAndRegisterDocumentSet(provideAndRegisterDocumentSetRequest);
// Assert
assertEquals(registryResponse, actualRegistryResponse);
}
@Test
public void testretrieveDocumentSet() throws XdsbRepositoryAdapterException {
final RetrieveDocumentSetRequest request = mock(RetrieveDocumentSetRequest.class);
final RetrieveDocumentSetResponse response = new RetrieveDocumentSetResponse();
when(xdsbRepositoryMock.retrieveDocumentSet(request)).thenReturn(
response);
when(responseFilterMock.filterByPatientAndAuthor(response, "1", "123"))
.thenReturn(response);
final RetrieveDocumentSetResponse responseActual = xdsbRepositoryAdapterSpy
.retrieveDocumentSet(request, "1", "123");
assertEquals(response, responseActual);
}
@Test
public void testRetrieveDocumentSet() {
final DocumentRequest documentRequest = mock(DocumentRequest.class);
final RetrieveDocumentSetRequest requestExpected = new RetrieveDocumentSetRequest();
requestExpected.getDocumentRequest().add(documentRequest);
final RetrieveDocumentSetResponse retrieveDocumentSetResponseExpected = xdsbRepositoryMock
.retrieveDocumentSet(requestExpected);
final RetrieveDocumentSetResponse retrieveDocumentSetResponseActual = xdsbRepositoryAdapterSpy
.retrieveDocumentSet(documentRequest);
assertEquals(retrieveDocumentSetResponseExpected,
retrieveDocumentSetResponseActual);
}
@Test
public void testRetrieveDocumentSet_set() {
final List<DocumentRequest> docRequest = new ArrayList();
final DocumentRequest documentRequest = mock(DocumentRequest.class);
final DocumentRequest documentRequest2 = mock(DocumentRequest.class);
docRequest.add(documentRequest);
docRequest.add(documentRequest2);
final RetrieveDocumentSetRequest requestExpected = new RetrieveDocumentSetRequest();
requestExpected.getDocumentRequest().addAll(docRequest);
final RetrieveDocumentSetResponse retrieveDocumentSetResponseExpected = xdsbRepositoryMock
.retrieveDocumentSet(requestExpected);
final RetrieveDocumentSetResponse retrieveDocumentSetResponseActual = xdsbRepositoryAdapterSpy
.retrieveDocumentSet(docRequest);
assertEquals(retrieveDocumentSetResponseExpected,
retrieveDocumentSetResponseActual);
}
@Test
public void testRetrieveDocumentSetRequest_Given_DocumentUniqueId_RepositoryId() {
// Arrange
final RetrieveDocumentSetRequest retrieveDocumentSetRequest = new RetrieveDocumentSetRequest();
when(
xdsbRepositoryAdapterSpy.createRetrieveDocumentSetRequest(
DOCUMENT_XML_STRING, HOME_COMMUNITY_ID)).thenReturn(
retrieveDocumentSetRequest);
final RetrieveDocumentSetResponse retrieveDocumentSetResponse = new RetrieveDocumentSetResponse();
when(xdsbRepositoryMock.retrieveDocumentSet(retrieveDocumentSetRequest))
.thenReturn(retrieveDocumentSetResponse);
// Act
final RetrieveDocumentSetResponse actualResponse = xdsbRepositoryAdapterSpy
.retrieveDocumentSet(DOCUMENT_XML_STRING, HOME_COMMUNITY_ID);
// Assert
assertEquals(retrieveDocumentSetResponse, actualResponse);
}
@Test
public void testRetrieveDocumentSetRequest_Given_RetrieveDocumentSetRequest() {
// Arrange
final RetrieveDocumentSetRequest retrieveDocumentSetRequest = new RetrieveDocumentSetRequest();
final RetrieveDocumentSetResponse retrieveDocumentSetResponse = new RetrieveDocumentSetResponse();
when(xdsbRepositoryMock.retrieveDocumentSet(retrieveDocumentSetRequest))
.thenReturn(retrieveDocumentSetResponse);
// Act
final RetrieveDocumentSetResponse actualResponse = xdsbRepositoryAdapterSpy
.retrieveDocumentSet(retrieveDocumentSetRequest);
// Assert
assertEquals(retrieveDocumentSetResponse, actualResponse);
}
}