package gov.samhsa.acs.contexthandler.pg;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import gov.samhsa.acs.contexthandler.pg.RequestGenerator;
import java.io.InputStream;
import org.herasaf.xacml.core.SyntaxException;
import org.herasaf.xacml.core.context.impl.RequestType;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class RequestGeneratorTest {
RequestGenerator requestGenerator=new RequestGenerator ();
@Test
public void testGetDate() {
String date=requestGenerator.getDate();
assertTrue (date.matches("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-\\d{4}"));
}
//@Test
public void testGenerateRequestString(){
RequestGenerator sut=spy(requestGenerator);
when(sut.getDate()).thenReturn("2013-12-23T14:48:07-0500");
String expected = "<xacml-context:Request xmlns:xacml-context=\"urn:oasis:names:tc:xacml:2.0:context:schema:os\"> " +
" <xacml-context:Subject SubjectCategory=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\"> " +
" <xacml-context:Attribute AttributeId=\"urn:oasis:names:tc:xacml:1.0:subject-category:intermediary-subject\" DataType=\"http://www.w3.org/2001/XMLSchema#string\"> " +
" <xacml-context:AttributeValue>1568797520</xacml-context:AttributeValue> " +
" </xacml-context:Attribute> " +
" <xacml-context:Attribute AttributeId=\"urn:oasis:names:tc:xacml:1.0:subject-category:recipient-subject\" DataType=\"http://www.w3.org/2001/XMLSchema#string\"> " +
" <xacml-context:AttributeValue>1285969170</xacml-context:AttributeValue> " +
" </xacml-context:Attribute> " +
" <xacml-context:Attribute AttributeId=\"urn:oasis:names:tc:xspa:1.0:subject:purposeofuse\" DataType=\"http://www.w3.org/2001/XMLSchema#string\"> " +
" <xacml-context:AttributeValue>TREATMENT</xacml-context:AttributeValue> " +
" </xacml-context:Subject> " +
" <Resource xmlns=\"urn:oasis:names:tc:xacml:2.0:context:schema:os\"> " +
" <Attribute AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:typeCode\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" XdsId=\"urn:uuid:f0306f51-975f-434e-a61c-c59651d33983\"> " +
" <AttributeValue>34133-9</AttributeValue> " +
" </Attribute> " +
" <Attribute AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:practiceSettingCode\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" XdsId=\"urn:uuid:cccf5598-8b07-4b77-a05e-ae952c785ead\"> " +
" <AttributeValue>Psychiatry</AttributeValue> " +
" </Attribute> " +
" <Attribute AttributeId=\"xacml:status\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" XdsId=\"status\"> " +
" <AttributeValue>urn:oasis:names:tc:ebxml-regrep:StatusType:Approved</AttributeValue> " +
" </Attribute> " +
" </Resource> " +
" <xacml-context:Action> " +
" <xacml-context:Attribute AttributeId=\"urn:oasis:names:tc:xacml:1.0:action:action-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\"> " +
" <xacml-context:AttributeValue>xdsquery</xacml-context:AttributeValue> " +
" </xacml-context:Attribute> " +
" </xacml-context:Action> " +
" <xacml-context:Environment> " +
" <xacml-context:Attribute AttributeId=\"urn:oasis:names:tc:xacml:1.0:environment:current-dateTime\" DataType=\"http://www.w3.org/2001/XMLSchema#dateTime\"> " +
" <xacml-context:AttributeValue>2014-07-18T09:36:25.588Z</xacml-context:AttributeValue> " +
" </xacml-context:Attribute> " +
" </xacml-context:Environment> " +
" </xacml-context:Request>";
String actual = sut.generateRequestString("1285969170", "1568797520", "TREATMENT");
String result = actual.replaceAll("\\s+", "");
expected = expected.replaceAll("\\s+", "");
Assert.assertEquals(expected, result);
}
@Test
public void testGenerateRequest() throws SyntaxException{
RequestGenerator sut=spy(requestGenerator);
RequestType request=mock(RequestType.class);
doReturn(request).when(sut).unmarshalRequest(any(InputStream.class));
when(sut.getDate()).thenReturn("2013-12-23T14:48:07-0500");
sut.generateRequest("123", "456", "TREAT");
verify (sut,times(1)).unmarshalRequest(any(InputStream.class));
}
@Test
public void testGenerateRequestWhenThereIsSyntaxErrorAndExceptionIsHandled() throws SyntaxException{
RequestGenerator sut=spy(requestGenerator);
doThrow(new SyntaxException()).when(sut).unmarshalRequest(any(InputStream.class));
when(sut.getDate()).thenReturn("2013-12-23T14:48:07-0500");
sut.generateRequest("123", "456", "TREAT");
}
}