package org.ei.drishti.service;
import org.ei.drishti.common.audit.Auditor;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.motechproject.sms.api.service.SmsService;
import static org.ei.drishti.common.audit.AuditMessageType.SMS;
import static org.mockito.Mockito.*;
import static org.mockito.MockitoAnnotations.initMocks;
public class DrishtiSMSServiceTest {
@Mock
private SmsService smsService;
@Mock
private Auditor auditor;
@Mock
Auditor.AuditMessageBuilder messageBuilder;
@Before
public void setUp() throws Exception {
initMocks(this);
when(auditor.audit(SMS)).thenReturn(messageBuilder);
when(messageBuilder.with(any(String.class), any(String.class))).thenReturn(messageBuilder);
}
@Test
public void shouldNotSendAnSMSIfTheFlagIsTurnedOff() {
DrishtiSMSService drishtiSMSService = new DrishtiSMSService(smsService, auditor, true);
drishtiSMSService.canSendSMSes(false);
assertMessageWillNotBeSent(drishtiSMSService);
}
@Test
public void shouldNotSendAnSMSIfTheFlagIsTurnedOn() {
DrishtiSMSService drishtiSMSService = new DrishtiSMSService(smsService, auditor, true);
drishtiSMSService.canSendSMSes(true);
assertMessageWillBeSent(drishtiSMSService);
}
@Test
public void shouldSendSMSIfDefaultValueIsTrueAndHasNotBeenChanged() {
DrishtiSMSService drishtiSMSService = new DrishtiSMSService(smsService, auditor, true);
assertMessageWillBeSent(drishtiSMSService);
}
@Test
public void shouldNotSendSMSIfDefaultValueIsFalseAndHasNotBeenChanged() {
DrishtiSMSService drishtiSMSService = new DrishtiSMSService(smsService, auditor, false);
assertMessageWillNotBeSent(drishtiSMSService);
}
@Test
public void shouldAuditTheSMSMessageThatWasSent() {
DrishtiSMSService drishtiSMSService = new DrishtiSMSService(smsService, auditor, true);
drishtiSMSService.sendSMS("9845700000", "Some message");
verify(messageBuilder).with("recipient", "9845700000");
verify(messageBuilder).with("message", "Some message");
verify(messageBuilder).with("smsIsSent", "true");
}
@Test
public void shouldAuditEvenWhenTheSMSMessageWasNotSent() {
DrishtiSMSService drishtiSMSService = new DrishtiSMSService(smsService, auditor, false);
drishtiSMSService.sendSMS("9845700000", "Some message");
verify(messageBuilder).with("recipient", "9845700000");
verify(messageBuilder).with("message", "Some message");
verify(messageBuilder).with("smsIsSent", "false");
}
private void assertMessageWillBeSent(DrishtiSMSService drishtiSMSService) {
drishtiSMSService.sendSMS("9845700000", "Some message");
verify(smsService, times(1)).sendSMS("9845700000", "Some message");
}
private void assertMessageWillNotBeSent(DrishtiSMSService drishtiSMSService) {
drishtiSMSService.sendSMS("9845700000", "Some message");
verify(smsService, times(0)).sendSMS("9845700000", "Some message");
}
}