forked from solid-connection/solid-connect-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUniversityLikeServiceTest.java
More file actions
175 lines (145 loc) · 6.78 KB
/
UniversityLikeServiceTest.java
File metadata and controls
175 lines (145 loc) · 6.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package com.example.solidconnection.university.service;
import com.example.solidconnection.custom.exception.CustomException;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.LikedUniversityRepository;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.support.TestContainerSpringBootTest;
import com.example.solidconnection.type.PreparationStatus;
import com.example.solidconnection.type.Role;
import com.example.solidconnection.university.domain.LikedUniversity;
import com.example.solidconnection.university.domain.UniversityInfoForApply;
import com.example.solidconnection.university.dto.IsLikeResponse;
import com.example.solidconnection.university.dto.LikeResultResponse;
import com.example.solidconnection.university.fixture.UniversityInfoForApplyFixture;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import static com.example.solidconnection.custom.exception.ErrorCode.ALREADY_LIKED_UNIVERSITY;
import static com.example.solidconnection.custom.exception.ErrorCode.NOT_LIKED_UNIVERSITY;
import static com.example.solidconnection.custom.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND;
import static com.example.solidconnection.university.service.UniversityLikeService.LIKE_CANCELED_MESSAGE;
import static com.example.solidconnection.university.service.UniversityLikeService.LIKE_SUCCESS_MESSAGE;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode;
import static org.junit.jupiter.api.Assertions.assertAll;
@TestContainerSpringBootTest
@DisplayName("대학교 좋아요 서비스 테스트")
class UniversityLikeServiceTest {
@Autowired
private UniversityLikeService universityLikeService;
@Autowired
private LikedUniversityRepository likedUniversityRepository;
@Autowired
private SiteUserRepository siteUserRepository;
@Autowired
private UniversityInfoForApplyFixture universityInfoForApplyFixture;
private SiteUser testUser;
private UniversityInfoForApply 괌대학_A_지원_정보;
@BeforeEach
void setUp() {
testUser = createSiteUser();
괌대학_A_지원_정보 = universityInfoForApplyFixture.괌대학_A_지원_정보();
}
@Nested
class 대학_좋아요를_등록한다 {
@Test
void 성공적으로_좋아요를_등록한다() {
// when
LikeResultResponse response = universityLikeService.likeUniversity(testUser, 괌대학_A_지원_정보.getId());
// then
assertAll(
() -> assertThat(response.result()).isEqualTo(LIKE_SUCCESS_MESSAGE),
() -> assertThat(likedUniversityRepository.findBySiteUserAndUniversityInfoForApply(
testUser, 괌대학_A_지원_정보
)).isPresent()
);
}
@Test
void 이미_좋아요한_대학이면_예외_응답을_반환한다() {
// given
saveLikedUniversity(testUser, 괌대학_A_지원_정보);
// when & then
assertThatCode(() -> universityLikeService.likeUniversity(testUser, 괌대학_A_지원_정보.getId()))
.isInstanceOf(CustomException.class)
.hasMessage(ALREADY_LIKED_UNIVERSITY.getMessage());
}
}
@Nested
class 대학_좋아요를_취소한다 {
@Test
void 성공적으로_좋아요를_취소한다() {
// given
saveLikedUniversity(testUser, 괌대학_A_지원_정보);
// when
LikeResultResponse response = universityLikeService.cancelLikeUniversity(testUser, 괌대학_A_지원_정보.getId());
// then
assertAll(
() -> assertThat(response.result()).isEqualTo(LIKE_CANCELED_MESSAGE),
() -> assertThat(likedUniversityRepository.findBySiteUserAndUniversityInfoForApply(
testUser, 괌대학_A_지원_정보
)).isEmpty()
);
}
@Test
void 좋아요하지_않은_대학이면_예외_응답을_반환한다() {
// when & then
assertThatCode(() -> universityLikeService.cancelLikeUniversity(testUser, 괌대학_A_지원_정보.getId()))
.isInstanceOf(CustomException.class)
.hasMessage(NOT_LIKED_UNIVERSITY.getMessage());
}
}
@Test
void 존재하지_않는_대학_좋아요_시도하면_예외_응답을_반환한다() {
// given
Long invalidUniversityId = 9999L;
// when & then
assertThatCode(() -> universityLikeService.likeUniversity(testUser, invalidUniversityId))
.isInstanceOf(CustomException.class)
.hasMessage(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage());
}
@Test
void 좋아요한_대학인지_확인한다() {
// given
saveLikedUniversity(testUser, 괌대학_A_지원_정보);
// when
IsLikeResponse response = universityLikeService.getIsLiked(testUser, 괌대학_A_지원_정보.getId());
// then
assertThat(response.isLike()).isTrue();
}
@Test
void 좋아요하지_않은_대학인지_확인한다() {
// when
IsLikeResponse response = universityLikeService.getIsLiked(testUser, 괌대학_A_지원_정보.getId());
// then
assertThat(response.isLike()).isFalse();
}
@Test
void 존재하지_않는_대학의_좋아요_여부를_조회하면_예외_응답을_반환한다() {
// given
Long invalidUniversityId = 9999L;
// when & then
assertThatCode(() -> universityLikeService.getIsLiked(testUser, invalidUniversityId))
.isInstanceOf(CustomException.class)
.hasMessage(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage());
}
// todo : 추후 Fixture로 대체 필요
private SiteUser createSiteUser() {
SiteUser siteUser = new SiteUser(
"test@example.com",
"nickname",
"profileImageUrl",
PreparationStatus.CONSIDERING,
Role.MENTEE
);
return siteUserRepository.save(siteUser);
}
private void saveLikedUniversity(SiteUser siteUser, UniversityInfoForApply universityInfoForApply) {
LikedUniversity likedUniversity = LikedUniversity.builder()
.siteUser(siteUser)
.universityInfoForApply(universityInfoForApply)
.build();
likedUniversityRepository.save(likedUniversity);
}
}