package uk.nhs.kch.rassyeyanie.framework.processor;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Predicate;
import org.apache.camel.component.hl7.HL7Constants;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.impl.DefaultMessage;
import org.junit.Before;
import org.junit.Test;
import uk.nhs.kch.rassyeyanie.framework.processor.AbstractHeaderMatchingTransformer;
/**
*/
public class AbstractHeaderMatchingTransformerTest {
private static final String SENDER_1 = "Fred";
private static final String SENDER_2 = "Bob";
private static final String TRIGGER_1 = "woke up";
private static final String TRIGGER_2 = "had a biscuit";
private AbstractHeaderMatchingTransformer transformer;
private Exchange exchange;
private Message message;
@Before
public void setUp() {
DefaultCamelContext camelContext = new DefaultCamelContext();
message = new DefaultMessage();
exchange = new DefaultExchange(camelContext);
exchange.setIn(message);
transformer = new DummyTransformer();
}
@Test
public void testListsNotSet() {
Predicate predicate = transformer.shouldProcessMessage();
assertTrue(predicate.matches(exchange));
}
@Test
public void testNullLists() {
transformer.setSendingApplicationFilterList(null);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(null);
Predicate predicate = transformer.shouldProcessMessage();
assertTrue(predicate.matches(exchange));
}
@Test
public void testEmptyLists() {
List<String> emptyList = Collections.emptyList();
transformer.setSendingApplicationFilterList(emptyList);
transformer.setSendingFacilityFilterList(emptyList);
transformer.setReceivingApplicationFilterList(emptyList);
transformer.setReceivingFacilityFilterList(emptyList);
transformer.setMessageTypeFilterList(emptyList);
transformer.setTriggerEventFilterList(emptyList);
Predicate predicate = transformer.shouldProcessMessage();
assertTrue(predicate.matches(exchange));
}
@Test
public void testCorrectSender() {
List<String> senders = Arrays.asList(SENDER_1);
transformer.setSendingApplicationFilterList(senders);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(null);
message.setHeader(HL7Constants.HL7_SENDING_APPLICATION, SENDER_1);
Predicate predicate = transformer.shouldProcessMessage();
assertTrue(predicate.matches(exchange));
}
@Test
public void testInterestedInSeveralSenders() {
List<String> senders = Arrays.asList(SENDER_1, SENDER_2);
transformer.setSendingApplicationFilterList(senders);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(null);
message.setHeader(HL7Constants.HL7_SENDING_APPLICATION, SENDER_1);
Predicate predicate = transformer.shouldProcessMessage();
assertTrue(predicate.matches(exchange));
}
@Test
public void testWrongSender() {
List<String> senders = Arrays.asList(SENDER_1);
transformer.setSendingApplicationFilterList(senders);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(null);
message.setHeader(HL7Constants.HL7_SENDING_APPLICATION, SENDER_2);
Predicate predicate = transformer.shouldProcessMessage();
assertFalse(predicate.matches(exchange));
}
@Test
public void testNoSenderInHeader() {
List<String> senders = Arrays.asList(SENDER_1);
transformer.setSendingApplicationFilterList(senders);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(null);
Predicate predicate = transformer.shouldProcessMessage();
assertFalse(predicate.matches(exchange));
}
@Test
public void testCorrectTrigger() {
List<String> triggers = Arrays.asList(TRIGGER_1);
transformer.setSendingApplicationFilterList(null);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(triggers);
message.setHeader(HL7Constants.HL7_TRIGGER_EVENT, TRIGGER_1);
Predicate predicate = transformer.shouldProcessMessage();
assertTrue(predicate.matches(exchange));
}
@Test
public void testInterestedInSeveralTriggers() {
List<String> triggers = Arrays.asList(TRIGGER_1, TRIGGER_2);
transformer.setSendingApplicationFilterList(null);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(triggers);
message.setHeader(HL7Constants.HL7_TRIGGER_EVENT, TRIGGER_1);
Predicate predicate = transformer.shouldProcessMessage();
assertTrue(predicate.matches(exchange));
}
@Test
public void testWrongTrigger() {
List<String> triggers = Arrays.asList(TRIGGER_1);
transformer.setSendingApplicationFilterList(null);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(triggers);
message.setHeader(HL7Constants.HL7_TRIGGER_EVENT, TRIGGER_2);
Predicate predicate = transformer.shouldProcessMessage();
assertFalse(predicate.matches(exchange));
}
@Test
public void testNoTriggerInHeader() {
List<String> triggers = Arrays.asList(TRIGGER_1);
transformer.setSendingApplicationFilterList(null);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(triggers);
Predicate predicate = transformer.shouldProcessMessage();
assertFalse(predicate.matches(exchange));
}
@Test
public void testCorrectSenderCorrectTrigger() {
List<String> senders = Arrays.asList(SENDER_1);
List<String> triggers = Arrays.asList(TRIGGER_1);
transformer.setSendingApplicationFilterList(senders);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(triggers);
message.setHeader(HL7Constants.HL7_SENDING_APPLICATION, SENDER_1);
message.setHeader(HL7Constants.HL7_TRIGGER_EVENT, TRIGGER_1);
Predicate predicate = transformer.shouldProcessMessage();
assertTrue(predicate.matches(exchange));
}
@Test
public void testWrongSenderWrongTrigger() {
List<String> senders = Arrays.asList(SENDER_1);
List<String> triggers = Arrays.asList(TRIGGER_1);
transformer.setSendingApplicationFilterList(senders);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(triggers);
message.setHeader(HL7Constants.HL7_SENDING_APPLICATION, SENDER_2);
message.setHeader(HL7Constants.HL7_TRIGGER_EVENT, TRIGGER_2);
Predicate predicate = transformer.shouldProcessMessage();
assertFalse(predicate.matches(exchange));
}
@Test
public void testCorrectSenderWrongTrigger() {
List<String> senders = Arrays.asList(SENDER_1);
List<String> triggers = Arrays.asList(TRIGGER_1);
transformer.setSendingApplicationFilterList(senders);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(triggers);
message.setHeader(HL7Constants.HL7_SENDING_APPLICATION, SENDER_1);
message.setHeader(HL7Constants.HL7_TRIGGER_EVENT, TRIGGER_2);
Predicate predicate = transformer.shouldProcessMessage();
assertFalse(predicate.matches(exchange));
}
@Test
public void testWrongSenderCorrectTrigger() {
List<String> senders = Arrays.asList(SENDER_1);
List<String> triggers = Arrays.asList(TRIGGER_1);
transformer.setSendingApplicationFilterList(senders);
transformer.setSendingFacilityFilterList(null);
transformer.setReceivingApplicationFilterList(null);
transformer.setReceivingFacilityFilterList(null);
transformer.setMessageTypeFilterList(null);
transformer.setTriggerEventFilterList(triggers);
message.setHeader(HL7Constants.HL7_SENDING_APPLICATION, SENDER_2);
message.setHeader(HL7Constants.HL7_TRIGGER_EVENT, TRIGGER_1);
Predicate predicate = transformer.shouldProcessMessage();
assertFalse(predicate.matches(exchange));
}
private static class DummyTransformer extends AbstractHeaderMatchingTransformer {
@Override
public void process(Exchange exchange) {
// Do nothing
}
}
}