package net.frontlinesms.camel.smslib;
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatcher;
import org.apache.camel.*;
import org.junit.*;
import org.smslib.COutgoingMessage;
/** JUnit tests for {@link SmslibProducer} */
public class SmslibProducerTest {
SmslibEndpoint mockEndpoint;
SmslibService mockSmslibService;
SmslibProducer p;
@Before
public void setUp() {
mockEndpoint = mock(SmslibEndpoint.class);
mockSmslibService = mock(SmslibService.class);
p = new SmslibProducer(mockEndpoint, mockSmslibService);
}
@After
public void tearDown() {
mockEndpoint = null;
mockSmslibService = null;
p = null;
}
@Test
public void testDoStartShouldStartService() throws Exception {
p.doStart();
verify(mockSmslibService).startForProducer();
}
@Test
public void testDoStopShouldStopService() throws Exception {
p.stop();
verify(mockSmslibService).stopForProducer(p);
}
@Test
public void testProcessing() throws Exception {
// given
COutgoingMessage smslibMessage = mock(COutgoingMessage.class);
Exchange sendMessageExchange = exchangeWithInBody(smslibMessage);
// when
p.process(sendMessageExchange);
// then
verify(mockSmslibService).send(messageWithBody(smslibMessage));
}
private Exchange exchangeWithInBody(COutgoingMessage inBody) {
Message m = mock(Message.class);
when(m.getBody()).thenReturn(inBody);
Exchange x = mock(Exchange.class);
when(x.getIn()).thenReturn(m);
return x;
}
private OutgoingSmslibCamelMessage messageWithBody(final COutgoingMessage m) {
return argThat(new ArgumentMatcher<OutgoingSmslibCamelMessage>() {
@Override
public boolean matches(Object argument) {
return ((OutgoingSmslibCamelMessage) argument).getBody() == m;
}
});
}
}