/* * Copyright (c) JForum Team. All rights reserved. * * The software in this package is published under the terms of the LGPL * license a copy of which has been included with this distribution in the * license.txt file. * * The JForum Project * http://www.jforum.net */ package net.jforum.core.events.post; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import net.jforum.entities.Post; import net.jforum.entities.Topic; import net.jforum.entities.User; import net.jforum.repository.TopicRepository; import net.jforum.repository.UserRepository; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; /** * @author Rafael Steil, Jonatan Cloutier */ @RunWith(MockitoJUnitRunner.class) public class TopicPostEventTestCase { @Mock private TopicRepository repository; @Mock private UserRepository userRepository; @InjectMocks private TopicPostEvent event; @Test public void shouldUpdateUserTotalPost() { final Post post = this.newPost(); post.getUser().setTotalPosts(5); when(repository.getTotalPosts(post.getTopic())).thenReturn(1); when(userRepository.getTotalPosts(post.getUser())).thenReturn(2); when(repository.getFirstPost(any(Topic.class))).thenReturn(newPost()); event.deleted(post); Assert.assertEquals(2, post.getUser().getTotalPosts()); } @Test public void emptyPostsShouldRemoveTopic() { final Post post = this.newPost(); int totalPosts = post.getTopic().getTotalPosts(); when(repository.getTotalPosts(post.getTopic())).thenReturn(0); event.deleted(post); verify(repository).remove(post.getTopic()); Assert.assertEquals(totalPosts - 1, post.getTopic().getTotalPosts()); } @Test public void removeLastPostOnly() { final Post post = this.newPost(); post.getTopic().getFirstPost().setId(3); post.getTopic().getLastPost().setId(4); int totalPosts = post.getTopic().getTotalPosts(); Post lastPost = new Post(); lastPost.setId(5); when(repository.getTotalPosts(post.getTopic())).thenReturn(2); when(repository.getLastPost(post.getTopic())).thenReturn(lastPost); post.setId(4); event.deleted(post); verify(userRepository).getTotalPosts(post.getUser()); Post expected = new Post(); expected.setId(5); Assert.assertEquals(expected, post.getTopic().getLastPost()); Assert.assertEquals(totalPosts - 1, post.getTopic().getTotalPosts()); } @Test public void removeFirstPostOnly() { final Post post = this.newPost(); int totalPosts = post.getTopic().getTotalPosts(); Post newFirst = newPost(); newFirst.setId(6); newFirst.getUser().setId(9); when(repository.getTotalPosts(post.getTopic())).thenReturn(2); when(repository.getFirstPost(post.getTopic())).thenReturn(newFirst); event.deleted(post); verify(userRepository).getTotalPosts(post.getUser()); Post expected = new Post(); expected.setId(6); Assert.assertEquals(expected, post.getTopic().getFirstPost()); User expectedUser = new User(); expectedUser.setId(9); Assert.assertEquals(expectedUser, post.getTopic().getUser()); Assert.assertEquals(totalPosts - 1, post.getTopic().getTotalPosts()); } private Post newPost() { Post p = new Post(); p.setId(1); p.setUser(new User()); Topic t = new Topic(); t.setId(1); t.setUser(new User()); t.setFirstPost(new Post()); t.getFirstPost().setId(1); t.setLastPost(new Post()); t.getLastPost().setId(2); p.setTopic(t); return p; } }