11package com .clubber .ClubberServer .integration .domain .admin .service ;
22
33import com .clubber .ClubberServer .domain .admin .domain .Admin ;
4- import com .clubber .ClubberServer .domain .admin .domain . Contact ;
5- import com .clubber .ClubberServer .domain .admin .domain . PendingAdminInfo ;
6- import com .clubber .ClubberServer .domain .admin .dto .* ;
4+ import com .clubber .ClubberServer .domain .admin .dto . GetAdminUsernameCheckDuplicateResponse ;
5+ import com .clubber .ClubberServer .domain .admin .dto . GetAdminsProfileResponse ;
6+ import com .clubber .ClubberServer .domain .admin .dto .UpdateAdminsPasswordRequest ;
77import com .clubber .ClubberServer .domain .admin .exception .AdminEqualsPreviousPasswordExcpetion ;
88import com .clubber .ClubberServer .domain .admin .exception .AdminInvalidCurrentPasswordException ;
9- import com .clubber .ClubberServer .domain .admin .exception .AdminLoginFailedException ;
109import com .clubber .ClubberServer .domain .admin .repository .AdminRepository ;
1110import com .clubber .ClubberServer .domain .admin .repository .PendingAdminInfoRepository ;
1211import com .clubber .ClubberServer .domain .admin .service .AdminAccountService ;
12+ import com .clubber .ClubberServer .domain .admin .service .AdminReadService ;
1313import com .clubber .ClubberServer .domain .favorite .domain .Favorite ;
1414import com .clubber .ClubberServer .domain .favorite .repository .FavoriteRepository ;
1515import com .clubber .ClubberServer .domain .recruit .domain .Recruit ;
1818import com .clubber .ClubberServer .domain .review .domain .Review ;
1919import com .clubber .ClubberServer .domain .review .repository .ReviewRepository ;
2020import com .clubber .ClubberServer .domain .user .domain .AccountState ;
21+ import com .clubber .ClubberServer .global .config .security .AuthDetails ;
2122import com .clubber .ClubberServer .global .config .security .SecurityUtils ;
22- import com .clubber .ClubberServer .integration .util .ServiceTest ;
2323import com .clubber .ClubberServer .integration .util .WithMockCustomUser ;
2424import com .clubber .ClubberServer .integration .util .fixture .AdminFixture ;
25- import org .junit .jupiter .api .Assertions ;
2625import org .junit .jupiter .api .DisplayName ;
2726import org .junit .jupiter .api .Test ;
2827import org .springframework .beans .factory .annotation .Autowired ;
28+ import org .springframework .boot .test .context .SpringBootTest ;
29+ import org .springframework .security .authentication .UsernamePasswordAuthenticationToken ;
30+ import org .springframework .security .core .context .SecurityContext ;
31+ import org .springframework .security .core .context .SecurityContextHolder ;
2932import org .springframework .security .crypto .password .PasswordEncoder ;
33+ import org .springframework .test .context .ActiveProfiles ;
34+ import org .springframework .transaction .annotation .Transactional ;
3035
3136import java .util .List ;
32- import java .util .Optional ;
3337
34- import static com .clubber .ClubberServer .domain .club .domain .ClubType .GENERAL ;
35- import static com .clubber .ClubberServer .domain .user .domain .AccountState .ACTIVE ;
36- import static com .clubber .ClubberServer .integration .util .fixture .AdminFixture .VALID_UPDATE_PASSWORD_REQUEST ;
37- import static org .assertj .core .api .Assertions .*;
3838import static org .assertj .core .api .Assertions .assertThat ;
39+ import static org .assertj .core .api .Assertions .assertThatThrownBy ;
3940import static org .junit .jupiter .api .Assertions .assertAll ;
4041
41- public class AdminAccountServiceTest extends ServiceTest {
42+ @ SpringBootTest (webEnvironment = SpringBootTest .WebEnvironment .RANDOM_PORT )
43+ @ Transactional
44+ @ ActiveProfiles ("test" )
45+ public class AdminAccountServiceTest {
4246
4347 @ Autowired
4448 private AdminAccountService adminAccountService ;
@@ -61,78 +65,109 @@ public class AdminAccountServiceTest extends ServiceTest {
6165 @ Autowired
6266 private PendingAdminInfoRepository pendingAdminInfoRepository ;
6367
68+ @ Autowired
69+ private AdminReadService adminReadService ;
70+
71+ private void createSecurityContext (Admin admin ) {
72+ SecurityContext context = SecurityContextHolder .createEmptyContext ();
73+
74+ AuthDetails adminDetails = new AuthDetails (admin .getId ().toString (), "ADMIN" );
75+ UsernamePasswordAuthenticationToken adminToken = new UsernamePasswordAuthenticationToken (
76+ adminDetails , "user" , adminDetails .getAuthorities ());
77+ context .setAuthentication (adminToken );
78+ SecurityContextHolder .setContext (context );
79+ }
6480
65- @ DisplayName ("관리자 회원 정보를 조회한다." )
66- @ WithMockCustomUser
6781 @ Test
68- void adminGetProfile () {
69- GetAdminsProfileResponse adminsProfile = adminAccountService .getAdminsProfile ();
82+ void 관리자_회원_정보_조회 () {
83+ //given
84+ Admin admin = AdminFixture .aAdmin ().build ();
85+ createSecurityContext (adminRepository .save (admin ));
7086
71- Optional < Admin > admin = adminRepository . findAdminByIdAndAccountState (
72- SecurityUtils . getCurrentUserId (), ACTIVE );
87+ //when
88+ GetAdminsProfileResponse response = adminAccountService . getAdminsProfile ( );
7389
90+ //then
7491 assertAll (
75- () -> assertThat (admin .get ().getId ()).isNotNull ()
76- // () -> assertThat(adminsProfile.getClubName()).isEqualTo(admin.get().getClub().getName())
92+ () -> assertThat (response .username ()).isEqualTo (admin .getUsername ()),
93+ () -> assertThat (response .email ()).isEqualTo (admin .getEmail ()),
94+ () -> assertThat (response .contact ().getInstagram ()).isEqualTo (admin .getContact ().getInstagram ()),
95+ () -> assertThat (response .contact ().getEtc ()).isEqualTo (admin .getContact ().getEtc ())
7796 );
7897 }
7998
80- @ DisplayName ("관리자 비밀번호 변경을 수행한다." )
81- @ WithMockCustomUser
8299 @ Test
83- void adminUpdatePassword () {
84- UpdateAdminsPasswordResponse updateAdminsPasswordResponse = adminAccountService .updateAdminsPassword (
85- VALID_UPDATE_PASSWORD_REQUEST );
100+ void 관리자_비밀번호_변경 () {
101+ //given
102+ final String oldPassword = "oldPassword" ;
103+ final String newPassword = "newPassword" ;
86104
87- Optional <Admin > updatedPasswordAdmin = adminRepository .findAdminByIdAndAccountState (
88- updateAdminsPasswordResponse .getAdminId (), ACTIVE );
105+ Admin admin = AdminFixture .aAdmin ()
106+ .password (encoder .encode (oldPassword ))
107+ .build ();
108+ createSecurityContext (adminRepository .save (admin ));
89109
90- assertAll (
91- () -> assertThat (updatedPasswordAdmin ).isNotNull (),
92- () -> assertThat (encoder .matches (VALID_UPDATE_PASSWORD_REQUEST .getNewPassword (),
93- updatedPasswordAdmin .get ().getPassword ()))
94- );
110+ UpdateAdminsPasswordRequest request = AdminFixture .a_마이페이지_비밀번호_변경_요청 ().sample ();
111+
112+ //when
113+ adminAccountService .updateAdminsPassword (request );
114+ Admin currentAdmin = adminReadService .getCurrentAdmin ();
115+
116+ //then
117+ assertThat (encoder .matches (newPassword , currentAdmin .getPassword ())).isEqualTo (true );
95118 }
96119
97120 @ Test
98- @ WithMockCustomUser
99- @ DisplayName ("변경하려는 비밀번호가 기존 비빌번호와 같을 시 예외가 발생한다." )
100- public void updateAdminWithSameWithPreviousPasswordTest () {
121+ public void 관리자_비밀번호_변경_기존_비밀번호_동일_에러 () {
101122 //given
102- String oldpassword = "비밀번호 1" ;
103- String newPassword = "비밀번호 1" ;
104- UpdateAdminsPasswordRequest request = AdminFixture .관리자_비밀번호_변경_요청 (oldpassword , newPassword );
123+ final String oldPassword = "oldPassword" ;
124+ Admin admin = AdminFixture .aAdmin ()
125+ .password (encoder .encode (oldPassword ))
126+ .build ();
127+ createSecurityContext (adminRepository .save (admin ));
128+
129+ UpdateAdminsPasswordRequest request = AdminFixture .a_마이페이지_비밀번호_변경_요청 ()
130+ .set ("newPassword" , oldPassword )
131+ .sample ();
105132
106133 //when & Then
107134 assertThatThrownBy (() -> adminAccountService .updateAdminsPassword (request ))
108135 .isInstanceOf (AdminEqualsPreviousPasswordExcpetion .class );
109136 }
110137
111138 @ Test
112- @ WithMockCustomUser
113- @ DisplayName ("기존 비밀번호가 잘못되었을 경우 비빌번호 변경시 예외가 발생한다." )
114- public void updateAdminWithInvalidOldPassword () {
139+ public void 비밀번호_변경_잘못된_기존_비밀번호_오류 () {
115140 //given
116- String invalidOldPassword = "invalidOldPassword" ;
117- String newPassword = "newPassword" ;
118- UpdateAdminsPasswordRequest request = AdminFixture .관리자_비밀번호_변경_요청 (invalidOldPassword , newPassword );
141+ String validPassword = "password" ;
142+ String invalidPassword = "invalidPassword" ;
143+
144+ Admin admin = AdminFixture .aAdmin ()
145+ .password (encoder .encode (validPassword ))
146+ .build ();
147+ createSecurityContext (adminRepository .save (admin ));
148+
149+ UpdateAdminsPasswordRequest request = AdminFixture .a_마이페이지_비밀번호_변경_요청 ()
150+ .set ("oldPassword" , invalidPassword )
151+ .sample ();
119152
120153 //when & Then
121154 assertThatThrownBy (() -> adminAccountService .updateAdminsPassword (request ))
122155 .isInstanceOf (AdminInvalidCurrentPasswordException .class );
123156 }
124157
125- @ DisplayName ("관리자 회원탈퇴를 수행한다" )
126- @ WithMockCustomUser
127158 @ Test
128- void withDrawAdmin () {
159+ void 관리자_회원탈퇴후_상태_비활성화 () {
160+ //given
161+ Admin admin = AdminFixture .aAdmin ().build ();
162+ Admin saved = adminRepository .save (admin );
163+ createSecurityContext (saved );
164+
165+ //when
129166 adminAccountService .withDraw ();
130- Optional <Admin > admin = adminRepository .findById (SecurityUtils .getCurrentUserId ());
131167
132- assertAll (
133- () -> assertThat (admin ).isNotNull (),
134- () -> assertThat (admin .get ().getAccountState ()).isEqualTo (AccountState .INACTIVE )
135- );
168+ //then
169+ Admin adminAfterWithdraw = adminRepository .findById (saved .getId ()).get ();
170+ assertThat (adminAfterWithdraw .getAccountState ()).isEqualTo (AccountState .INACTIVE );
136171 }
137172
138173 /**
@@ -180,59 +215,67 @@ void withDrawAdminDeleteRecruit() {
180215 }
181216 }
182217
183- @ DisplayName ("관리자 회원 가입 요청시 초기 미승인 상태로 저장된다." )
184- @ Test
185- void createAdminSignUpTest () {
186- /**
187- * TODO 추후 WireMock 활용하여 외부 API Reponse 테스트 코드 작성
188- */
218+ // @DisplayName("관리자 회원 가입 요청시 초기 미승인 상태로 저장된다.")
219+ // @Test
220+ // void createAdminSignUpTest() {
221+ // /**
222+ // * TODO 추후 WireMock 활용하여 외부 API Reponse 테스트 코드 작성
223+ // */
224+ //
225+ // //given
226+ // CreateAdminSignUpRequest createAdminSignUpRequest = AdminFixture.회원가입_요청("username",
227+ // "password", GENERAL, "new_club",
228+ // "email", "@club_ig", "imageUrl");
229+ //
230+ // //when
231+ // adminAccountService.createAdminSignUp(createAdminSignUpRequest);
232+ // PendingAdminInfo pendingAdminInfo = pendingAdminInfoRepository.findByClubName(
233+ // createAdminSignUpRequest.getClubName()).get();
234+ //
235+ // //then
236+ // assertAll(
237+ // () -> assertThat(pendingAdminInfo)
238+ // .extracting("username", "email", "clubName", "contact", "imageForApproval")
239+ // .containsExactly(
240+ // createAdminSignUpRequest.getUsername(),
241+ // createAdminSignUpRequest.getEmail(),
242+ // createAdminSignUpRequest.getClubName(),
243+ // createAdminSignUpRequest.getContact(),
244+ // createAdminSignUpRequest.getImageForApproval()
245+ // ),
246+ // () -> assertThat(pendingAdminInfo.isApproved()).isFalse()
247+ // );
248+ // }
189249
190- //given
191- CreateAdminSignUpRequest createAdminSignUpRequest = AdminFixture .회원가입_요청 ("username" ,
192- "password" , GENERAL , "new_club" ,
193- "email" , "@club_ig" , "imageUrl" );
194-
195- //when
196- adminAccountService .createAdminSignUp (createAdminSignUpRequest );
197- PendingAdminInfo pendingAdminInfo = pendingAdminInfoRepository .findByClubName (
198- createAdminSignUpRequest .getClubName ()).get ();
199-
200- //then
201- assertAll (
202- () -> assertThat (pendingAdminInfo )
203- .extracting ("username" , "email" , "clubName" , "contact" , "imageForApproval" )
204- .containsExactly (
205- createAdminSignUpRequest .getUsername (),
206- createAdminSignUpRequest .getEmail (),
207- createAdminSignUpRequest .getClubName (),
208- createAdminSignUpRequest .getContact (),
209- createAdminSignUpRequest .getImageForApproval ()
210- ),
211- () -> assertThat (pendingAdminInfo .isApproved ()).isFalse ()
212- );
213- }
214-
215- @ DisplayName ("기존에 없는 동아리 관리자 아이디 중복 확인시 true 반환" )
216250 @ Test
217- void getAdminNewUsernameCheckDuplicate () {
251+ void 기존에_존재하지_않는_동아리_관리자_아이디_중복확인 () {
218252 //given
219- String username = "new username" ;
253+ final String existUsername = "clubber123" ;
254+ final String nonExistUsername = "newclubber123" ;
255+
256+ Admin admin = AdminFixture .aAdmin ()
257+ .username (existUsername )
258+ .build ();
259+ adminRepository .save (admin );
220260
221261 //when
222- GetAdminUsernameCheckDuplicateResponse response = adminAccountService .getAdminUsernameCheckDuplicate (username );
262+ GetAdminUsernameCheckDuplicateResponse response = adminAccountService .getAdminUsernameCheckDuplicate (nonExistUsername );
223263
224264 //then
225265 assertThat (response .isAvailable ()).isEqualTo (true );
226266 }
227267
228- @ DisplayName ("기존에 없는 동아리 관리자 아이디 중복 확인시 true 반환" )
229268 @ Test
230- void getAdminExistUsernameCheckDuplicate () {
269+ void 기존에_존재하는_동아리_관리자_아이디_중복확인 () {
231270 //given
232- String username = "동아리 1" ;
271+ final String existUsername = "clubber123" ;
272+ Admin admin = AdminFixture .aAdmin ()
273+ .username (existUsername )
274+ .build ();
275+ adminRepository .save (admin );
233276
234277 //when
235- GetAdminUsernameCheckDuplicateResponse response = adminAccountService .getAdminUsernameCheckDuplicate (username );
278+ GetAdminUsernameCheckDuplicateResponse response = adminAccountService .getAdminUsernameCheckDuplicate (existUsername );
236279
237280 //then
238281 assertThat (response .isAvailable ()).isEqualTo (false );
0 commit comments