package com.b2msolutions.reyna.messageProvider;
import com.b2msolutions.reyna.system.Header;
import com.b2msolutions.reyna.system.Message;
import com.b2msolutions.reyna.Repository;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import java.net.URISyntaxException;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(RobolectricTestRunner.class)
public class MessageProviderTest {
private MessageProvider messageProvider;
@Mock
Repository repository;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
this.messageProvider = new MessageProvider(this.repository);
}
@Test
public void testConstruction() {
this.messageProvider = new MessageProvider(this.repository);
assertNotNull(this.messageProvider);
assertNotNull(this.messageProvider.repository);
}
@Test
public void whenCallingCloseShouldCloseRepository() throws URISyntaxException {
this.messageProvider.close();
verify(this.repository).close();
}
@Test
public void whenCallingDeleteShouldDeleteFromRepository() throws URISyntaxException {
Message message = mock(Message.class);
when(message.getId()).thenReturn(42L);
this.messageProvider.delete(message);
verify(this.repository).delete(message);
}
@Test
public void whenCallingGetNextAndNoMessageShouldReturnNull() throws URISyntaxException {
when(this.messageProvider.getNext()).thenReturn(null);
Message actual = this.messageProvider.getNext();
assertNull(actual);
verify(this.repository).getNext();
}
@Test
public void whenCallingGetNextAndMessageAvailableShouldReturnMessageAndAddId() throws URISyntaxException {
Message message = mock(Message.class);
when(message.getId()).thenReturn(42L);
when(this.messageProvider.getNext()).thenReturn(message);
ArgumentCaptor<Header> header = ArgumentCaptor.forClass(Header.class);
Message actual = this.messageProvider.getNext();
assertNotNull(actual);
verify(this.repository).getNext();
verify(message).addHeader(header.capture());
assertEquals("42", header.getValue().getValue());
assertEquals("reyna-id", header.getValue().getKey());
}
@Test
public void whenShouldSendShouldReturnTrue() throws URISyntaxException {
boolean actual = this.messageProvider.canSend();
assertTrue(actual);
}
}