Skip to content

Commit 955f4f4

Browse files
committed
Test: 서비스 테스트 작성 및 개선
1 parent a79c9f9 commit 955f4f4

File tree

4 files changed

+158
-2
lines changed

4 files changed

+158
-2
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.back.domain.user.repository;
2+
3+
import com.back.domain.user.entity.UserProfile;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface UserProfileRepository extends JpaRepository<UserProfile, Long> {
9+
boolean existsByNickname(String nickname);
10+
}

src/main/java/com/back/domain/user/repository/UserRepository.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,4 @@
88
public interface UserRepository extends JpaRepository<User, Long> {
99
boolean existsByUsername(String username);
1010
boolean existsByEmail(String email);
11-
boolean existsByNickname(String nickname);
1211
}

src/main/java/com/back/domain/user/service/UserService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.back.domain.user.dto.UserResponse;
55
import com.back.domain.user.entity.User;
66
import com.back.domain.user.entity.UserProfile;
7+
import com.back.domain.user.repository.UserProfileRepository;
78
import com.back.domain.user.repository.UserRepository;
89
import com.back.global.exception.CustomException;
910
import com.back.global.exception.ErrorCode;
@@ -17,6 +18,7 @@
1718
@Transactional
1819
public class UserService {
1920
private final UserRepository userRepository;
21+
private final UserProfileRepository userProfileRepository;
2022
private final PasswordEncoder passwordEncoder;
2123

2224
/**
@@ -72,7 +74,7 @@ private void validateDuplicate(UserRegisterRequest request) {
7274
if (userRepository.existsByEmail(request.email())) {
7375
throw new CustomException(ErrorCode.EMAIL_DUPLICATED);
7476
}
75-
if (userRepository.existsByNickname(request.nickname())) {
77+
if (userProfileRepository.existsByNickname(request.nickname())) {
7678
throw new CustomException(ErrorCode.NICKNAME_DUPLICATED);
7779
}
7880
}
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
package com.back.domain.user.service;
2+
3+
import com.back.domain.user.dto.UserRegisterRequest;
4+
import com.back.domain.user.dto.UserResponse;
5+
import com.back.domain.user.entity.UserStatus;
6+
import com.back.domain.user.repository.UserProfileRepository;
7+
import com.back.domain.user.repository.UserRepository;
8+
import com.back.global.exception.CustomException;
9+
import com.back.global.exception.ErrorCode;
10+
import org.junit.jupiter.api.DisplayName;
11+
import org.junit.jupiter.api.Test;
12+
import org.springframework.beans.factory.annotation.Autowired;
13+
import org.springframework.boot.test.context.SpringBootTest;
14+
import org.springframework.security.crypto.password.PasswordEncoder;
15+
import org.springframework.test.context.ActiveProfiles;
16+
import org.springframework.transaction.annotation.Transactional;
17+
18+
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
20+
21+
@SpringBootTest
22+
@Transactional
23+
@ActiveProfiles("test")
24+
class UserServiceTest {
25+
26+
@Autowired
27+
private UserService userService;
28+
29+
@Autowired
30+
private UserRepository userRepository;
31+
32+
@Autowired
33+
private UserProfileRepository userProfileRepository;
34+
35+
@Autowired
36+
private PasswordEncoder passwordEncoder;
37+
38+
@Test
39+
@DisplayName("정상 회원가입 성공")
40+
void register_success() {
41+
// given
42+
UserRegisterRequest request = new UserRegisterRequest(
43+
"testuser", "[email protected]", "P@ssw0rd!", "홍길동"
44+
);
45+
46+
// when
47+
UserResponse response = userService.register(request);
48+
49+
// then
50+
assertThat(response.username()).isEqualTo("testuser");
51+
assertThat(response.email()).isEqualTo("[email protected]");
52+
assertThat(response.nickname()).isEqualTo("홍길동");
53+
assertThat(response.status()).isEqualTo(UserStatus.PENDING);
54+
55+
// 비밀번호 인코딩 검증
56+
String encoded = userRepository.findById(response.userId()).get().getPassword();
57+
assertThat(passwordEncoder.matches("P@ssw0rd!", encoded)).isTrue();
58+
59+
// UserProfile도 함께 저장됐는지 검증
60+
assertThat(userProfileRepository.existsByNickname("홍길동")).isTrue();
61+
}
62+
63+
@Test
64+
@DisplayName("중복된 username이면 예외 발생")
65+
void register_duplicateUsername() {
66+
userService.register(new UserRegisterRequest(
67+
"dupuser", "[email protected]", "P@ssw0rd!", "닉네임"
68+
));
69+
70+
assertThatThrownBy(() ->
71+
userService.register(new UserRegisterRequest(
72+
"dupuser", "[email protected]", "P@ssw0rd!", "다른닉네임"
73+
))
74+
).isInstanceOf(CustomException.class)
75+
.hasMessage(ErrorCode.USERNAME_DUPLICATED.getMessage());
76+
}
77+
78+
@Test
79+
@DisplayName("중복된 email이면 예외 발생")
80+
void register_duplicateEmail() {
81+
userService.register(new UserRegisterRequest(
82+
"user1", "[email protected]", "P@ssw0rd!", "닉네임"
83+
));
84+
85+
assertThatThrownBy(() ->
86+
userService.register(new UserRegisterRequest(
87+
"user2", "[email protected]", "P@ssw0rd!", "다른닉네임"
88+
))
89+
).isInstanceOf(CustomException.class)
90+
.hasMessage(ErrorCode.EMAIL_DUPLICATED.getMessage());
91+
}
92+
93+
@Test
94+
@DisplayName("중복된 nickname이면 예외 발생")
95+
void register_duplicateNickname() {
96+
userService.register(new UserRegisterRequest(
97+
"user1", "[email protected]", "P@ssw0rd!", "dupnick"
98+
));
99+
100+
assertThatThrownBy(() ->
101+
userService.register(new UserRegisterRequest(
102+
"user2", "[email protected]", "P@ssw0rd!", "dupnick"
103+
))
104+
).isInstanceOf(CustomException.class)
105+
.hasMessage(ErrorCode.NICKNAME_DUPLICATED.getMessage());
106+
}
107+
108+
@Test
109+
@DisplayName("비밀번호 정책 위반(숫자/특수문자 없음) → 예외 발생")
110+
void register_invalidPassword_noNumberOrSpecial() {
111+
UserRegisterRequest request = new UserRegisterRequest(
112+
"user1", "[email protected]", "abcdefgh", "닉네임"
113+
);
114+
115+
assertThatThrownBy(() -> userService.register(request))
116+
.isInstanceOf(CustomException.class)
117+
.hasMessage(ErrorCode.INVALID_PASSWORD.getMessage());
118+
}
119+
120+
@Test
121+
@DisplayName("비밀번호 정책 위반(길이 7자) → 예외 발생")
122+
void register_invalidPassword_tooShort() {
123+
UserRegisterRequest request = new UserRegisterRequest(
124+
"user2", "[email protected]", "Abc12!", "닉네임"
125+
);
126+
127+
assertThatThrownBy(() -> userService.register(request))
128+
.isInstanceOf(CustomException.class)
129+
.hasMessage(ErrorCode.INVALID_PASSWORD.getMessage());
130+
}
131+
132+
@Test
133+
@DisplayName("비밀번호 정책 통과(정상 8자 이상, 숫자/특수문자 포함) → 성공")
134+
void register_validPassword() {
135+
UserRegisterRequest request = new UserRegisterRequest(
136+
"user3", "[email protected]", "Abcd123!", "닉네임"
137+
);
138+
139+
UserResponse response = userService.register(request);
140+
141+
assertThat(response.username()).isEqualTo("user3");
142+
assertThat(passwordEncoder.matches("Abcd123!",
143+
userRepository.findById(response.userId()).get().getPassword())).isTrue();
144+
}
145+
}

0 commit comments

Comments
 (0)