package sagan.blog.support;
import sagan.blog.Post;
import sagan.blog.PostBuilder;
import sagan.search.types.SearchEntry;
import sagan.search.support.SearchService;
import sagan.support.DateFactory;
import sagan.support.DateTestUtils;
import java.util.Date;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class BlogService_UpdatePostTests {
private BlogService service;
private Post post;
private Date publishAt = DateTestUtils.getDate("2013-07-01 12:00");
private Date now = DateTestUtils.getDate("2013-07-01 13:00");
@Mock
private PostRepository postRepository;
@Mock
private DateFactory dateFactory;
@Mock
private SearchService searchService;
@Mock
private PostFormAdapter postFormAdapter;
@Rule
public ExpectedException expected = ExpectedException.none();
private PostForm postForm;
@Before
public void setup() {
given(dateFactory.now()).willReturn(now);
service = new BlogService(postRepository, postFormAdapter, dateFactory, searchService);
post = PostBuilder.post().id(123L).publishAt(publishAt).build();
postForm = new PostForm(post);
service.updatePost(post, postForm);
}
@Test
public void postIsUpdated() {
verify(postFormAdapter).updatePostFromPostForm(post, postForm);
}
@Test
public void postIsPersisted() {
verify(postRepository).save(post);
}
@Test
public void updatingABlogPost_addsThatPostToTheSearchIndexIfPublished() {
verify(searchService).saveToIndex((SearchEntry) anyObject());
}
@Test
public void updatingABlogPost_doesNotSaveToSearchIndexIfNotLive() throws Exception {
reset(searchService);
long postId = 123L;
Post post = PostBuilder.post().id(postId).draft().build();
service.updatePost(post, new PostForm(post));
verifyZeroInteractions(searchService);
}
}