@@ -131,39 +131,52 @@ void updateBadWordStatus_activate_success() {
131131 .build ();
132132 UpdateBadWordStatusRequest request = new UpdateBadWordStatusRequest (true );
133133
134+ // badWordRepository.findById() 호출에 대해 badWord 반환
134135 when (badWordRepository .findById (1L )).thenReturn (Optional .of (badWord ));
136+ // badWordRepository.save() 호출 시 입력된 객체에 ID를 설정하여 반환하도록 스텁 설정
137+ when (badWordRepository .save (any (BadWord .class ))).thenAnswer (invocation -> {
138+ BadWord updated = invocation .getArgument (0 );
139+ // 예시로 ID를 1L로 설정
140+ ReflectionTestUtils .setField (updated , "id" , 1L );
141+ return updated ;
142+ });
143+
135144 // when
136145 badWordService .updateBadWordStatus (1L , request );
137146
138147 // then
139148 assertTrue (badWord .isUsed ());
140- // 서비스 코드에서 hashOperations.put 호출하므로 해당 호출 검증
149+ // hashOperations.put 호출 검증 (활성화 상태이므로 Redis에 업데이트)
141150 verify (hashOperations ).put ("bad_word" , "1" , "비속어" );
142151 }
143152
144-
145153 @ Test
146154 @ DisplayName ("금칙어 상태 업데이트 - 비활성화 성공" )
147155 void updateBadWordStatus_deactivate_success () {
148156 // given
149157 BadWord badWord = BadWord .builder ()
150- .id (1L ) // ID를 직접 할당
158+ .id (1L ) // ID 직접 할당
151159 .word ("비속어" )
152160 .isUsed (true )
153161 .build ();
154162
155163 UpdateBadWordStatusRequest request = new UpdateBadWordStatusRequest (false );
156164
157- // Mock 동작 설정
165+ // findById는 기존 badWord를 반환하도록 설정
158166 when (badWordRepository .findById (1L )).thenReturn (Optional .of (badWord ));
159- // when
167+ // save() 호출 시 업데이트된 객체를 반환하도록 스텁 설정 (이 경우 ID는 그대로 1L)
168+ when (badWordRepository .save (any (BadWord .class ))).thenAnswer (invocation -> invocation .getArgument (0 ));
169+
170+ // when: 상태 업데이트 메서드 호출 (비활성화)
160171 badWordService .updateBadWordStatus (1L , request );
161172
162173 // then
163- assertFalse (badWord .isUsed ()); // 상태 업데이트 확인
174+ // 상태가 false로 변경되었는지 검증
175+ assertFalse (badWord .isUsed ());
176+ // Redis 캐시에서 해당 금칙어 삭제가 호출되었는지 검증
164177 verify (hashOperations ).delete ("bad_word" , "1" , "비속어" );
165178 }
166- //
179+
167180 @ Test
168181 @ DisplayName ("금칙어가 포함되어 있지 않을 때 정상 통과" )
169182 void validateText_noBadWord_success () {
@@ -286,7 +299,6 @@ void deleteBadWord_success() {
286299 // given
287300 Long badWordId = 1L ;
288301 BadWord badWord = new BadWord ();
289- // 필요한 경우 badWord에 속성을 추가할 수 있습니다.
290302 when (badWordRepository .findById (badWordId )).thenReturn (Optional .of (badWord ));
291303
292304 // when
@@ -311,15 +323,13 @@ void deleteBadWord_notFound() {
311323 @ Test
312324 @ DisplayName ("금칙어가 포함된 경우 - 예외 발생" )
313325 void testValidateTextWithBadWord () {
314- // 테스트용 텍스트: 금칙어가 독립된 단어로 존재하도록 공백을 둡니다.
315326 String targetStr = "이 문장에는 금칙어0 가 포함되어 있습니다." ;
316327 System .out .println ("targetStr: " + targetStr );
317328
318329 // 해당 테스트에서 사용할 모의 금칙어 데이터: 오직 "금칙어0"만 포함
319330 Map <Object , Object > testBadWords = new HashMap <>();
320331 testBadWords .put ("1" , "금칙어0" );
321332
322- // 테스트 케이스 내에서 모의 데이터를 재설정(오버라이드)합니다.
323333 when (hashOperations .entries (BAD_WORD_KEY )).thenReturn (testBadWords );
324334 assertThrows (BadWordContainsException .class , () -> {
325335 badWordService .validateText (targetStr );
0 commit comments