package org.ei.drishti.web.controller; import org.ei.drishti.common.audit.AuditMessage; import org.ei.drishti.common.audit.Auditor; import org.joda.time.DateTime; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.motechproject.util.DateUtil; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.ei.drishti.common.audit.AuditMessageType.FORM_SUBMISSION; import static org.ei.drishti.common.audit.AuditMessageType.SMS; import static org.ei.drishti.web.controller.AuditMessageController.AuditMessageItem; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; import static org.motechproject.delivery.schedule.util.SameItems.hasSameItemsAs; public class AuditMessageControllerTest { @Mock Auditor auditor; private DateTime now; private DateTime yesterday; @Before public void setUp() throws Exception { initMocks(this); now = DateUtil.now(); yesterday = DateUtil.now().minusDays(1); } @Test public void shouldGetAuditMessagesSinceGivenTime() throws IOException { AuditMessageController controller = new AuditMessageController(auditor); when(auditor.messagesSince(10)).thenReturn(messages()); List<AuditMessageItem> messageItems = controller.getAuditMessages(10); assertThat(messageItems, hasSameItemsAs(expectedMessageItems())); } private List<AuditMessageItem> expectedMessageItems() { final List<AuditMessageItem> expectedItems = new ArrayList<AuditMessageItem>(); expectedItems.add(new AuditMessageItem(now, 11, SMS, smsData())); expectedItems.add(new AuditMessageItem(yesterday, 12, FORM_SUBMISSION, formData())); return expectedItems; } private List<AuditMessage> messages() { ArrayList<AuditMessage> messages = new ArrayList<AuditMessage>(); messages.add(new AuditMessage(now, 11, SMS, smsData())); messages.add(new AuditMessage(yesterday, 12, FORM_SUBMISSION, formData())); return messages; } private HashMap<String, String> formData() { HashMap<String, String> map = new HashMap<String, String>(); map.put("data", "Form 1"); map.put("someOtherData", "Def"); return map; } private Map<String, String> smsData() { Map<String,String> map = new HashMap<String, String>(); map.put("recipient", "Abc"); map.put("message", "SMS 1"); return map; } }