package gov.va.med.edp.vistalink; 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 gov.va.med.edp.vistalink.VistaLinkTemplate; import org.springframework.dao.DataAccessResourceFailureException; public class VistaLinkTemplateTest 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, null, ""); replay(); VistaLinkTemplate t = new VistaLinkTemplate(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, null, ""); replay(); VistaLinkTemplate t = new VistaLinkTemplate(mockConnectionFactoryLocator); String result = t.rpcAsApplication(TEST_DIVISION, TEST_DUZ, TEST_RPC_CONTEXT, TEST_RPC); assertEquals("", result); verify(); } public void testDataAccessResourceFailureExceptionFromLocator() { VistaLinkTemplate t = new VistaLinkTemplate(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(VistaLinkDataRetrievalFailureException.class, new VistaLinkFaultException("foo bar baz")); } public void testSecurityFaultException() { assertExceptionDuringRpc(VistaLinkPermissionDeniedException.class, new SecurityAccessVerifyCodePairInvalidException(new VistaLinkFaultException("foo bar baz"))); } public void testRpcNotInContextException() { assertExceptionDuringRpc(VistaLinkRpcNotInContextException.class, new RpcNotInContextFaultException(new VistaLinkFaultException("foo bar baz"))); } public void testNoRpcContextException() { assertExceptionDuringRpc(VistaLinkNoRpcContextException.class, new NoRpcContextFaultException(new VistaLinkFaultException("foo bar baz"))); } public void testRpcNotOkForProxyUseException() { expectVistaLinkAppProxyConnection(TEST_DUZ); expectRpcAndDefaultThrow(TEST_RPC_CONTEXT, TEST_RPC, null, new RpcNotOkForProxyUseException(new VistaLinkFaultException("foo bar baz"))); replay(); VistaLinkTemplate t = new VistaLinkTemplate(mockConnectionFactoryLocator); try { t.rpcAsApplication(TEST_DIVISION, TEST_DUZ, TEST_RPC_CONTEXT, TEST_RPC); fail("expected vistalink not OK for proxy use exception"); } catch (VistaLinkRpcNotOkForProxyUseException e) { // NOOP } verify(); } public void testLoginsDisabledException() { assertExceptionDuringRpc(VistaLinkLoginsDisabledException.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, null, throwDuringRpc); expectRpcAndDefaultThrow(TEST_RPC_CONTEXT, TEST_RPC, null, throwDuringRpc); replay(); VistaLinkTemplate t = new VistaLinkTemplate(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; } }