Deduplicate post search results

This commit is contained in:
Tim
2025-07-01 23:14:03 +08:00
parent 26e624c43b
commit 0b424805e5
2 changed files with 70 additions and 5 deletions

View File

@@ -0,0 +1,47 @@
package com.openisle.service;
import com.openisle.model.Post;
import com.openisle.model.PostStatus;
import com.openisle.repository.CommentRepository;
import com.openisle.repository.PostRepository;
import com.openisle.repository.UserRepository;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
class SearchServiceTest {
@Test
void globalSearchDeduplicatesPosts() {
UserRepository userRepo = Mockito.mock(UserRepository.class);
PostRepository postRepo = Mockito.mock(PostRepository.class);
CommentRepository commentRepo = Mockito.mock(CommentRepository.class);
SearchService service = new SearchService(userRepo, postRepo, commentRepo);
Post post1 = new Post();
post1.setId(1L);
post1.setTitle("hello");
Post post2 = new Post();
post2.setId(2L);
post2.setTitle("world");
Mockito.when(postRepo.findByTitleContainingIgnoreCaseOrContentContainingIgnoreCaseAndStatus(
Mockito.anyString(), Mockito.anyString(), Mockito.eq(PostStatus.PUBLISHED)))
.thenReturn(List.of(post1));
Mockito.when(postRepo.findByTitleContainingIgnoreCaseAndStatus(Mockito.anyString(), Mockito.eq(PostStatus.PUBLISHED)))
.thenReturn(List.of(post1, post2));
Mockito.when(commentRepo.findByContentContainingIgnoreCase(Mockito.anyString()))
.thenReturn(List.of());
Mockito.when(userRepo.findByUsernameContainingIgnoreCase(Mockito.anyString()))
.thenReturn(List.of());
List<SearchService.SearchResult> results = service.globalSearch("h");
assertEquals(2, results.size());
assertEquals(1L, results.get(0).id());
assertEquals(2L, results.get(1).id());
}
}