From 075c691ba3171255b22ae91accf64536f93db0bb Mon Sep 17 00:00:00 2001 From: Andreas Svanberg <andreass@dsv.su.se> Date: Thu, 13 Mar 2025 12:47:44 +0100 Subject: [PATCH] Convert mocked tests to integration tests --- .../forum/BasicForumServiceImplTest.java | 198 ------------------ .../BasicForumServiceIntegrationTest.java | 92 ++++++++ 2 files changed, 92 insertions(+), 198 deletions(-) delete mode 100644 core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceImplTest.java diff --git a/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceImplTest.java deleted file mode 100644 index 6846f54411..0000000000 --- a/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceImplTest.java +++ /dev/null @@ -1,198 +0,0 @@ -package se.su.dsv.scipro.forum; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -import com.google.common.eventbus.EventBus; -import java.util.Collections; -import java.util.List; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.AdditionalAnswers; -import org.mockito.ArgumentCaptor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import se.su.dsv.scipro.forum.dataobjects.ForumPost; -import se.su.dsv.scipro.forum.dataobjects.ForumPostReadState; -import se.su.dsv.scipro.forum.dataobjects.ForumThread; -import se.su.dsv.scipro.system.User; -import se.su.dsv.scipro.test.ForumBuilder; -import se.su.dsv.scipro.test.UserBuilder; - -@ExtendWith(MockitoExtension.class) -public class BasicForumServiceImplTest { - - @Mock - private AbstractThreadRepository threadRepository; - - @Mock - private ForumPostReadStateRepository readStateRepository; - - @Mock - private ForumPostRepository postRepository; - - @Mock - private EventBus eventBus; - - @InjectMocks - private BasicForumServiceImpl basicForumService; - - @Test - public void testGetPostPageByForumThread() { - List<ForumPost> posts = Collections.singletonList(new ForumBuilder().createPost()); - when(postRepository.findByThread(isA(ForumThread.class))).thenReturn(posts); - - List<ForumPost> servicePage = basicForumService.getPosts(mock(ForumThread.class)); - - assertEquals(posts, servicePage); - } - - @Test - public void testMarkRead() { - when(readStateRepository.find(any(User.class), any(ForumPost.class))).thenReturn(new ForumPostReadState()); - when(readStateRepository.save(isA(ForumPostReadState.class))).thenAnswer(AdditionalAnswers.returnsFirstArg()); - - User user = new User(); - ForumPost post = new ForumPost(); - - boolean read = basicForumService.setRead(user, post, true); - - assertTrue(read, "Did not return proper read state"); - - ArgumentCaptor<ForumPostReadState> captor = ArgumentCaptor.forClass(ForumPostReadState.class); - verify(readStateRepository, times(1)).save(captor.capture()); - - assertTrue(captor.getValue().isRead(), "Did not save correct read state"); - } - - @Test - public void testMarkUnread() { - when(readStateRepository.find(any(User.class), any(ForumPost.class))).thenReturn(new ForumPostReadState()); - when(readStateRepository.save(isA(ForumPostReadState.class))).thenAnswer(AdditionalAnswers.returnsFirstArg()); - - // when - User user = new User(); - ForumPost post = new ForumPost(); - - // when - boolean read = basicForumService.setRead(user, post, false); - - // then - assertFalse(read, "Did not return proper read state"); - - ArgumentCaptor<ForumPostReadState> captor = ArgumentCaptor.forClass(ForumPostReadState.class); - verify(readStateRepository, times(1)).save(captor.capture()); - - assertFalse(captor.getValue().isRead(), "Did not save correct read state"); - } - - @Test - public void testMarkThreadReadPostsEvent() { - User user = new User(); - ForumPost post = new ForumPost(); - post.setContent("post 1"); - ForumPost post2 = new ForumPost(); - post2.setContent("post 2"); - ForumThread forumThread = new ForumThread(); - forumThread.addPost(post); - forumThread.addPost(post2); - - basicForumService.setThreadRead(user, forumThread, true); - - verify(eventBus).post(new ForumPostReadEvent(post, user)); - verify(eventBus).post(new ForumPostReadEvent(post2, user)); - } - - @Test - public void testIsThreadRead() { - User goodUser = new UserBuilder().setFirstName("Reads").setLastName("Forum").create(); - User badUser = new UserBuilder().setFirstName("Does not read").setLastName("Forum").create(); - - ForumPost post = new ForumPost(); - ForumPostReadState readState = new ForumPostReadState(goodUser, post); - readState.setRead(true); - - ForumPostReadState notReadState = new ForumPostReadState(badUser, post); - notReadState.setRead(false); - - ForumThread forumThread = new ForumThread(); - forumThread.addPost(post); - - when(postRepository.findByThread(forumThread)).thenReturn(List.of(post)); - - when(readStateRepository.find(eq(goodUser), isA(ForumPost.class))).thenReturn(readState); - when(readStateRepository.find(eq(badUser), isA(ForumPost.class))).thenReturn(notReadState); - - boolean goodUserState = basicForumService.isThreadRead(goodUser, forumThread); - boolean badUserState = basicForumService.isThreadRead(badUser, forumThread); - - assertTrue(goodUserState, "Good user has not read all thread posts"); - assertFalse(badUserState, "Bad user has read all thread posts"); - } - - @Test - public void create_forum_thread() { - when(threadRepository.save(any(ForumThread.class))).thenAnswer(AdditionalAnswers.returnsFirstArg()); - final String subject = "Subject"; - - ForumThread thread = basicForumService.createThread(subject); - - assertThat(thread.getSubject(), is(subject)); - } - - @Test - public void reply_to_thread() { - when(readStateRepository.find(any(User.class), any(ForumPost.class))).thenReturn(new ForumPostReadState()); - when(readStateRepository.save(isA(ForumPostReadState.class))).thenAnswer(AdditionalAnswers.returnsFirstArg()); - when(threadRepository.save(any(ForumThread.class))).thenAnswer(AdditionalAnswers.returnsFirstArg()); - when(postRepository.save(any(ForumPost.class))).thenAnswer(AdditionalAnswers.returnsFirstArg()); - - final ForumThread forumThread = new ForumThread(); - final User poster = User.builder().firstName("Bob").lastName("Example").emailAddress("bob@example.com").build(); - final String content = "content"; - - ForumPost forumPost = basicForumService.createReply(forumThread, poster, content, Collections.emptySet()); - - assertThat(forumPost.getContent(), is(content)); - assertThat(forumPost.getPostedBy(), is(poster)); - assertThat(forumPost.getForumThread(), is(forumThread)); - } - - @Test - public void mark_post_read_posts_event() { - when(readStateRepository.find(any(User.class), any(ForumPost.class))).thenReturn(new ForumPostReadState()); - when(readStateRepository.save(isA(ForumPostReadState.class))).thenAnswer(AdditionalAnswers.returnsFirstArg()); - - final ForumPost post = new ForumPost(); - post.setId(235235L); - final User user = new User(); - user.setId(2378924L); - - basicForumService.setRead(user, post, true); - - ArgumentCaptor<ForumPostReadEvent> captor = ArgumentCaptor.forClass(ForumPostReadEvent.class); - verify(eventBus).post(captor.capture()); - - ForumPostReadEvent event = captor.getValue(); - assertEquals(event.post(), post); - assertEquals(event.user(), user); - } - - @Test - public void mark_post_unread_does_not_post_read_event() { - when(readStateRepository.find(any(User.class), any(ForumPost.class))).thenReturn(new ForumPostReadState()); - when(readStateRepository.save(isA(ForumPostReadState.class))).thenAnswer(AdditionalAnswers.returnsFirstArg()); - - final ForumPost post = new ForumPost(); - post.setId(235235L); - final User user = new User(); - user.setId(2378924L); - - basicForumService.setRead(user, post, false); - - verify(eventBus, never()).post(isA(ForumPostReadEvent.class)); - } -} diff --git a/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java index d9d762deee..c654be9b93 100644 --- a/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java +++ b/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java @@ -1,11 +1,16 @@ package se.su.dsv.scipro.forum; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.not; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import jakarta.inject.Inject; +import java.util.List; import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -103,4 +108,91 @@ public class BasicForumServiceIntegrationTest extends IntegrationTest { assertFalse(basicForumService.canDelete(originalPost)); assertThrows(IllegalArgumentException.class, () -> basicForumService.deletePost(originalPost)); } + + @Test + public void testGetPostPageByForumThread() { + ForumThread thread = basicForumService.createThread("Test thread"); + ForumPost post1 = basicForumService.createReply(thread, op, "Test post 1", Set.of()); + ForumPost post2 = basicForumService.createReply(thread, commenter, "Test post 2", Set.of()); + + List<ForumPost> posts = basicForumService.getPosts(thread); + + assertThat(posts, contains(post1, post2)); + } + + @Test + public void testMarkRead() { + ForumThread thread = basicForumService.createThread("Test thread"); + ForumPost post = basicForumService.createReply(thread, op, "Test post 1", Set.of()); + + boolean read = basicForumService.setRead(commenter, post, true); + + assertTrue(read, "Did not return proper read state"); + + boolean isRead = basicForumService.isRead(commenter, post); + + assertTrue(isRead, "Did not save correct read state"); + } + + @Test + public void testMarkUnread() { + ForumThread thread = basicForumService.createThread("Test thread"); + ForumPost post = basicForumService.createReply(thread, op, "Test post 1", Set.of()); + + boolean read = basicForumService.setRead(op, post, false); + + assertFalse(read, "Did not return proper read state"); + + boolean isRead = basicForumService.isRead(commenter, post); + + assertFalse(isRead, "Did not save correct read state"); + } + + @Test + public void testMarkThreadReadPostsEvent() { + ForumThread thread = basicForumService.createThread("Test thread"); + ForumPost post1 = basicForumService.createReply(thread, op, "Test post 1", Set.of()); + ForumPost post2 = basicForumService.createReply(thread, op, "Test post 2", Set.of()); + + basicForumService.setThreadRead(commenter, thread, true); + + assertThat(getPublishedEvents(), hasItem(new ForumPostReadEvent(post1, commenter))); + assertThat(getPublishedEvents(), hasItem(new ForumPostReadEvent(post2, commenter))); + } + + @Test + public void testIsThreadRead() { + ForumThread thread = basicForumService.createThread("Test thread"); + basicForumService.createReply(thread, op, "Test post 1", Set.of()); + + basicForumService.setThreadRead(commenter, thread, true); + + basicForumService.createReply(thread, commenter, "Test post 2", Set.of()); + + boolean goodUserState = basicForumService.isThreadRead(commenter, thread); + boolean badUserState = basicForumService.isThreadRead(op, thread); + + assertTrue(goodUserState, "Good user has not read all thread posts"); + assertFalse(badUserState, "Bad user has read all thread posts"); + } + + @Test + public void mark_post_read_posts_event() { + ForumThread thread = basicForumService.createThread("Test thread"); + ForumPost post = basicForumService.createReply(thread, op, "Test post 1", Set.of()); + + basicForumService.setRead(commenter, post, true); + + assertThat(getPublishedEvents(), hasItem(new ForumPostReadEvent(post, commenter))); + } + + @Test + public void mark_post_unread_does_not_post_read_event() { + ForumThread thread = basicForumService.createThread("Test thread"); + ForumPost post = basicForumService.createReply(thread, op, "Test post 1", Set.of()); + + basicForumService.setRead(commenter, post, false); + + assertThat(getPublishedEvents(), not(hasItem(new ForumPostReadEvent(post, commenter)))); + } }