mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-03-01 01:21:04 +08:00
fix post deletion cascade
This commit is contained in:
@@ -10,4 +10,5 @@ import java.util.Optional;
|
|||||||
public interface PostReadRepository extends JpaRepository<PostRead, Long> {
|
public interface PostReadRepository extends JpaRepository<PostRead, Long> {
|
||||||
Optional<PostRead> findByUserAndPost(User user, Post post);
|
Optional<PostRead> findByUserAndPost(User user, Post post);
|
||||||
long countByUser(User user);
|
long countByUser(User user);
|
||||||
|
void deleteByPost(Post post);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,4 +41,9 @@ public class PostReadService {
|
|||||||
.orElseThrow(() -> new IllegalArgumentException("User not found"));
|
.orElseThrow(() -> new IllegalArgumentException("User not found"));
|
||||||
return postReadRepository.countByUser(user);
|
return postReadRepository.countByUser(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@org.springframework.transaction.annotation.Transactional
|
||||||
|
public void deleteByPost(Post post) {
|
||||||
|
postReadRepository.deleteByPost(post);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -360,6 +360,7 @@ public class PostService {
|
|||||||
reactionRepository.findByPost(post).forEach(reactionRepository::delete);
|
reactionRepository.findByPost(post).forEach(reactionRepository::delete);
|
||||||
postSubscriptionRepository.findByPost(post).forEach(postSubscriptionRepository::delete);
|
postSubscriptionRepository.findByPost(post).forEach(postSubscriptionRepository::delete);
|
||||||
notificationRepository.deleteAll(notificationRepository.findByPost(post));
|
notificationRepository.deleteAll(notificationRepository.findByPost(post));
|
||||||
|
postReadService.deleteByPost(post);
|
||||||
postRepository.delete(post);
|
postRepository.delete(post);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
52
src/test/java/com/openisle/service/PostServiceTest.java
Normal file
52
src/test/java/com/openisle/service/PostServiceTest.java
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
package com.openisle.service;
|
||||||
|
|
||||||
|
import com.openisle.model.*;
|
||||||
|
import com.openisle.repository.*;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
|
class PostServiceTest {
|
||||||
|
@Test
|
||||||
|
void deletePostRemovesReads() {
|
||||||
|
PostRepository postRepo = mock(PostRepository.class);
|
||||||
|
UserRepository userRepo = mock(UserRepository.class);
|
||||||
|
CategoryRepository catRepo = mock(CategoryRepository.class);
|
||||||
|
TagRepository tagRepo = mock(TagRepository.class);
|
||||||
|
NotificationService notifService = mock(NotificationService.class);
|
||||||
|
SubscriptionService subService = mock(SubscriptionService.class);
|
||||||
|
CommentService commentService = mock(CommentService.class);
|
||||||
|
CommentRepository commentRepo = mock(CommentRepository.class);
|
||||||
|
ReactionRepository reactionRepo = mock(ReactionRepository.class);
|
||||||
|
PostSubscriptionRepository subRepo = mock(PostSubscriptionRepository.class);
|
||||||
|
NotificationRepository notificationRepo = mock(NotificationRepository.class);
|
||||||
|
PostReadService postReadService = mock(PostReadService.class);
|
||||||
|
|
||||||
|
PostService service = new PostService(postRepo, userRepo, catRepo, tagRepo,
|
||||||
|
notifService, subService, commentService, commentRepo,
|
||||||
|
reactionRepo, subRepo, notificationRepo, postReadService,
|
||||||
|
PublishMode.DIRECT);
|
||||||
|
|
||||||
|
Post post = new Post();
|
||||||
|
post.setId(1L);
|
||||||
|
User author = new User();
|
||||||
|
author.setId(1L);
|
||||||
|
author.setRole(Role.USER);
|
||||||
|
post.setAuthor(author);
|
||||||
|
|
||||||
|
when(postRepo.findById(1L)).thenReturn(Optional.of(post));
|
||||||
|
when(userRepo.findByUsername("alice")).thenReturn(Optional.of(author));
|
||||||
|
when(commentRepo.findByPostAndParentIsNullOrderByCreatedAtAsc(post)).thenReturn(List.of());
|
||||||
|
when(reactionRepo.findByPost(post)).thenReturn(List.of());
|
||||||
|
when(subRepo.findByPost(post)).thenReturn(List.of());
|
||||||
|
when(notificationRepo.findByPost(post)).thenReturn(List.of());
|
||||||
|
|
||||||
|
service.deletePost(1L, "alice");
|
||||||
|
|
||||||
|
verify(postReadService).deleteByPost(post);
|
||||||
|
verify(postRepo).delete(post);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user