1212import org .junit .jupiter .api .DisplayName ;
1313import org .junit .jupiter .api .Test ;
1414import org .springframework .beans .factory .annotation .Autowired ;
15+ import org .springframework .boot .test .context .SpringBootTest ;
16+ import org .springframework .test .context .ActiveProfiles ;
1517import org .springframework .transaction .annotation .Propagation ;
1618import org .springframework .transaction .annotation .Transactional ;
1719
2527import static grep .neogulcoder .domain .study .enums .StudyMemberRole .MEMBER ;
2628import static org .assertj .core .api .Assertions .assertThat ;
2729
30+ @ ActiveProfiles ("test" )
31+ @ SpringBootTest
2832class StudyManagementServiceTest extends IntegrationTestSupport {
2933
3034 @ Autowired
@@ -45,10 +49,6 @@ class StudyManagementServiceTest extends IntegrationTestSupport {
4549 @ Autowired
4650 private StudyManagementServiceFacade studyManagementServiceFacade ;
4751
48- private Long userId1 ;
49- private Long userId2 ;
50- private Long userId3 ;
51- private Study study ;
5252 private Long studyId ;
5353
5454 @ BeforeEach
@@ -57,39 +57,41 @@ void init() {
5757 User user2 = createUser ("test2" );
5858 User user3 = createUser ("test3" );
5959 userRepository .saveAll (List .of (user1 , user2 , user3 ));
60- userId1 = user1 .getId ();
61- userId2 = user2 .getId ();
62- userId3 = user3 .getId ();
6360
64- study = createStudy ("스터디" , LocalDateTime .parse ("2025-09-05T20:20:20" ), LocalDateTime .parse ("2025-09-28T20:20:20" ));
61+ Study study = createStudy ("스터디" , LocalDateTime .parse ("2025-09-05T20:20:20" ), LocalDateTime .parse ("2025-09-28T20:20:20" ));
6562 studyRepository .save (study );
6663 studyId = study .getId ();
6764
68- StudyMember studyLeader = createStudyLeader (study , userId1 );
69- StudyMember studyMember1 = createStudyMember (study , userId2 );
65+ StudyMember member1 = createStudyLeader (study , user1 . getId () );
66+ StudyMember member2 = createStudyMember (study , user2 . getId () );
7067 study .increaseMemberCount ();
71- StudyMember studyMember2 = createStudyMember (study , userId3 );
68+ StudyMember member3 = createStudyMember (study , user3 . getId () );
7269 study .increaseMemberCount ();
7370
74- studyMemberRepository .saveAll (List .of (studyLeader , studyMember1 , studyMember2 ));
7571 studyRepository .save (study );
76-
77- em .clear ();
72+ studyMemberRepository .saveAll (List .of (member1 , member2 , member3 ));
7873 }
7974
8075 @ DisplayName ("2명의 멤버가 스터디를 동시에 탈퇴합니다." )
8176 @ Transactional (propagation = Propagation .NOT_SUPPORTED )
8277 @ Test
8378 void leaveStudy () throws InterruptedException {
8479 // given
85- final int threads = 2 ;
80+ Study study = studyRepository .findById (studyId )
81+ .orElseThrow ();
82+ System .out .println (study .getCurrentCount ());
83+
84+ int threads = 2 ;
8685 ExecutorService executorService = Executors .newFixedThreadPool (threads );
8786 CountDownLatch countDownLatch = new CountDownLatch (threads );
8887
89- List <Long > targetUserIds = List .of (userId2 , userId3 );
88+ List <Long > memberIds = studyMemberRepository .findFetchStudyByStudyId (studyId )
89+ .stream ().filter (studyMember -> studyMember .getRole ().equals (MEMBER ))
90+ .map (StudyMember ::getUserId )
91+ .toList ();
9092
9193 // when
92- for (Long targetUserId : targetUserIds ) {
94+ for (Long targetUserId : memberIds ) {
9395 executorService .submit (() -> {
9496 try {
9597 studyManagementServiceFacade .leaveStudyWithRetry (studyId , targetUserId );
@@ -105,6 +107,8 @@ void leaveStudy() throws InterruptedException {
105107
106108 //then
107109 Study findStudy = studyRepository .findById (studyId ).orElseThrow ();
110+ System .out .println (findStudy .getCurrentCount ());
111+ System .out .println ("leaveStudyWithRetry 실행 (studyId={}, userId={})" );
108112 assertThat (findStudy .getCurrentCount ()).isEqualTo (1 );
109113 }
110114
0 commit comments