Skip to content

Commit e31d99f

Browse files
committed
Test: 서비스 테스트 작성
1 parent 6619512 commit e31d99f

File tree

1 file changed

+181
-0
lines changed

1 file changed

+181
-0
lines changed
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
package com.back.domain.user.service;
2+
3+
import com.back.domain.user.dto.UpdateUserProfileRequest;
4+
import com.back.domain.user.dto.UserDetailResponse;
5+
import com.back.domain.user.entity.User;
6+
import com.back.domain.user.entity.UserProfile;
7+
import com.back.domain.user.entity.UserStatus;
8+
import com.back.domain.user.repository.UserProfileRepository;
9+
import com.back.domain.user.repository.UserRepository;
10+
import com.back.global.exception.CustomException;
11+
import com.back.global.exception.ErrorCode;
12+
import org.junit.jupiter.api.DisplayName;
13+
import org.junit.jupiter.api.Test;
14+
import org.springframework.beans.factory.annotation.Autowired;
15+
import org.springframework.boot.test.context.SpringBootTest;
16+
import org.springframework.security.crypto.password.PasswordEncoder;
17+
import org.springframework.test.context.ActiveProfiles;
18+
import org.springframework.transaction.annotation.Transactional;
19+
20+
import java.time.LocalDate;
21+
22+
import static org.assertj.core.api.Assertions.assertThat;
23+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
24+
25+
@SpringBootTest
26+
@Transactional
27+
@ActiveProfiles("test")
28+
class UserServiceTest {
29+
30+
@Autowired
31+
private UserService userService;
32+
33+
@Autowired
34+
private UserRepository userRepository;
35+
36+
@Autowired
37+
private UserProfileRepository userProfileRepository;
38+
39+
@Autowired
40+
private PasswordEncoder passwordEncoder;
41+
42+
// ---------------------- getUserInfo ----------------------
43+
44+
@Test
45+
@DisplayName("정상 유저 정보 조회 성공")
46+
void getUserInfo_success() {
47+
// given: 정상 상태의 유저 저장
48+
User user = User.createUser("testuser", "[email protected]", passwordEncoder.encode("P@ssw0rd!"));
49+
user.setUserProfile(new UserProfile(user, "홍길동", null, "소개글", LocalDate.of(2000, 1, 1), 1000));
50+
user.setUserStatus(UserStatus.ACTIVE);
51+
userRepository.save(user);
52+
53+
// when: 서비스 호출
54+
UserDetailResponse response = userService.getUserInfo(user.getId());
55+
56+
// then: 응답 값 검증
57+
assertThat(response.username()).isEqualTo("testuser");
58+
assertThat(response.profile().nickname()).isEqualTo("홍길동");
59+
}
60+
61+
@Test
62+
@DisplayName("유저 없음 → USER_NOT_FOUND 예외")
63+
void getUserInfo_userNotFound() {
64+
// when & then: 존재하지 않는 ID로 조회
65+
assertThatThrownBy(() -> userService.getUserInfo(999L))
66+
.isInstanceOf(CustomException.class)
67+
.hasMessage(ErrorCode.USER_NOT_FOUND.getMessage());
68+
}
69+
70+
@Test
71+
@DisplayName("탈퇴 유저 조회 → USER_DELETED 예외")
72+
void getUserInfo_deletedUser() {
73+
// given: 상태 DELETED 유저 저장
74+
User user = User.createUser("deleted", "[email protected]", passwordEncoder.encode("P@ssw0rd!"));
75+
user.setUserProfile(new UserProfile(user, "닉네임", null, null, null, 0));
76+
user.setUserStatus(UserStatus.DELETED);
77+
userRepository.save(user);
78+
79+
// when & then
80+
assertThatThrownBy(() -> userService.getUserInfo(user.getId()))
81+
.isInstanceOf(CustomException.class)
82+
.hasMessage(ErrorCode.USER_DELETED.getMessage());
83+
}
84+
85+
@Test
86+
@DisplayName("정지 유저 조회 → USER_SUSPENDED 예외")
87+
void getUserInfo_suspendedUser() {
88+
// given: 상태 SUSPENDED 유저 저장
89+
User user = User.createUser("suspended", "[email protected]", passwordEncoder.encode("P@ssw0rd!"));
90+
user.setUserProfile(new UserProfile(user, "닉네임", null, null, null, 0));
91+
user.setUserStatus(UserStatus.SUSPENDED);
92+
userRepository.save(user);
93+
94+
// when & then
95+
assertThatThrownBy(() -> userService.getUserInfo(user.getId()))
96+
.isInstanceOf(CustomException.class)
97+
.hasMessage(ErrorCode.USER_SUSPENDED.getMessage());
98+
}
99+
100+
// ---------------------- updateUserProfile ----------------------
101+
102+
@Test
103+
@DisplayName("프로필 수정 성공")
104+
void updateUserProfile_success() {
105+
// given: 정상 유저 저장
106+
User user = User.createUser("updateuser", "[email protected]", passwordEncoder.encode("P@ssw0rd!"));
107+
user.setUserProfile(new UserProfile(user, "기존닉", null, null, null, 0));
108+
user.setUserStatus(UserStatus.ACTIVE);
109+
userRepository.save(user);
110+
111+
UpdateUserProfileRequest request = new UpdateUserProfileRequest(
112+
"새닉네임", "https://cdn.example.com/new.png", "자기소개", LocalDate.of(1999, 5, 10)
113+
);
114+
115+
// when: 서비스 호출
116+
UserDetailResponse response = userService.updateUserProfile(user.getId(), request);
117+
118+
// then: 응답 및 DB 값 검증
119+
assertThat(response.profile().nickname()).isEqualTo("새닉네임");
120+
assertThat(response.profile().bio()).isEqualTo("자기소개");
121+
122+
User updated = userRepository.findById(user.getId()).orElseThrow();
123+
assertThat(updated.getUserProfile().getNickname()).isEqualTo("새닉네임");
124+
}
125+
126+
@Test
127+
@DisplayName("중복 닉네임 수정 → NICKNAME_DUPLICATED 예외")
128+
void updateUserProfile_duplicateNickname() {
129+
// given: user1, user2 저장
130+
User user1 = User.createUser("user1", "[email protected]", passwordEncoder.encode("P@ssw0rd!"));
131+
user1.setUserProfile(new UserProfile(user1, "닉1", null, null, null, 0));
132+
user1.setUserStatus(UserStatus.ACTIVE);
133+
userRepository.save(user1);
134+
135+
User user2 = User.createUser("user2", "[email protected]", passwordEncoder.encode("P@ssw0rd!"));
136+
user2.setUserProfile(new UserProfile(user2, "닉2", null, null, null, 0));
137+
user2.setUserStatus(UserStatus.ACTIVE);
138+
userRepository.save(user2);
139+
140+
UpdateUserProfileRequest request = new UpdateUserProfileRequest("닉1", null, null, null);
141+
142+
// when & then
143+
assertThatThrownBy(() -> userService.updateUserProfile(user2.getId(), request))
144+
.isInstanceOf(CustomException.class)
145+
.hasMessage(ErrorCode.NICKNAME_DUPLICATED.getMessage());
146+
}
147+
148+
@Test
149+
@DisplayName("탈퇴 유저 프로필 수정 → USER_DELETED 예외")
150+
void updateUserProfile_deletedUser() {
151+
// given: 상태 DELETED 유저 저장
152+
User user = User.createUser("deleted2", "[email protected]", passwordEncoder.encode("P@ssw0rd!"));
153+
user.setUserProfile(new UserProfile(user, "닉네임", null, null, null, 0));
154+
user.setUserStatus(UserStatus.DELETED);
155+
userRepository.save(user);
156+
157+
UpdateUserProfileRequest request = new UpdateUserProfileRequest("새닉", null, null, null);
158+
159+
// when & then
160+
assertThatThrownBy(() -> userService.updateUserProfile(user.getId(), request))
161+
.isInstanceOf(CustomException.class)
162+
.hasMessage(ErrorCode.USER_DELETED.getMessage());
163+
}
164+
165+
@Test
166+
@DisplayName("정지 유저 프로필 수정 → USER_SUSPENDED 예외")
167+
void updateUserProfile_suspendedUser() {
168+
// given: 상태 SUSPENDED 유저 저장
169+
User user = User.createUser("suspended2", "[email protected]", passwordEncoder.encode("P@ssw0rd!"));
170+
user.setUserProfile(new UserProfile(user, "닉네임", null, null, null, 0));
171+
user.setUserStatus(UserStatus.SUSPENDED);
172+
userRepository.save(user);
173+
174+
UpdateUserProfileRequest request = new UpdateUserProfileRequest("새닉", null, null, null);
175+
176+
// when & then
177+
assertThatThrownBy(() -> userService.updateUserProfile(user.getId(), request))
178+
.isInstanceOf(CustomException.class)
179+
.hasMessage(ErrorCode.USER_SUSPENDED.getMessage());
180+
}
181+
}

0 commit comments

Comments
 (0)