1212import org .springframework .mock .web .MockMultipartFile ;
1313import org .springframework .web .multipart .MultipartFile ;
1414
15- import java .io .IOException ;
1615import java .util .List ;
1716
1817import static org .junit .jupiter .api .Assertions .*;
@@ -25,7 +24,6 @@ class RegisterMemberCSVServiceTest {
2524 private CommandMemberPort commandMemberPort ;
2625 private CsvParseService csvParseService ;
2726
28-
2927 @ BeforeEach
3028 void setup () {
3129 memberService = Mockito .mock (MemberService .class );
@@ -35,30 +33,30 @@ void setup() {
3533 }
3634
3735 /**
38- * 정상적인 회원 등록 테스트
39- * - 주어진 CSV 파일을 정상적으로 파싱하여 회원이 등록되는지 검증
36+ * ✅ 정상적인 회원 등록 테스트
4037 */
4138 @ Test
4239 @ DisplayName ("CSV 파일에서 회원 정보를 성공적으로 파싱하고 등록하는지 검증한다." )
4340 void testRegisterMembersFromCsvSuccess () {
4441 Long adminId = 1L ;
45- MultipartFile file = new MockMultipartFile ("file" , "members.csv" , "text/csv" , "dummy-content " .getBytes ());
42+ MultipartFile file = new MockMultipartFile ("file" , "members.csv" , "text/csv" , "name,nickname,departmentId,departmentRole,email,role,isReviewer \n John,JohnDoe,1,Manager,john.doe@example.com,ROLE_USER,TRUE " .getBytes ());
4643
4744 Member admin = Mockito .mock (Member .class );
48- List <Member > parsedMembers = List .of (Mockito .mock (Member .class ), Mockito .mock (Member .class ));
45+ Member member1 = Mockito .mock (Member .class );
46+ Member member2 = Mockito .mock (Member .class );
47+ List <Member > parsedMembers = List .of (member1 , member2 );
4948
5049 when (memberService .findActiveMember (adminId )).thenReturn (admin );
5150 when (csvParseService .parseDataAndMapToMember (file )).thenReturn (parsedMembers );
5251
5352 int addedCount = registerMemberCSVService .registerMembersFromCsv (adminId , file );
5453
55- assertEquals (2 , addedCount );
56- verify (commandMemberPort ).saveAll (parsedMembers );
57- verify (parsedMembers . get ( 0 )) .register (admin );
58- verify (parsedMembers . get ( 1 )) .register (admin );
54+ assertEquals (2 , addedCount ); // 2명이 성공적으로 등록됨
55+ verify (commandMemberPort ).saveAll (parsedMembers ); // 모든 회원 저장
56+ verify (member1 ) .register (admin ); // 관리자와 연결
57+ verify (member2 ) .register (admin ); // 관리자와 연결
5958 }
6059
61-
6260 /**
6361 * ❌ 관리자 찾기 실패 (MEMBER_NOT_FOUND)
6462 */
@@ -74,9 +72,8 @@ void testRegisterMembersFromCsvThrowsWhenAdminNotFound() {
7472 registerMemberCSVService .registerMembersFromCsv (adminId , file );
7573 });
7674
77- // 검증: 발생한 예외가 `MEMBER_NOT_FOUND`인지 확인
7875 assertEquals (MemberErrorCode .MEMBER_NOT_FOUND .getCustomCode (), exception .getCode ().getCustomCode ());
79- verifyNoInteractions (commandMemberPort ); // 회원 저장 로직이 실행안됨
76+ verifyNoInteractions (commandMemberPort ); // 저장 로직 실행 안됨
8077 }
8178
8279 /**
@@ -88,45 +85,39 @@ void testRegisterMembersFromCsvThrowsWhenCsvParsingFails() {
8885 Long adminId = 1L ;
8986 MultipartFile file = new MockMultipartFile ("file" , "members.csv" , "text/csv" , "dummy-content" .getBytes ());
9087
91- // ✅ Mock 객체 설정: CSV 파싱 과정에서 예외 발생하도록 설정
9288 when (csvParseService .parseDataAndMapToMember (file )).thenThrow (new ApplicationException (MemberErrorCode .CSV_PARSING_ERROR ));
9389
94- // 🔹 유스케이스 실행 및 예외 검증
9590 ApplicationException exception = assertThrows (ApplicationException .class , () -> {
9691 registerMemberCSVService .registerMembersFromCsv (adminId , file );
9792 });
9893
99- // ✅ 검증: 발생한 예외가 `CSV_PARSING_ERROR`인지 확인
10094 assertEquals (MemberErrorCode .CSV_PARSING_ERROR .getCustomCode (), exception .getCode ().getCustomCode ());
101- verifyNoInteractions (commandMemberPort ); // ❗ 회원 저장 로직이 실행되지 않아야 함
95+ verifyNoInteractions (commandMemberPort ); // 저장 로직 실행 안됨
10296 }
10397
10498 /**
10599 * ❌ 회원 등록 실패 (MEMBER_REGISTRATION_FAILED)
106- *
107100 */
108- // @Test
109- // @DisplayName("회원 등록 과정 중 실패 시 예외 발생 및 부분 저장 된다.")
110- // void testRegisterMembersFromCsvThrowsWhenSavingMemberFails() {
111- // Long adminId = 1L;
112- // MultipartFile file = new MockMultipartFile("file", "members.csv", "text/csv", "dummy-content".getBytes());
113- //
114- // Member admin = Mockito.mock(Member.class);
115- // Member failingMember = Mockito.mock(Member.class);
116- // List<Member> parsedMembers = List.of(failingMember, Mockito.mock(Member.class));
117- //
118- // // 특정 회원 등록 중 예외 발생
119- // when(memberService.findActiveMember(adminId)).thenReturn(admin);
120- // when(csvParseService.parseDataAndMapToMember(file)).thenReturn(parsedMembers);
121- // doThrow(new ApplicationException(MemberErrorCode.MEMBER_REGISTRATION_FAILED))
122- // .when(commandMemberPort).save(failingMember);
123- //
124- // // Usecase 실행
125- // ApplicationException exception = assertThrows(ApplicationException.class, () -> {
126- // registerMemberCSVService.registerMembersFromCsv(adminId, file);
127- // });
128- //
129- // assertEquals(MemberErrorCode.MEMBER_REGISTRATION_FAILED.getCustomCode(), exception.getCode().getCustomCode());
130- // verify(commandMemberPort, times(1)).save(failingMember); // ❗ 실패한 회원만 저장 시도해야 함
131- // }
101+ @ Test
102+ @ DisplayName ("회원 등록 과정 중 실패 시 예외 발생 및 회원 저장이 중단된다." )
103+ void testRegisterMembersFromCsvThrowsWhenSavingMemberFails () {
104+ Long adminId = 1L ;
105+ MultipartFile file = new MockMultipartFile ("file" , "members.csv" , "text/csv" , "dummy-content" .getBytes ());
106+
107+ Member admin = Mockito .mock (Member .class );
108+ Member failingMember = Mockito .mock (Member .class );
109+ List <Member > parsedMembers = List .of (failingMember );
110+
111+ when (memberService .findActiveMember (adminId )).thenReturn (admin );
112+ when (csvParseService .parseDataAndMapToMember (file )).thenReturn (parsedMembers );
113+ doThrow (new ApplicationException (MemberErrorCode .MEMBER_REGISTRATION_FAILED ))
114+ .when (commandMemberPort ).saveAll (parsedMembers );
115+
116+ ApplicationException exception = assertThrows (ApplicationException .class , () -> {
117+ registerMemberCSVService .registerMembersFromCsv (adminId , file );
118+ });
119+
120+ assertEquals (MemberErrorCode .MEMBER_REGISTRATION_FAILED .getCustomCode (), exception .getCode ().getCustomCode ());
121+ verify (commandMemberPort ).saveAll (parsedMembers );
122+ }
132123}
0 commit comments