package gov.va.med.edp.rpc;
import gov.va.med.vistalink.adapter.record.LoginsDisabledFaultException;
import gov.va.med.vistalink.adapter.record.VistaLinkFaultException;
import gov.va.med.vistalink.rpc.NoRpcContextFaultException;
import gov.va.med.vistalink.rpc.RpcNotInContextFaultException;
import gov.va.med.vistalink.rpc.RpcNotOkForProxyUseException;
import gov.va.med.vistalink.security.m.SecurityAccessVerifyCodePairInvalidException;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.dao.DataRetrievalFailureException;
import org.springframework.dao.PermissionDeniedDataAccessException;
public class VistaLinkRpcTemplateTest extends AbstractVistaLinkConnectionTest {
private static final String TEST_DUZ = "1234567";
protected static final String TEST_RPC_CONTEXT = "FOO RPC CONTEXT";
protected static final String TEST_RPC = "FOO BAR RPC";
protected static final String TEST_DIVISION = "500";
public void testExecuteRpcAsUserNoParams() {
expectVistaLinkDuzConnection(TEST_DUZ);
expectRpcAndReturn(TEST_RPC_CONTEXT, TEST_RPC, "");
replay();
VistaLinkRpcTemplate t = new VistaLinkRpcTemplate(mockConnectionFactoryLocator);
String result = t.rpcAsUser(TEST_DIVISION, TEST_DUZ, TEST_RPC_CONTEXT, TEST_RPC);
assertEquals("", result);
verify();
}
public void testExecuteRpcAsApplicationNoParams() {
expectVistaLinkAppProxyConnection(TEST_DUZ);
expectRpcAndReturn(TEST_RPC_CONTEXT, TEST_RPC, "");
replay();
VistaLinkRpcTemplate t = new VistaLinkRpcTemplate(mockConnectionFactoryLocator);
String result = t.rpcAsApplication(TEST_DIVISION, TEST_DUZ, TEST_RPC_CONTEXT, TEST_RPC);
assertEquals("", result);
verify();
}
public void testDataAccessResourceFailureExceptionFromLocator() {
VistaLinkRpcTemplate t = new VistaLinkRpcTemplate(mockConnectionFactoryLocator);
try {
t.rpcAsUser("600", TEST_DUZ, TEST_RPC_CONTEXT, TEST_RPC); // locator can only find station 500
fail("expected data access resource failure exception");
} catch (DataAccessResourceFailureException e) {
// NOOP
}
}
public void testVistaLinkFaultException() {
assertExceptionDuringRpc(DataRetrievalFailureException.class, new VistaLinkFaultException("foo bar baz"));
}
public void testSecurityFaultException() {
assertExceptionDuringRpc(VistaLinkRpcPermissionDeniedException.class, new SecurityAccessVerifyCodePairInvalidException(new VistaLinkFaultException("foo bar baz")));
}
public void testRpcNotInContextException() {
assertExceptionDuringRpc(VistaLinkRpcPermissionDeniedException.class, new RpcNotInContextFaultException(new VistaLinkFaultException("foo bar baz")));
}
public void testNoRpcContextException() {
assertExceptionDuringRpc(VistaLinkRpcInvalidApiUsageException.class, new NoRpcContextFaultException(new VistaLinkFaultException("foo bar baz")));
}
public void testRpcNotOkForProxyUseException() {
expectVistaLinkAppProxyConnection(TEST_DUZ);
expectRpcAndDefaultThrow(TEST_RPC_CONTEXT, TEST_RPC, new RpcNotOkForProxyUseException(new VistaLinkFaultException("foo bar baz")));
replay();
VistaLinkRpcTemplate t = new VistaLinkRpcTemplate(mockConnectionFactoryLocator);
try {
t.rpcAsApplication(TEST_DIVISION, TEST_DUZ, TEST_RPC_CONTEXT, TEST_RPC);
fail("expected permission denied exception");
} catch (VistaLinkRpcInvalidApiUsageException e) {
// NOOP
}
verify();
}
public void testLoginsDisabledException() {
assertExceptionDuringRpc(DataAccessResourceFailureException.class, new LoginsDisabledFaultException(new VistaLinkFaultException("foo bar baz")));
}
public void assertExceptionDuringRpc(Class expectedException, Throwable throwDuringRpc) {
expectVistaLinkDuzConnection(TEST_DUZ);
expectVistaLinkAppProxyConnection(TEST_DUZ);
expectRpcAndDefaultThrow(TEST_RPC_CONTEXT, TEST_RPC, throwDuringRpc);
replay();
VistaLinkRpcTemplate t = new VistaLinkRpcTemplate(mockConnectionFactoryLocator);
try {
t.rpcAsUser(TEST_DIVISION, TEST_DUZ, TEST_RPC_CONTEXT, TEST_RPC);
fail("expected " + expectedException.getName());
} catch (Exception e) {
assertTrue(expectedException.isAssignableFrom(e.getClass()));
}
try {
t.rpcAsApplication(TEST_DIVISION, TEST_DUZ, TEST_RPC_CONTEXT, TEST_RPC);
fail("expected " + expectedException.getName());
} catch (Exception e) {
assertTrue(expectedException.isAssignableFrom(e.getClass()));
}
verify();
}
protected String getStationNumber() {
return TEST_DIVISION;
}
}