package de.ppi.samples.fuwesta.service.impl;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import de.ppi.samples.fuwesta.dao.api.PostDao;
import de.ppi.samples.fuwesta.dao.api.TagDao;
import de.ppi.samples.fuwesta.model.Post;
import de.ppi.samples.fuwesta.model.Tag;
import de.ppi.samples.fuwesta.service.api.TagService;
/**
* The Class TagServiceImplTest.
*/
public class TagServiceImplTest {
/**
* Mock for tagDao.
*/
@Mock
private TagDao tagDao;
/**
* Mock for postDao.
*/
@Mock
private PostDao postDao;
/**
* The service to test.
*/
@InjectMocks
private TagService tagService = new TagServiceImpl();
/**
* Initialize the test.
*
*/
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
/**
* Test method for
* {@link de.ppi.fuwesta.samples.springmvc.service.impl.TagServiceImpl#getAllTag()}
* .
*/
@Test
public void testGetAllTag() {
// Arange
// Act
tagService.getAllTag();
// Assert
verify(tagDao, times(1)).findAll((Pageable) null);
}
/**
* Test method for
* {@link de.ppi.fuwesta.samples.springmvc.service.impl.TagServiceImpl#getTag(int, int, org.springframework.data.domain.Sort.Order[])}
* .
*/
@Test
public void testGetTag() {
// CSOFF: MagicNumber
// Arange
PageRequest pr = new PageRequest(2, 4);
// Act
tagService.getTag(10, 4);
// Assert
verify(tagDao, times(1)).findAll(pr);
// CSON: MagicNumber
}
/**
* Test method for
* {@link de.ppi.fuwesta.samples.springmvc.service.impl.TagServiceImpl#save(de.ppi.fuwesta.samples.springmvc.model.Tag)}
* .
*/
@Test
public void testSave() {
// Arange
final Tag aTag = new Tag();
when(tagDao.save(any(Tag.class))).thenReturn(aTag);
// Act
final Tag testTag = tagService.save(new Tag());
// Assert
assertThat(testTag).isEqualTo(aTag);
verify(tagDao, times(1)).save(any(Tag.class));
// CSON: MagicNumber
}
/**
* Test method for
* {@link de.ppi.fuwesta.samples.springmvc.service.impl.TagServiceImpl#read(java.lang.Long)}
* .
*/
@Test
public void testRead() {
// Act
tagService.read(Long.valueOf(1L));
// Assert
verify(tagDao, times(1)).findOne(Long.valueOf(1L));
}
/**
* Test method for
* {@link de.ppi.fuwesta.samples.springmvc.service.impl.TagServiceImpl#delete(java.lang.Long)}
* .
*/
@Test
public void testDelete() {
// Act
tagService.delete(Long.valueOf(1L));
// Assert
verify(tagDao, times(1)).delete(Long.valueOf(1L));
}
/**
* Test method for
* {@link de.ppi.fuwesta.samples.springmvc.service.impl.TagServiceImpl#getNrOfTags()}
* .
*/
@SuppressWarnings("boxing")
@Test
public void testNrOfTags() {
final long nrOfTag = 10;
when(tagDao.count()).thenReturn(nrOfTag);
// Act
long testValue = tagService.getNrOfTags();
// Assert
verify(tagDao, times(1)).count();
assertThat(testValue).isEqualTo(nrOfTag);
}
/**
* Test method for
* {@link de.ppi.fuwesta.samples.springmvc.service.impl.TagServiceImpl#getPostingSelectOptions()}
* .
*/
@Test
public void testGetPostingSelectOptions() {
// Arrange
final List<Post> postings = new ArrayList<Post>();
final int numberOfPosts = 5;
for (long i = 0; i < numberOfPosts; i++) {
Post post = new Post();
post.setId(Long.valueOf(i));
post.setTitle("Title " + i);
postings.add(post);
}
when(postDao.findAllOrderByTitle()).thenReturn(postings);
// Act
final List<Post> result = tagService.getPostingSelectOptions();
// Assert
assertThat(result).hasSize(numberOfPosts).isEqualTo(postings);
}
}