Skip to content

Commit 970b118

Browse files
authored
Merge pull request Clubber2024#766 from Clubber2024/test/Clubber2024#727-refactor-테스트-코드-given-fixutre-셋업-개선
test : 테스트 코드 given fixutre 셋업 개선
2 parents f416702 + e0b86bf commit 970b118

15 files changed

Lines changed: 649 additions & 368 deletions

File tree

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ dependencies {
7171

7272
//java mail sender
7373
implementation 'org.springframework.boot:spring-boot-starter-mail'
74+
75+
//fixture monkey
76+
testImplementation("com.navercorp.fixturemonkey:fixture-monkey-starter:1.1.10")
7477
}
7578

7679
tasks.named('test') {

src/main/java/com/clubber/ClubberServer/domain/admin/domain/Contact.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,15 @@
22

33
import jakarta.persistence.Column;
44
import jakarta.persistence.Embeddable;
5+
import lombok.AccessLevel;
6+
import lombok.AllArgsConstructor;
57
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
69

710
@Getter
811
@Embeddable
12+
@AllArgsConstructor
13+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
914
public class Contact {
1015
@Column(name = "contact_instagram")
1116
private String instagram;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.clubber.ClubberServer.domain.club.repository;
2+
3+
import com.clubber.ClubberServer.domain.club.domain.ClubInfo;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface ClubInfoRepository extends JpaRepository<ClubInfo, Long> {
7+
}

src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAccountServiceTest.java

Lines changed: 134 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package com.clubber.ClubberServer.integration.domain.admin.service;
22

33
import 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;
77
import com.clubber.ClubberServer.domain.admin.exception.AdminEqualsPreviousPasswordExcpetion;
88
import com.clubber.ClubberServer.domain.admin.exception.AdminInvalidCurrentPasswordException;
9-
import com.clubber.ClubberServer.domain.admin.exception.AdminLoginFailedException;
109
import com.clubber.ClubberServer.domain.admin.repository.AdminRepository;
1110
import com.clubber.ClubberServer.domain.admin.repository.PendingAdminInfoRepository;
1211
import com.clubber.ClubberServer.domain.admin.service.AdminAccountService;
12+
import com.clubber.ClubberServer.domain.admin.service.AdminReadService;
1313
import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
1414
import com.clubber.ClubberServer.domain.favorite.repository.FavoriteRepository;
1515
import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
@@ -18,27 +18,31 @@
1818
import com.clubber.ClubberServer.domain.review.domain.Review;
1919
import com.clubber.ClubberServer.domain.review.repository.ReviewRepository;
2020
import com.clubber.ClubberServer.domain.user.domain.AccountState;
21+
import com.clubber.ClubberServer.global.config.security.AuthDetails;
2122
import com.clubber.ClubberServer.global.config.security.SecurityUtils;
22-
import com.clubber.ClubberServer.integration.util.ServiceTest;
2323
import com.clubber.ClubberServer.integration.util.WithMockCustomUser;
2424
import com.clubber.ClubberServer.integration.util.fixture.AdminFixture;
25-
import org.junit.jupiter.api.Assertions;
2625
import org.junit.jupiter.api.DisplayName;
2726
import org.junit.jupiter.api.Test;
2827
import 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;
2932
import org.springframework.security.crypto.password.PasswordEncoder;
33+
import org.springframework.test.context.ActiveProfiles;
34+
import org.springframework.transaction.annotation.Transactional;
3035

3136
import 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.*;
3838
import static org.assertj.core.api.Assertions.assertThat;
39+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
3940
import 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

Comments
 (0)