From 4c35674b62a1cf8d0148b7ae307d36bcd5c6f9f2 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Sat, 11 Jan 2025 20:56:40 +0900 Subject: [PATCH 01/18] =?UTF-8?q?feat:=20=EB=8C=80=ED=95=99=EA=B5=90=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=EC=A1=B0=ED=9A=8C=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UniversityServiceTest.java | 179 ++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java new file mode 100644 index 000000000..cce2974dd --- /dev/null +++ b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java @@ -0,0 +1,179 @@ +package com.example.solidconnection.university.service; + +import com.example.solidconnection.cache.manager.CacheManager; +import com.example.solidconnection.custom.exception.CustomException; +import com.example.solidconnection.entity.Country; +import com.example.solidconnection.entity.Region; +import com.example.solidconnection.repositories.CountryRepository; +import com.example.solidconnection.repositories.RegionRepository; +import com.example.solidconnection.support.TestContainerSpringBootTest; +import com.example.solidconnection.university.domain.LanguageRequirement; +import com.example.solidconnection.university.domain.University; +import com.example.solidconnection.university.domain.UniversityInfoForApply; +import com.example.solidconnection.university.dto.UniversityDetailResponse; +import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; +import com.example.solidconnection.university.repository.UniversityRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.HashSet; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static com.example.solidconnection.custom.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; +import static com.example.solidconnection.type.LanguageTestType.IELTS; +import static com.example.solidconnection.type.SemesterAvailableForDispatch.IRRELEVANT; +import static com.example.solidconnection.type.TuitionFeeType.OVERSEAS_UNIVERSITY_PAYMENT; +import static org.assertj.core.api.Assertions.assertThat; + +@TestContainerSpringBootTest +@DisplayName("대학교 서비스 테스트") +class UniversityServiceTest { + + + @Autowired + private UniversityService universityService; + + @Autowired + private UniversityInfoForApplyRepository universityInfoForApplyRepository; + + @Autowired + private UniversityRepository universityRepository; + + @Autowired + private RegionRepository regionRepository; + + @Autowired + private CountryRepository countryRepository; + + @Autowired + private CacheManager cacheManager; + + @Test + void 대학_상세정보를_정상_조회한다() { + // given + UniversityInfoForApply universityInfoApply = saveTestUniversityWithInfo(); + University university = universityInfoApply.getUniversity(); + + // when + UniversityDetailResponse response = universityService.getUniversityDetail(universityInfoApply.getId()); + + // then + assertThat(response.koreanName()).isEqualTo(universityInfoApply.getKoreanName()); + assertThat(response.englishName()).isEqualTo(university.getEnglishName()); + assertThat(response.term()).isEqualTo(universityInfoApply.getTerm()); + assertThat(response.region()).isEqualTo(university.getRegion().getKoreanName()); + assertThat(response.country()).isEqualTo(university.getCountry().getKoreanName()); + assertThat(response.studentCapacity()).isEqualTo(universityInfoApply.getStudentCapacity()); + assertThat(response.tuitionFeeType()).isEqualTo(universityInfoApply.getTuitionFeeType().getKoreanName()); + } + + @Test + void 대학_상세정보_조회시_캐시가_적용된다() { + // given + UniversityInfoForApply savedInfo = saveTestUniversityWithInfo(); + String cacheKey = "university:" + savedInfo.getId(); + + // when + UniversityDetailResponse dbResponse = universityService.getUniversityDetail(savedInfo.getId()); + Object cachedValue = cacheManager.get(cacheKey); + UniversityDetailResponse cacheResponse = universityService.getUniversityDetail(savedInfo.getId()); + + // then + assertThat(dbResponse).isEqualTo(cacheResponse); + assertThat(cachedValue).isEqualTo(dbResponse); + //verify(universityInfoForApplyRepository, times(1)).findById(savedInfo.getId()); + } + + + @Test + void 존재하지_않는_대학_상세정보_조회시_예외_응답을_반환한다() { + // given + Long invalidId = 9999L; + + // when & + RuntimeException exception = assertThrows(RuntimeException.class, + () -> universityService.getUniversityDetail(invalidId)); + CustomException customException = (CustomException)exception.getCause().getCause(); + + // then + assertThat(customException.getMessage()).isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); + } + + private Region createRegion() { + return new Region("AMERICAS", "미주권"); + } + + private Country createCountry(Region region) { + return new Country("AU", "호주", region); + } + + private University createUniversity(Country country, Region region) { + return new University( + null, + "시드니대학", + "University of Sydney", + "university_of_sydney", + "https://www.sydney.edu.au/", + "www.sydney.edu.au/sydney-abroad-units", + "https://www.sydney.edu.au/study/accommodation.html", + "resize/university_of_sydney/logo.webp", + "resize/university_of_sydney/1.webp", + "시드니 중심부에서 가까운 위치에 있는 캠퍼스는 학생들에게 활기찬 문화, 사회, 전문적인 생활을 즐길 수 있는 무한한 기회를 제공합니다. " + + "시드니는 시드니 오페라 하우스와 하버 브리지와 같은 상징적인 랜드마크로 유명하며, 다양한 인구와 역동적인 예술 장면으로 알려진 글로벌 도시입니다. " + + "University of Sydney는 다양한 분야에서 연구와 교육의 선두주자로서, 학생들에게 글로벌 관점과 사회 정의 및 지속 가능성에 대한 약속을 강화합니다.", + country, + region + ); + } + + private Set createLanguageRequirements(UniversityInfoForApply universityInfoForApply) { + return Set.of( + new LanguageRequirement(null, IELTS, "6.5", universityInfoForApply), + new LanguageRequirement(null, IELTS, "6.0", universityInfoForApply) + ); + } + + private UniversityInfoForApply createUniversityInfoForApply(University university) { + UniversityInfoForApply universityInfo = new UniversityInfoForApply( + null, + "2024-1", + "시드니대학", + 5, + OVERSEAS_UNIVERSITY_PAYMENT, + IRRELEVANT, + "2", + "영어 점수는 다음의 세부영역 점수를 각각 만족해야함
" + + " - IELTS: 모든 영역에서 6.0 이상
" + + " - TOEFL IBT: 읽기/듣기/말하기 17점, 쓰기 19점 이상
" + + "- 어학성적은 파견학기 시작시까지 유효하여야함", + "3.0", + "4.0", + null, + "타전공 지원 및 수강 가능
" + + "- MECO, CAEL, LAWS unit 수강 여석 제한 있음", + null, + null, + "OSHC(Overseas Student Health Cover) 국제학생 보험가입 의무 " + + "(2023년 기준 AUD 348/학기, 학기마다 비용 상이)", + new HashSet<>(), + university + ); + + Set requirements = createLanguageRequirements(universityInfo); + requirements.forEach(universityInfo::addLanguageRequirements); + return universityInfo; + } + + private UniversityInfoForApply saveTestUniversityWithInfo() { + Region region = regionRepository.save(createRegion()); + Country country = countryRepository.save(createCountry(region)); + + University university = createUniversity(country, region); + university = universityRepository.save(university); + + UniversityInfoForApply universityInfo = createUniversityInfoForApply(university); + return universityInfoForApplyRepository.save(universityInfo); + } +} From 7f45bbcd63351d59e8ef611c12be2cc5f6a0aecb Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Sun, 12 Jan 2025 11:29:42 +0900 Subject: [PATCH 02/18] =?UTF-8?q?feat:=20=EB=8C=80=ED=95=99=20=ED=86=B5?= =?UTF-8?q?=ED=95=A9=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=85=8B=EC=97=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UniversityDataSetUpIntegrationTest.java | 288 ++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 src/test/java/com/example/solidconnection/university/service/UniversityDataSetUpIntegrationTest.java diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityDataSetUpIntegrationTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityDataSetUpIntegrationTest.java new file mode 100644 index 000000000..91518a09e --- /dev/null +++ b/src/test/java/com/example/solidconnection/university/service/UniversityDataSetUpIntegrationTest.java @@ -0,0 +1,288 @@ +package com.example.solidconnection.university.service; + +import com.example.solidconnection.entity.Country; +import com.example.solidconnection.entity.Region; +import com.example.solidconnection.repositories.CountryRepository; +import com.example.solidconnection.repositories.RegionRepository; +import com.example.solidconnection.support.DatabaseClearExtension; +import com.example.solidconnection.support.TestContainerSpringBootTest; +import com.example.solidconnection.type.LanguageTestType; +import com.example.solidconnection.university.domain.LanguageRequirement; +import com.example.solidconnection.university.domain.University; +import com.example.solidconnection.university.domain.UniversityInfoForApply; +import com.example.solidconnection.university.repository.LanguageRequirementRepository; +import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; +import com.example.solidconnection.university.repository.UniversityRepository; +import io.restassured.RestAssured; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.web.server.LocalServerPort; + +import java.util.HashSet; + +import static com.example.solidconnection.type.SemesterAvailableForDispatch.ONE_SEMESTER; +import static com.example.solidconnection.type.TuitionFeeType.HOME_UNIVERSITY_PAYMENT; + +@ExtendWith(DatabaseClearExtension.class) +@TestContainerSpringBootTest +abstract class UniversityDataSetUpIntegrationTest { + + public static Region 영미권; + public static Region 유럽; + public static Region 아시아; + public static Country 미국; + public static Country 캐나다; + public static Country 덴마크; + public static Country 오스트리아; + public static Country 일본; + + public static University 영미권_미국_괌대학; + public static University 영미권_미국_네바다주립대학_라스베이거스; + public static University 영미권_캐나다_메모리얼대학_세인트존스; + public static University 유럽_덴마크_서던덴마크대학교; + public static University 유럽_덴마크_코펜하겐IT대학; + public static University 유럽_오스트리아_그라츠대학; + public static University 유럽_오스트리아_그라츠공과대학; + public static University 유럽_오스트리아_린츠_카톨릭대학; + public static University 아시아_일본_메이지대학; + + public static UniversityInfoForApply 괌대학_A_지원_정보; + public static UniversityInfoForApply 괌대학_B_지원_정보; + public static UniversityInfoForApply 네바다주립대학_라스베이거스_지원_정보; + public static UniversityInfoForApply 메모리얼대학_세인트존스_A_지원_정보; + public static UniversityInfoForApply 서던덴마크대학교_지원_정보; + public static UniversityInfoForApply 코펜하겐IT대학_지원_정보; + public static UniversityInfoForApply 그라츠대학_지원_정보; + public static UniversityInfoForApply 그라츠공과대학_지원_정보; + public static UniversityInfoForApply 린츠_카톨릭대학_지원_정보; + public static UniversityInfoForApply 메이지대학_지원_정보; + + @Value("${university.term}") + public String term; + + @LocalServerPort + private int port; + + @Autowired + private RegionRepository regionRepository; + + @Autowired + private CountryRepository countryRepository; + + @Autowired + private UniversityRepository universityRepository; + + @Autowired + private UniversityInfoForApplyRepository universityInfoForApplyRepository; + + @Autowired + private LanguageRequirementRepository languageRequirementRepository; + + @BeforeEach + public void setUpBasicData() { + RestAssured.port = port; + + 영미권 = regionRepository.save(new Region("AMERICAS", "영미권")); + 유럽 = regionRepository.save(new Region("EUROPE", "유럽")); + 아시아 = regionRepository.save(new Region("ASIA", "아시아")); + + 미국 = countryRepository.save(new Country("US", "미국", 영미권)); + 캐나다 = countryRepository.save(new Country("CA", "캐나다", 영미권)); + 덴마크 = countryRepository.save(new Country("DK", "덴마크", 유럽)); + 오스트리아 = countryRepository.save(new Country("AT", "오스트리아", 유럽)); + 일본 = countryRepository.save(new Country("JP", "일본", 아시아)); + + 영미권_미국_괌대학 = universityRepository.save(new University( + null, "괌대학", "University of Guam", "university_of_guam", + "https://www.uog.edu/admissions/international-students", + "https://www.uog.edu/admissions/course-schedule", + "https://www.uog.edu/life-at-uog/residence-halls/", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_guam/logo.png", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_guam/1.png", + null, 미국, 영미권 + )); + + 영미권_미국_네바다주립대학_라스베이거스 = universityRepository.save(new University( + null, "네바다주립대학 라스베이거스", "University of Nevada, Las Vegas", "university_of_nevada_las_vegas", + "https://www.unlv.edu/engineering/eip", + "https://www.unlv.edu/engineering/academic-programs", + "https://www.unlv.edu/housing", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_nevada_las_vegas/logo.png", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_nevada_las_vegas/1.png", + null, 미국, 영미권 + )); + + 영미권_캐나다_메모리얼대학_세인트존스 = universityRepository.save(new University( + null, "메모리얼 대학 세인트존스", "Memorial University of Newfoundland St. John's", "memorial_university_of_newfoundland_st_johns", + "https://mun.ca/goabroad/visiting-students-inbound/", + "https://www.unlv.edu/engineering/academic-programs", + "https://www.mun.ca/residences/", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/memorial_university_of_newfoundland_st_johns/logo.png", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/memorial_university_of_newfoundland_st_johns/1.png", + null, 캐나다, 영미권 + )); + + 유럽_덴마크_서던덴마크대학교 = universityRepository.save(new University( + null, "서던덴마크대학교", "University of Southern Denmark", "university_of_southern_denmark", + "https://www.sdu.dk/en", + "https://www.sdu.dk/en", + "https://www.sdu.dk/en/uddannelse/information_for_international_students/studenthousing", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_southern_denmark/logo.png", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_southern_denmark/1.png", + null, 덴마크, 유럽 + )); + + 유럽_덴마크_코펜하겐IT대학 = universityRepository.save(new University( + null, "코펜하겐 IT대학", "IT University of Copenhagen", "it_university_of_copenhagen", + "https://en.itu.dk/", null, + "https://en.itu.dk/Programmes/Student-Life/Practical-information-for-international-students", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/it_university_of_copenhagen/logo.png", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/it_university_of_copenhagen/1.png", + null, 덴마크, 유럽 + )); + + 유럽_오스트리아_그라츠대학 = universityRepository.save(new University( + null, "그라츠 대학", "University of Graz", "university_of_graz", + "https://www.uni-graz.at/en/", + "https://static.uni-graz.at/fileadmin/veranstaltungen/orientation/documents/incstud_application-courses.pdf", + "https://orientation.uni-graz.at/de/planning-the-arrival/accommodation/", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_graz/logo.png", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_graz/1.png", + null, 오스트리아, 유럽 + )); + + 유럽_오스트리아_그라츠공과대학 = universityRepository.save(new University( + null, "그라츠공과대학", "Graz University of Technology", "graz_university_of_technology", + "https://www.tugraz.at/en/home", null, + "https://www.tugraz.at/en/studying-and-teaching/studying-internationally/incoming-students-exchange-at-tu-graz/your-stay-at-tu-graz/preparation#c75033", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/graz_university_of_technology/logo.png", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/graz_university_of_technology/1.png", + null, 오스트리아, 유럽 + )); + + 유럽_오스트리아_린츠_카톨릭대학 = universityRepository.save(new University( + null, "린츠 카톨릭 대학교", "Catholic Private University Linz", "catholic_private_university_linz", + "https://ku-linz.at/en", null, + "https://ku-linz.at/en/ku_international/incomings/kulis", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/catholic_private_university_linz/logo.png", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/catholic_private_university_linz/1.png", + null, 오스트리아, 유럽 + )); + + 아시아_일본_메이지대학 = universityRepository.save(new University( + null, "메이지대학", "Meiji University", "meiji_university", + "https://www.meiji.ac.jp/cip/english/admissions/co7mm90000000461-att/co7mm900000004fa.pdf", null, + "https://www.meiji.ac.jp/cip/english/admissions/co7mm90000000461-att/co7mm900000004fa.pdf", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/meiji_university/logo.png", + "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/meiji_university/1.png", + null, 일본, 아시아 + )); + + 괌대학_A_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( + null, term, "괌대학(A형)", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, + "1", "detailsForLanguage", "gpaRequirement", + "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", + "detailsForAccommodation", "detailsForEnglishCourse", "details", + new HashSet<>(), 영미권_미국_괌대학 + )); + + 괌대학_B_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( + null, term, "괌대학(B형)", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, + "1", "detailsForLanguage", "gpaRequirement", + "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", + "detailsForAccommodation", "detailsForEnglishCourse", "details", + new HashSet<>(), 영미권_미국_괌대학 + )); + + 네바다주립대학_라스베이거스_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( + null, term, "네바다주립대학 라스베이거스(B형)", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, + "1", "detailsForLanguage", "gpaRequirement", + "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", + "detailsForAccommodation", "detailsForEnglishCourse", "details", + new HashSet<>(), 영미권_미국_네바다주립대학_라스베이거스 + )); + + 메모리얼대학_세인트존스_A_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( + null, term, "메모리얼 대학 세인트존스(A형)", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, + "1", "detailsForLanguage", "gpaRequirement", + "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", + "detailsForAccommodation", "detailsForEnglishCourse", "details", + new HashSet<>(), 영미권_캐나다_메모리얼대학_세인트존스 + )); + + 서던덴마크대학교_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( + null, term, "서던덴마크대학교", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, + "1", "detailsForLanguage", "gpaRequirement", + "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", + "detailsForAccommodation", "detailsForEnglishCourse", "details", + new HashSet<>(), 유럽_덴마크_서던덴마크대학교 + )); + + 코펜하겐IT대학_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( + null, term, "코펜하겐 IT대학", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, + "1", "detailsForLanguage", "gpaRequirement", + "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", + "detailsForAccommodation", "detailsForEnglishCourse", "details", + new HashSet<>(), 유럽_덴마크_코펜하겐IT대학 + )); + + 그라츠대학_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( + null, term, "그라츠 대학", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, + "1", "detailsForLanguage", "gpaRequirement", + "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", + "detailsForAccommodation", "detailsForEnglishCourse", "details", + new HashSet<>(), 유럽_오스트리아_그라츠대학 + )); + + 그라츠공과대학_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( + null, term, "그라츠공과대학", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, + "1", "detailsForLanguage", "gpaRequirement", + "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", + "detailsForAccommodation", "detailsForEnglishCourse", "details", + new HashSet<>(), 유럽_오스트리아_그라츠공과대학 + )); + + 린츠_카톨릭대학_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( + null, term, "린츠 카톨릭 대학교", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, + "1", "detailsForLanguage", "gpaRequirement", + "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", + "detailsForAccommodation", "detailsForEnglishCourse", "details", + new HashSet<>(), 유럽_오스트리아_린츠_카톨릭대학 + )); + + 메이지대학_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( + null, term, "메이지대학", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, + "1", "detailsForLanguage", "gpaRequirement", + "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", + "detailsForAccommodation", "detailsForEnglishCourse", "details", + new HashSet<>(), 아시아_일본_메이지대학 + )); + + saveLanguageTestRequirement(괌대학_A_지원_정보, LanguageTestType.TOEFL_IBT, "80"); + saveLanguageTestRequirement(괌대학_A_지원_정보, LanguageTestType.TOEIC, "800"); + saveLanguageTestRequirement(괌대학_B_지원_정보, LanguageTestType.TOEFL_IBT, "70"); + saveLanguageTestRequirement(괌대학_B_지원_정보, LanguageTestType.TOEIC, "900"); + saveLanguageTestRequirement(네바다주립대학_라스베이거스_지원_정보, LanguageTestType.TOEIC, "800"); + saveLanguageTestRequirement(메모리얼대학_세인트존스_A_지원_정보, LanguageTestType.TOEIC, "800"); + saveLanguageTestRequirement(서던덴마크대학교_지원_정보, LanguageTestType.TOEFL_IBT, "70"); + saveLanguageTestRequirement(코펜하겐IT대학_지원_정보, LanguageTestType.TOEFL_IBT, "80"); + saveLanguageTestRequirement(그라츠대학_지원_정보, LanguageTestType.TOEFL_IBT, "80"); + saveLanguageTestRequirement(그라츠공과대학_지원_정보, LanguageTestType.TOEIC, "800"); + saveLanguageTestRequirement(린츠_카톨릭대학_지원_정보, LanguageTestType.TOEIC, "800"); + saveLanguageTestRequirement(메이지대학_지원_정보, LanguageTestType.JLPT, "N2"); + } + + private void saveLanguageTestRequirement( + UniversityInfoForApply universityInfoForApply, LanguageTestType testType, String minScore) { + LanguageRequirement languageRequirement = new LanguageRequirement( + null, + testType, + minScore, + universityInfoForApply); + universityInfoForApply.addLanguageRequirements(languageRequirement); + universityInfoForApplyRepository.save(universityInfoForApply); + languageRequirementRepository.save(languageRequirement); + } +} From 2b64031df9e184a5d9e0e0d7e47b5ac54ddb56b9 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Sun, 12 Jan 2025 11:30:17 +0900 Subject: [PATCH 03/18] =?UTF-8?q?refactor:=20=EC=85=8B=EC=97=85=EB=90=9C?= =?UTF-8?q?=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A1=9C=20=EB=8C=80=ED=95=99=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UniversityServiceTest.java | 171 +++++------------- 1 file changed, 44 insertions(+), 127 deletions(-) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java index cce2974dd..bcb05f859 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java @@ -2,178 +2,95 @@ import com.example.solidconnection.cache.manager.CacheManager; import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.entity.Country; -import com.example.solidconnection.entity.Region; -import com.example.solidconnection.repositories.CountryRepository; -import com.example.solidconnection.repositories.RegionRepository; -import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.university.domain.LanguageRequirement; -import com.example.solidconnection.university.domain.University; -import com.example.solidconnection.university.domain.UniversityInfoForApply; +import com.example.solidconnection.university.dto.LanguageRequirementResponse; import com.example.solidconnection.university.dto.UniversityDetailResponse; -import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; -import com.example.solidconnection.university.repository.UniversityRepository; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import java.util.HashSet; -import java.util.Set; - import static org.junit.jupiter.api.Assertions.assertThrows; import static com.example.solidconnection.custom.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; -import static com.example.solidconnection.type.LanguageTestType.IELTS; -import static com.example.solidconnection.type.SemesterAvailableForDispatch.IRRELEVANT; -import static com.example.solidconnection.type.TuitionFeeType.OVERSEAS_UNIVERSITY_PAYMENT; import static org.assertj.core.api.Assertions.assertThat; -@TestContainerSpringBootTest @DisplayName("대학교 서비스 테스트") -class UniversityServiceTest { +class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { @Autowired private UniversityService universityService; - @Autowired - private UniversityInfoForApplyRepository universityInfoForApplyRepository; - - @Autowired - private UniversityRepository universityRepository; - - @Autowired - private RegionRepository regionRepository; - - @Autowired - private CountryRepository countryRepository; - @Autowired private CacheManager cacheManager; @Test - void 대학_상세정보를_정상_조회한다() { + void 대학_상세정보를_정상_조회한다() { // given - UniversityInfoForApply universityInfoApply = saveTestUniversityWithInfo(); - University university = universityInfoApply.getUniversity(); + Long universityId = 괌대학_A_지원_정보.getId(); // when - UniversityDetailResponse response = universityService.getUniversityDetail(universityInfoApply.getId()); + UniversityDetailResponse response = universityService.getUniversityDetail(universityId); // then - assertThat(response.koreanName()).isEqualTo(universityInfoApply.getKoreanName()); - assertThat(response.englishName()).isEqualTo(university.getEnglishName()); - assertThat(response.term()).isEqualTo(universityInfoApply.getTerm()); - assertThat(response.region()).isEqualTo(university.getRegion().getKoreanName()); - assertThat(response.country()).isEqualTo(university.getCountry().getKoreanName()); - assertThat(response.studentCapacity()).isEqualTo(universityInfoApply.getStudentCapacity()); - assertThat(response.tuitionFeeType()).isEqualTo(universityInfoApply.getTuitionFeeType().getKoreanName()); + Assertions.assertAll( + () -> assertThat(response.id()).isEqualTo(괌대학_A_지원_정보.getId()), + () -> assertThat(response.term()).isEqualTo(괌대학_A_지원_정보.getTerm()), + () -> assertThat(response.koreanName()).isEqualTo(괌대학_A_지원_정보.getKoreanName()), + () -> assertThat(response.englishName()).isEqualTo(영미권_미국_괌대학.getEnglishName()), + () -> assertThat(response.formatName()).isEqualTo(영미권_미국_괌대학.getFormatName()), + () -> assertThat(response.region()).isEqualTo(영미권.getKoreanName()), + () -> assertThat(response.country()).isEqualTo(미국.getKoreanName()), + () -> assertThat(response.homepageUrl()).isEqualTo(영미권_미국_괌대학.getHomepageUrl()), + () -> assertThat(response.logoImageUrl()).isEqualTo(영미권_미국_괌대학.getLogoImageUrl()), + () -> assertThat(response.backgroundImageUrl()).isEqualTo(영미권_미국_괌대학.getBackgroundImageUrl()), + () -> assertThat(response.detailsForLocal()).isEqualTo(영미권_미국_괌대학.getDetailsForLocal()), + () -> assertThat(response.studentCapacity()).isEqualTo(괌대학_A_지원_정보.getStudentCapacity()), + () -> assertThat(response.tuitionFeeType()).isEqualTo(괌대학_A_지원_정보.getTuitionFeeType().getKoreanName()), + () -> assertThat(response.semesterAvailableForDispatch()).isEqualTo(괌대학_A_지원_정보.getSemesterAvailableForDispatch().getKoreanName()), + () -> assertThat(response.languageRequirements()).containsOnlyOnceElementsOf( + 괌대학_A_지원_정보.getLanguageRequirements().stream() + .map(LanguageRequirementResponse::from) + .toList()), + () -> assertThat(response.detailsForLanguage()).isEqualTo(괌대학_A_지원_정보.getDetailsForLanguage()), + () -> assertThat(response.gpaRequirement()).isEqualTo(괌대학_A_지원_정보.getGpaRequirement()), + () -> assertThat(response.gpaRequirementCriteria()).isEqualTo(괌대학_A_지원_정보.getGpaRequirementCriteria()), + () -> assertThat(response.semesterRequirement()).isEqualTo(괌대학_A_지원_정보.getSemesterRequirement()), + () -> assertThat(response.detailsForApply()).isEqualTo(괌대학_A_지원_정보.getDetailsForApply()), + () -> assertThat(response.detailsForMajor()).isEqualTo(괌대학_A_지원_정보.getDetailsForMajor()), + () -> assertThat(response.detailsForAccommodation()).isEqualTo(괌대학_A_지원_정보.getDetailsForAccommodation()), + () -> assertThat(response.detailsForEnglishCourse()).isEqualTo(괌대학_A_지원_정보.getDetailsForEnglishCourse()), + () -> assertThat(response.details()).isEqualTo(괌대학_A_지원_정보.getDetails()), + () -> assertThat(response.accommodationUrl()).isEqualTo(괌대학_A_지원_정보.getUniversity().getAccommodationUrl()), + () -> assertThat(response.englishCourseUrl()).isEqualTo(괌대학_A_지원_정보.getUniversity().getEnglishCourseUrl()) + ); } - @Test void 대학_상세정보_조회시_캐시가_적용된다() { // given - UniversityInfoForApply savedInfo = saveTestUniversityWithInfo(); - String cacheKey = "university:" + savedInfo.getId(); + Long universityId = 괌대학_A_지원_정보.getId(); + String cacheKey = "university:" + 괌대학_A_지원_정보.getId(); // when - UniversityDetailResponse dbResponse = universityService.getUniversityDetail(savedInfo.getId()); + UniversityDetailResponse dbResponse = universityService.getUniversityDetail(universityId); Object cachedValue = cacheManager.get(cacheKey); - UniversityDetailResponse cacheResponse = universityService.getUniversityDetail(savedInfo.getId()); + UniversityDetailResponse cacheResponse = universityService.getUniversityDetail(universityId); - // then + // then(정말 한 번만 호출하는지 검증하는 로직이 필요한데 아직 구현이 안되었습니다.) assertThat(dbResponse).isEqualTo(cacheResponse); assertThat(cachedValue).isEqualTo(dbResponse); - //verify(universityInfoForApplyRepository, times(1)).findById(savedInfo.getId()); } - @Test void 존재하지_않는_대학_상세정보_조회시_예외_응답을_반환한다() { // given Long invalidId = 9999L; - // when & + // when RuntimeException exception = assertThrows(RuntimeException.class, () -> universityService.getUniversityDetail(invalidId)); - CustomException customException = (CustomException)exception.getCause().getCause(); + CustomException customException = (CustomException) exception.getCause().getCause(); // then assertThat(customException.getMessage()).isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); } - - private Region createRegion() { - return new Region("AMERICAS", "미주권"); - } - - private Country createCountry(Region region) { - return new Country("AU", "호주", region); - } - - private University createUniversity(Country country, Region region) { - return new University( - null, - "시드니대학", - "University of Sydney", - "university_of_sydney", - "https://www.sydney.edu.au/", - "www.sydney.edu.au/sydney-abroad-units", - "https://www.sydney.edu.au/study/accommodation.html", - "resize/university_of_sydney/logo.webp", - "resize/university_of_sydney/1.webp", - "시드니 중심부에서 가까운 위치에 있는 캠퍼스는 학생들에게 활기찬 문화, 사회, 전문적인 생활을 즐길 수 있는 무한한 기회를 제공합니다. " + - "시드니는 시드니 오페라 하우스와 하버 브리지와 같은 상징적인 랜드마크로 유명하며, 다양한 인구와 역동적인 예술 장면으로 알려진 글로벌 도시입니다. " + - "University of Sydney는 다양한 분야에서 연구와 교육의 선두주자로서, 학생들에게 글로벌 관점과 사회 정의 및 지속 가능성에 대한 약속을 강화합니다.", - country, - region - ); - } - - private Set createLanguageRequirements(UniversityInfoForApply universityInfoForApply) { - return Set.of( - new LanguageRequirement(null, IELTS, "6.5", universityInfoForApply), - new LanguageRequirement(null, IELTS, "6.0", universityInfoForApply) - ); - } - - private UniversityInfoForApply createUniversityInfoForApply(University university) { - UniversityInfoForApply universityInfo = new UniversityInfoForApply( - null, - "2024-1", - "시드니대학", - 5, - OVERSEAS_UNIVERSITY_PAYMENT, - IRRELEVANT, - "2", - "영어 점수는 다음의 세부영역 점수를 각각 만족해야함
" + - " - IELTS: 모든 영역에서 6.0 이상
" + - " - TOEFL IBT: 읽기/듣기/말하기 17점, 쓰기 19점 이상
" + - "- 어학성적은 파견학기 시작시까지 유효하여야함", - "3.0", - "4.0", - null, - "타전공 지원 및 수강 가능
" + - "- MECO, CAEL, LAWS unit 수강 여석 제한 있음", - null, - null, - "OSHC(Overseas Student Health Cover) 국제학생 보험가입 의무 " + - "(2023년 기준 AUD 348/학기, 학기마다 비용 상이)", - new HashSet<>(), - university - ); - - Set requirements = createLanguageRequirements(universityInfo); - requirements.forEach(universityInfo::addLanguageRequirements); - return universityInfo; - } - - private UniversityInfoForApply saveTestUniversityWithInfo() { - Region region = regionRepository.save(createRegion()); - Country country = countryRepository.save(createCountry(region)); - - University university = createUniversity(country, region); - university = universityRepository.save(university); - - UniversityInfoForApply universityInfo = createUniversityInfoForApply(university); - return universityInfoForApplyRepository.save(universityInfo); - } } From 28017c0dea7b7987b97a6d2691fe20fbb4ed952a Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Sun, 12 Jan 2025 11:38:43 +0900 Subject: [PATCH 04/18] =?UTF-8?q?feat:=20=EB=8C=80=ED=95=99=EA=B5=90=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=EA=B4=80=EB=A0=A8=20=ED=86=B5=ED=95=A9?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UniversityServiceTest.java | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java index bcb05f859..5b0df4785 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java @@ -2,13 +2,18 @@ import com.example.solidconnection.cache.manager.CacheManager; import com.example.solidconnection.custom.exception.CustomException; +import com.example.solidconnection.type.LanguageTestType; import com.example.solidconnection.university.dto.LanguageRequirementResponse; import com.example.solidconnection.university.dto.UniversityDetailResponse; +import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; +import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponses; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import java.util.List; + import static org.junit.jupiter.api.Assertions.assertThrows; import static com.example.solidconnection.custom.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; import static org.assertj.core.api.Assertions.assertThat; @@ -93,4 +98,104 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { // then assertThat(customException.getMessage()).isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); } + + @Test + void 전체_대학을_조회한다() { + // when + UniversityInfoForApplyPreviewResponses response = universityService.searchUniversity( + null, List.of(), null, null); + + // then + assertThat(response.universityInfoForApplyPreviewResponses()) + .containsExactlyInAnyOrder( + UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), + UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), + UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), + UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), + UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), + UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보), + UniversityInfoForApplyPreviewResponse.from(그라츠대학_지원_정보), + UniversityInfoForApplyPreviewResponse.from(그라츠공과대학_지원_정보), + UniversityInfoForApplyPreviewResponse.from(린츠_카톨릭대학_지원_정보), + UniversityInfoForApplyPreviewResponse.from(메이지대학_지원_정보) + ); + } + + @Test + void 대학_조회시_캐시가_적용된다() { + // given + String regionCode = 영미권.getCode(); + List keywords = List.of("괌"); + LanguageTestType testType = LanguageTestType.TOEFL_IBT; + String testScore = "70"; + String cacheKey = String.format("university:%s:%s:%s:%s", regionCode, keywords, testType, testScore); + + // when + UniversityInfoForApplyPreviewResponses firstResponse = + universityService.searchUniversity(regionCode, keywords, testType, testScore); + Object cachedValue = cacheManager.get(cacheKey); + UniversityInfoForApplyPreviewResponses secondResponse = + universityService.searchUniversity(regionCode, keywords, testType, testScore); + + // then + assertThat(firstResponse).isEqualTo(secondResponse); + assertThat(cachedValue).isEqualTo(firstResponse); + } + + @Test + void 지역으로_대학을_필터링한다() { + // when + UniversityInfoForApplyPreviewResponses response = universityService.searchUniversity( + 영미권.getCode(), List.of(), null, null); + + // then + assertThat(response.universityInfoForApplyPreviewResponses()) + .containsExactlyInAnyOrder( + UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), + UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), + UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), + UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보) + ); + } + + @Test + void 키워드로_대학을_필터링한다() { + // when + UniversityInfoForApplyPreviewResponses response = universityService.searchUniversity( + null, List.of("라", "일본"), null, null); + + // then + assertThat(response.universityInfoForApplyPreviewResponses()) + .containsExactlyInAnyOrder( + UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), + UniversityInfoForApplyPreviewResponse.from(그라츠대학_지원_정보), + UniversityInfoForApplyPreviewResponse.from(그라츠공과대학_지원_정보), + UniversityInfoForApplyPreviewResponse.from(메이지대학_지원_정보) + ); + } + + @Test + void 어학시험_조건으로_대학을_필터링한다() { + // when + UniversityInfoForApplyPreviewResponses response = universityService.searchUniversity( + null, List.of(), LanguageTestType.TOEFL_IBT, "70"); + + // then + assertThat(response.universityInfoForApplyPreviewResponses()) + .containsExactlyInAnyOrder( + UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), + UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보) + ); + } + + @Test + void 모든_조건으로_대학을_필터링한다() { + // when + UniversityInfoForApplyPreviewResponses response = universityService.searchUniversity( + "EUROPE", List.of(), LanguageTestType.TOEFL_IBT, "70"); + + // then + assertThat(response.universityInfoForApplyPreviewResponses()) + .containsExactly(UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보)); + } } From ae37f44772e3e0e11b87a3ff55887630458f14b1 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Sun, 12 Jan 2025 19:34:52 +0900 Subject: [PATCH 05/18] =?UTF-8?q?feat:=20=EB=8C=80=ED=95=99=EA=B5=90=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=ED=95=98=EA=B8=B0=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=ED=86=B5=ED=95=A9=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UniversityServiceTest.java | 102 +++++++++++++++++- 1 file changed, 98 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java index 5b0df4785..2f79b4f4f 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java @@ -2,11 +2,16 @@ import com.example.solidconnection.cache.manager.CacheManager; 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.type.Gender; import com.example.solidconnection.type.LanguageTestType; -import com.example.solidconnection.university.dto.LanguageRequirementResponse; -import com.example.solidconnection.university.dto.UniversityDetailResponse; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponses; +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.*; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -14,6 +19,9 @@ import java.util.List; +import static com.example.solidconnection.custom.exception.ErrorCode.USER_NOT_FOUND; +import static com.example.solidconnection.university.service.UniversityService.LIKE_CANCELED_MESSAGE; +import static com.example.solidconnection.university.service.UniversityService.LIKE_SUCCESS_MESSAGE; import static org.junit.jupiter.api.Assertions.assertThrows; import static com.example.solidconnection.custom.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; import static org.assertj.core.api.Assertions.assertThat; @@ -25,6 +33,12 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { @Autowired private UniversityService universityService; + @Autowired + private LikedUniversityRepository likedUniversityRepository; + + @Autowired + private SiteUserRepository siteUserRepository; + @Autowired private CacheManager cacheManager; @@ -198,4 +212,84 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { assertThat(response.universityInfoForApplyPreviewResponses()) .containsExactly(UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보)); } + + @Test + void 대학_좋아요를_등록한다() { + // given + SiteUser testUser = createSiteUser(); + + // when + LikeResultResponse response = universityService.likeUniversity( + testUser.getEmail(), 괌대학_A_지원_정보.getId()); + + // then + assertThat(response.result()).isEqualTo(LIKE_SUCCESS_MESSAGE); + assertThat(likedUniversityRepository.findBySiteUserAndUniversityInfoForApply( + testUser, 괌대학_A_지원_정보)).isPresent(); + } + + @Test + void 대학_좋아요를_취소한다() { + // given + SiteUser testUser = createSiteUser(); + saveLikedUniversity(testUser, 괌대학_A_지원_정보); + + // when + LikeResultResponse response = universityService.likeUniversity( + testUser.getEmail(), 괌대학_A_지원_정보.getId()); + + // then + assertThat(response.result()).isEqualTo(LIKE_CANCELED_MESSAGE); + assertThat(likedUniversityRepository.findBySiteUserAndUniversityInfoForApply( + testUser, 괌대학_A_지원_정보)).isEmpty(); + } + + @Test + void 존재하지_않는_유저가_좋아요_시도하면_예외를_반환한다() { + // given + String invalidEmail = "invalid@email.com"; + + // when + CustomException exception = assertThrows(CustomException.class, + () -> universityService.likeUniversity(invalidEmail, 괌대학_A_지원_정보.getId())); + + // then + assertThat(exception.getMessage()).isEqualTo(USER_NOT_FOUND.getMessage()); + } + + @Test + void 존재하지_않는_대학_좋아요_시도하면_예외를_반환한다() { + // given + SiteUser testUser = createSiteUser(); + Long invalidUniversityId = 9999L; + + // when + CustomException exception = assertThrows(CustomException.class, + () -> universityService.likeUniversity(testUser.getEmail(), invalidUniversityId)); + + // then + assertThat(exception.getMessage()) + .isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); + } + + private SiteUser createSiteUser() { + SiteUser siteUser = new SiteUser( + "test@example.com", + "nickname", + "profileImageUrl", + "1999-01-01", + PreparationStatus.CONSIDERING, + Role.MENTEE, + Gender.MALE + ); + return siteUserRepository.save(siteUser); + } + + private void saveLikedUniversity(SiteUser siteUser, UniversityInfoForApply universityInfoForApply) { + LikedUniversity likedUniversity = LikedUniversity.builder() + .siteUser(siteUser) + .universityInfoForApply(universityInfoForApply) + .build(); + likedUniversityRepository.save(likedUniversity); + } } From 40bae3decaea684b45a14f9f2380dee49accb1c6 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Sun, 12 Jan 2025 19:36:29 +0900 Subject: [PATCH 06/18] =?UTF-8?q?refactor:=20=EC=A1=B4=EC=9E=AC=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=8C=80=ED=95=99=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20?= =?UTF-8?q?id=20=EB=B3=80=EC=88=98=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../university/service/UniversityServiceTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java index 2f79b4f4f..6f107fa99 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java @@ -102,11 +102,11 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { @Test void 존재하지_않는_대학_상세정보_조회시_예외_응답을_반환한다() { // given - Long invalidId = 9999L; + Long invalidUniversityInfoForApplyId = 9999L; // when RuntimeException exception = assertThrows(RuntimeException.class, - () -> universityService.getUniversityDetail(invalidId)); + () -> universityService.getUniversityDetail(invalidUniversityInfoForApplyId)); CustomException customException = (CustomException) exception.getCause().getCause(); // then From 030c112c6ab7c5f9105d86e9c4fa1a98f272f098 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Sun, 12 Jan 2025 19:43:47 +0900 Subject: [PATCH 07/18] =?UTF-8?q?refactor:=20*=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EA=B5=AC=EC=B2=B4=EC=A0=81=EC=9D=B8=20import=20=EB=AC=B8?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UniversityServiceTest.java | 60 ++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java index 6f107fa99..3700f2c2b 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java @@ -11,7 +11,12 @@ 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.*; +import com.example.solidconnection.university.dto.UniversityDetailResponse; +import com.example.solidconnection.university.dto.IsLikeResponse; +import com.example.solidconnection.university.dto.LanguageRequirementResponse; +import com.example.solidconnection.university.dto.LikeResultResponse; +import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; +import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponses; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -272,6 +277,59 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { .isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); } + @Test + void 좋아요한_대학인지_확인한다() { + // given + SiteUser testUser = createSiteUser(); + saveLikedUniversity(testUser, 괌대학_A_지원_정보); + + // when + IsLikeResponse response = universityService.getIsLiked(testUser.getEmail(), 괌대학_A_지원_정보.getId()); + + // then + assertThat(response.isLike()).isTrue(); + } + + @Test + void 좋아요하지_않은_대학인지_확인한다() { + // given + SiteUser testUser = createSiteUser(); + + // when + IsLikeResponse response = universityService.getIsLiked(testUser.getEmail(), 괌대학_A_지원_정보.getId()); + + // then + assertThat(response.isLike()).isFalse(); + } + + @Test + void 존재하지_않는_유저의_좋아요_여부_조회시_예외를_반환한다() { + // given + String invalidEmail = "invalid@email.com"; + + // when + CustomException exception = assertThrows(CustomException.class, + () -> universityService.getIsLiked(invalidEmail, 괌대학_A_지원_정보.getId())); + + // then + assertThat(exception.getMessage()).isEqualTo(USER_NOT_FOUND.getMessage()); + } + + @Test + void 존재하지_않는_대학의_좋아요_여부_조회시_예외를_반환한다() { + // given + SiteUser testUser = createSiteUser(); + Long invalidUniversityId = 9999L; + + // when + CustomException exception = assertThrows(CustomException.class, + () -> universityService.getIsLiked(testUser.getEmail(), invalidUniversityId)); + + // then + assertThat(exception.getMessage()) + .isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); + } + private SiteUser createSiteUser() { SiteUser siteUser = new SiteUser( "test@example.com", From fd8fdc7adaab3b8ec8738e7179f7725e1aab6718 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Sun, 12 Jan 2025 20:02:09 +0900 Subject: [PATCH 08/18] =?UTF-8?q?feat:=20=EB=8C=80=ED=95=99=EA=B5=90=20?= =?UTF-8?q?=EC=B6=94=EC=B2=9C=20=EA=B4=80=EB=A0=A8=20=ED=86=B5=ED=95=A9?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UniversityRecommendServiceTest.java | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java new file mode 100644 index 000000000..4ec663fac --- /dev/null +++ b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java @@ -0,0 +1,168 @@ +package com.example.solidconnection.university.service; + +import com.example.solidconnection.custom.exception.CustomException; +import com.example.solidconnection.entity.InterestedCountry; +import com.example.solidconnection.entity.InterestedRegion; +import com.example.solidconnection.repositories.InterestedCountyRepository; +import com.example.solidconnection.repositories.InterestedRegionRepository; +import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import com.example.solidconnection.type.Gender; +import com.example.solidconnection.type.PreparationStatus; +import com.example.solidconnection.type.Role; +import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; +import com.example.solidconnection.university.dto.UniversityRecommendsResponse; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +import static com.example.solidconnection.custom.exception.ErrorCode.USER_NOT_FOUND; +import static com.example.solidconnection.university.service.UniversityRecommendService.RECOMMEND_UNIVERSITY_NUM; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + + +class UniversityRecommendServiceTest extends UniversityDataSetUpIntegrationTest { + + @Autowired + private UniversityRecommendService universityRecommendService; + + @Autowired + private SiteUserRepository siteUserRepository; + + @Autowired + private InterestedRegionRepository interestedRegionRepository; + + @Autowired + private InterestedCountyRepository interestedCountyRepository; + + @Autowired + private GeneralRecommendUniversities generalRecommendUniversities; + + + @BeforeEach + void setUp() { + generalRecommendUniversities.init(); + } + + @Test + void 관심_지역_설정한_사용자의_맞춤_추천_대학을_조회한다() { + // given + SiteUser testUser = createSiteUser(); + interestedRegionRepository.save(new InterestedRegion(testUser, 영미권)); + + // when + UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(testUser.getEmail()); + + // then + assertThat(response.recommendedUniversities()) + .hasSize(RECOMMEND_UNIVERSITY_NUM) + .containsAll(List.of( + UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), + UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), + UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), + UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보) + )); + } + + @Test + void 관심_국가_설정한_사용자의_맞춤_추천_대학을_조회한다() { + // given + SiteUser testUser = createSiteUser(); + interestedCountyRepository.save(new InterestedCountry(testUser, 덴마크)); + + // when + UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(testUser.getEmail()); + + // then + assertThat(response.recommendedUniversities()) + .hasSize(RECOMMEND_UNIVERSITY_NUM) + .containsAll(List.of( + UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), + UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보) + )); + } + + @Test + void 관심_지역과_국가_모두_설정한_사용자의_맞춤_추천_대학을_조회한다() { + // given + SiteUser testUser = createSiteUser(); + interestedRegionRepository.save(new InterestedRegion(testUser, 영미권)); + interestedCountyRepository.save(new InterestedCountry(testUser, 덴마크)); + + // when + UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(testUser.getEmail()); + + // then + assertThat(response.recommendedUniversities()) + .hasSize(RECOMMEND_UNIVERSITY_NUM) + .containsExactlyInAnyOrder( + UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), + UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), + UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), + UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), + UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), + UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보) + ); + } + + @Test + void 관심사_미설정_사용자는_일반_추천_대학을_조회한다() { + // given + SiteUser testUser = createSiteUser(); + + // when + UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(testUser.getEmail()); + + // then + assertThat(response.recommendedUniversities()) + .hasSize(RECOMMEND_UNIVERSITY_NUM) + .containsExactlyInAnyOrderElementsOf( + generalRecommendUniversities.getRecommendUniversities().stream() + .map(UniversityInfoForApplyPreviewResponse::from) + .toList() + ); + } + + @Test + void 존재하지_않는_사용자_조회시_예외를_반환한다() { + // given + String invalidEmail = "invalid@email.com"; + + // when & then + CustomException exception = assertThrows(CustomException.class, + () -> universityRecommendService.getPersonalRecommends(invalidEmail)); + + assertThat(exception.getMessage()).isEqualTo(USER_NOT_FOUND.getMessage()); + } + + @Test + void 일반_추천_대학을_조회한다() { + // when + UniversityRecommendsResponse response = universityRecommendService.getGeneralRecommends(); + + // then + assertThat(response.recommendedUniversities()) + .hasSize(RECOMMEND_UNIVERSITY_NUM) + .containsExactlyInAnyOrderElementsOf( + generalRecommendUniversities.getRecommendUniversities().stream() + .map(UniversityInfoForApplyPreviewResponse::from) + .toList() + ); + } + + private SiteUser createSiteUser() { + SiteUser siteUser = new SiteUser( + "test@example.com", + "nickname", + "profileImageUrl", + "1999-01-01", + PreparationStatus.CONSIDERING, + Role.MENTEE, + Gender.MALE + ); + return siteUserRepository.save(siteUser); + } +} From 3beac408af11606568a319d2990e5a1208477994 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Sun, 12 Jan 2025 20:14:16 +0900 Subject: [PATCH 09/18] =?UTF-8?q?refactor:=20=EB=8C=80=ED=95=99=EA=B5=90?= =?UTF-8?q?=20=EC=B6=94=EC=B2=9C=20=EC=84=9C=EB=B9=84=EC=8A=A4=EC=97=90=20?= =?UTF-8?q?DisplayName=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../university/service/UniversityRecommendServiceTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java index 4ec663fac..8f763e720 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java @@ -13,6 +13,7 @@ import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; import com.example.solidconnection.university.dto.UniversityRecommendsResponse; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; +@DisplayName("대학교 추천 서비스 테스트") class UniversityRecommendServiceTest extends UniversityDataSetUpIntegrationTest { @Autowired From d2cef6d47bb07cafeb59a6c814e9735f4d923c70 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Wed, 15 Jan 2025 12:46:35 +0900 Subject: [PATCH 10/18] =?UTF-8?q?chore:=20=EA=B0=9C=ED=96=89=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../university/service/UniversityRecommendServiceTest.java | 2 -- .../university/service/UniversityServiceTest.java | 5 ++--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java index 8f763e720..a09fad68b 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java @@ -24,7 +24,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; - @DisplayName("대학교 추천 서비스 테스트") class UniversityRecommendServiceTest extends UniversityDataSetUpIntegrationTest { @@ -43,7 +42,6 @@ class UniversityRecommendServiceTest extends UniversityDataSetUpIntegrationTest @Autowired private GeneralRecommendUniversities generalRecommendUniversities; - @BeforeEach void setUp() { generalRecommendUniversities.init(); diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java index 3700f2c2b..7201cce38 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java @@ -34,7 +34,6 @@ @DisplayName("대학교 서비스 테스트") class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { - @Autowired private UniversityService universityService; @@ -88,6 +87,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { () -> assertThat(response.englishCourseUrl()).isEqualTo(괌대학_A_지원_정보.getUniversity().getEnglishCourseUrl()) ); } + @Test void 대학_상세정보_조회시_캐시가_적용된다() { // given @@ -214,8 +214,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { "EUROPE", List.of(), LanguageTestType.TOEFL_IBT, "70"); // then - assertThat(response.universityInfoForApplyPreviewResponses()) - .containsExactly(UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보)); + assertThat(response.universityInfoForApplyPreviewResponses()).containsExactly(UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보)); } @Test From e28e2262e7a7335952a9796de0c4fe7cda625f39 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Wed, 15 Jan 2025 12:50:00 +0900 Subject: [PATCH 11/18] =?UTF-8?q?test:=20univseritySerivice=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=A1=B4=EC=9E=AC=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8A=94=20=EC=82=AC=EC=9A=A9=EC=9E=90=EC=97=90=20=EB=8C=80?= =?UTF-8?q?=ED=95=9C=20=EC=98=88=EC=99=B8=20=EA=B2=80=EC=A6=9D=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UniversityRecommendServiceTest.java | 15 ----------- .../service/UniversityServiceTest.java | 27 ------------------- 2 files changed, 42 deletions(-) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java index a09fad68b..1fee99033 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java @@ -1,6 +1,5 @@ package com.example.solidconnection.university.service; -import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.entity.InterestedCountry; import com.example.solidconnection.entity.InterestedRegion; import com.example.solidconnection.repositories.InterestedCountyRepository; @@ -19,10 +18,8 @@ import java.util.List; -import static com.example.solidconnection.custom.exception.ErrorCode.USER_NOT_FOUND; import static com.example.solidconnection.university.service.UniversityRecommendService.RECOMMEND_UNIVERSITY_NUM; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; @DisplayName("대학교 추천 서비스 테스트") class UniversityRecommendServiceTest extends UniversityDataSetUpIntegrationTest { @@ -126,18 +123,6 @@ void setUp() { ); } - @Test - void 존재하지_않는_사용자_조회시_예외를_반환한다() { - // given - String invalidEmail = "invalid@email.com"; - - // when & then - CustomException exception = assertThrows(CustomException.class, - () -> universityRecommendService.getPersonalRecommends(invalidEmail)); - - assertThat(exception.getMessage()).isEqualTo(USER_NOT_FOUND.getMessage()); - } - @Test void 일반_추천_대학을_조회한다() { // when diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java index 7201cce38..f1b25bd98 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java @@ -24,7 +24,6 @@ import java.util.List; -import static com.example.solidconnection.custom.exception.ErrorCode.USER_NOT_FOUND; import static com.example.solidconnection.university.service.UniversityService.LIKE_CANCELED_MESSAGE; import static com.example.solidconnection.university.service.UniversityService.LIKE_SUCCESS_MESSAGE; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -248,19 +247,6 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { testUser, 괌대학_A_지원_정보)).isEmpty(); } - @Test - void 존재하지_않는_유저가_좋아요_시도하면_예외를_반환한다() { - // given - String invalidEmail = "invalid@email.com"; - - // when - CustomException exception = assertThrows(CustomException.class, - () -> universityService.likeUniversity(invalidEmail, 괌대학_A_지원_정보.getId())); - - // then - assertThat(exception.getMessage()).isEqualTo(USER_NOT_FOUND.getMessage()); - } - @Test void 존재하지_않는_대학_좋아요_시도하면_예외를_반환한다() { // given @@ -301,19 +287,6 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { assertThat(response.isLike()).isFalse(); } - @Test - void 존재하지_않는_유저의_좋아요_여부_조회시_예외를_반환한다() { - // given - String invalidEmail = "invalid@email.com"; - - // when - CustomException exception = assertThrows(CustomException.class, - () -> universityService.getIsLiked(invalidEmail, 괌대학_A_지원_정보.getId())); - - // then - assertThat(exception.getMessage()).isEqualTo(USER_NOT_FOUND.getMessage()); - } - @Test void 존재하지_않는_대학의_좋아요_여부_조회시_예외를_반환한다() { // given From 4118d8b4d04737a0adb6112f6a051bfcca4e0c19 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:03:22 +0900 Subject: [PATCH 12/18] =?UTF-8?q?refactor:=20UniversityService=EB=A5=BC=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C/=EC=A2=8B=EC=95=84=EC=9A=94=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=EB=90=9C=20=EA=B8=B0=EB=8A=A5=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UniversityController.java | 14 +++-- ...ervice.java => UniversityLikeService.java} | 47 +-------------- .../service/UniversityQueryService.java | 59 +++++++++++++++++++ .../e2e/UniversityLikeTest.java | 4 +- .../service/UniversityServiceTest.java | 43 +++++++------- 5 files changed, 94 insertions(+), 73 deletions(-) rename src/main/java/com/example/solidconnection/university/service/{UniversityService.java => UniversityLikeService.java} (52%) create mode 100644 src/main/java/com/example/solidconnection/university/service/UniversityQueryService.java diff --git a/src/main/java/com/example/solidconnection/university/controller/UniversityController.java b/src/main/java/com/example/solidconnection/university/controller/UniversityController.java index 2bab9da1a..1acfcb931 100644 --- a/src/main/java/com/example/solidconnection/university/controller/UniversityController.java +++ b/src/main/java/com/example/solidconnection/university/controller/UniversityController.java @@ -7,8 +7,9 @@ import com.example.solidconnection.university.dto.UniversityDetailResponse; import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; import com.example.solidconnection.university.dto.UniversityRecommendsResponse; +import com.example.solidconnection.university.service.UniversityLikeService; +import com.example.solidconnection.university.service.UniversityQueryService; import com.example.solidconnection.university.service.UniversityRecommendService; -import com.example.solidconnection.university.service.UniversityService; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -26,7 +27,8 @@ @RestController public class UniversityController { - private final UniversityService universityService; + private final UniversityQueryService universityQueryService; + private final UniversityLikeService universityLikeService; private final UniversityRecommendService universityRecommendService; private final SiteUserService siteUserService; @@ -52,7 +54,7 @@ public ResponseEntity> getMyWishUniv public ResponseEntity getIsLiked( Principal principal, @PathVariable Long universityInfoForApplyId) { - IsLikeResponse isLiked = universityService.getIsLiked(principal.getName(), universityInfoForApplyId); + IsLikeResponse isLiked = universityLikeService.getIsLiked(principal.getName(), universityInfoForApplyId); return ResponseEntity.ok(isLiked); } @@ -60,7 +62,7 @@ public ResponseEntity getIsLiked( public ResponseEntity addWishUniversity( Principal principal, @PathVariable Long universityInfoForApplyId) { - LikeResultResponse likeResultResponse = universityService.likeUniversity(principal.getName(), universityInfoForApplyId); + LikeResultResponse likeResultResponse = universityLikeService.likeUniversity(principal.getName(), universityInfoForApplyId); return ResponseEntity .ok(likeResultResponse); } @@ -68,7 +70,7 @@ public ResponseEntity addWishUniversity( @GetMapping("/detail/{universityInfoForApplyId}") public ResponseEntity getUniversityDetails( @PathVariable Long universityInfoForApplyId) { - UniversityDetailResponse universityDetailResponse = universityService.getUniversityDetail(universityInfoForApplyId); + UniversityDetailResponse universityDetailResponse = universityQueryService.getUniversityDetail(universityInfoForApplyId); return ResponseEntity.ok(universityDetailResponse); } @@ -80,7 +82,7 @@ public ResponseEntity> searchUnivers @RequestParam(required = false, defaultValue = "") LanguageTestType testType, @RequestParam(required = false, defaultValue = "") String testScore) { List universityInfoForApplyPreviewResponse - = universityService.searchUniversity(region, keyword, testType, testScore).universityInfoForApplyPreviewResponses(); + = universityQueryService.searchUniversity(region, keyword, testType, testScore).universityInfoForApplyPreviewResponses(); return ResponseEntity.ok(universityInfoForApplyPreviewResponse); } } diff --git a/src/main/java/com/example/solidconnection/university/service/UniversityService.java b/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java similarity index 52% rename from src/main/java/com/example/solidconnection/university/service/UniversityService.java rename to src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java index 708374e96..fa390b9a0 100644 --- a/src/main/java/com/example/solidconnection/university/service/UniversityService.java +++ b/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java @@ -1,76 +1,33 @@ package com.example.solidconnection.university.service; -import com.example.solidconnection.cache.annotation.ThunderingHerdCaching; 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.type.LanguageTestType; import com.example.solidconnection.university.domain.LikedUniversity; -import com.example.solidconnection.university.domain.University; 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.dto.UniversityDetailResponse; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponses; +import com.example.solidconnection.university.dto.*; import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; -import com.example.solidconnection.university.repository.custom.UniversityFilterRepositoryImpl; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; import java.util.Optional; @RequiredArgsConstructor @Service -public class UniversityService { +public class UniversityLikeService { public static final String LIKE_SUCCESS_MESSAGE = "LIKE_SUCCESS"; public static final String LIKE_CANCELED_MESSAGE = "LIKE_CANCELED"; private final UniversityInfoForApplyRepository universityInfoForApplyRepository; private final LikedUniversityRepository likedUniversityRepository; - private final UniversityFilterRepositoryImpl universityFilterRepository; private final SiteUserRepository siteUserRepository; @Value("${university.term}") public String term; - /* - * 대학교 상세 정보를 불러온다. - * - 대학교(University) 정보와 대학 지원 정보(UniversityInfoForApply) 정보를 조합하여 반환한다. - * */ - @Transactional(readOnly = true) - @ThunderingHerdCaching(key = "university:{0}", cacheManager = "customCacheManager", ttlSec = 86400) - public UniversityDetailResponse getUniversityDetail(Long universityInfoForApplyId) { - UniversityInfoForApply universityInfoForApply - = universityInfoForApplyRepository.getUniversityInfoForApplyById(universityInfoForApplyId); - University university = universityInfoForApply.getUniversity(); - - return UniversityDetailResponse.of(university, universityInfoForApply); - } - - /* - * 대학교 검색 결과를 불러온다. - * - 권역, 키워드, 언어 시험 종류, 언어 시험 점수를 조건으로 검색하여 결과를 반환한다. - * - 권역은 영어 대문자로 받는다 e.g. ASIA - * - 키워드는 국가명 또는 대학명에 포함되는 것이 조건이다. - * - 언어 시험 점수는 합격 최소 점수보다 높은 것이 조건이다. - * */ - @Transactional(readOnly = true) - @ThunderingHerdCaching(key = "university:{0}:{1}:{2}:{3}", cacheManager = "customCacheManager", ttlSec = 86400) - public UniversityInfoForApplyPreviewResponses searchUniversity( - String regionCode, List keywords, LanguageTestType testType, String testScore) { - - return new UniversityInfoForApplyPreviewResponses(universityFilterRepository - .findByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm(regionCode, keywords, testType, testScore, term) - .stream() - .map(UniversityInfoForApplyPreviewResponse::from) - .toList()); - } - /* * 대학교를 '좋아요' 한다. * - 이미 좋아요가 눌러져있다면, 좋아요를 취소한다. diff --git a/src/main/java/com/example/solidconnection/university/service/UniversityQueryService.java b/src/main/java/com/example/solidconnection/university/service/UniversityQueryService.java new file mode 100644 index 000000000..059fa0f66 --- /dev/null +++ b/src/main/java/com/example/solidconnection/university/service/UniversityQueryService.java @@ -0,0 +1,59 @@ +package com.example.solidconnection.university.service; + +import com.example.solidconnection.cache.annotation.ThunderingHerdCaching; +import com.example.solidconnection.type.LanguageTestType; +import com.example.solidconnection.university.domain.University; +import com.example.solidconnection.university.domain.UniversityInfoForApply; +import com.example.solidconnection.university.dto.*; +import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; +import com.example.solidconnection.university.repository.custom.UniversityFilterRepositoryImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@RequiredArgsConstructor +@Service +public class UniversityQueryService { + + private final UniversityInfoForApplyRepository universityInfoForApplyRepository; + private final UniversityFilterRepositoryImpl universityFilterRepository; + + @Value("${university.term}") + public String term; + + /* + * 대학교 상세 정보를 불러온다. + * - 대학교(University) 정보와 대학 지원 정보(UniversityInfoForApply) 정보를 조합하여 반환한다. + * */ + @Transactional(readOnly = true) + @ThunderingHerdCaching(key = "university:{0}", cacheManager = "customCacheManager", ttlSec = 86400) + public UniversityDetailResponse getUniversityDetail(Long universityInfoForApplyId) { + UniversityInfoForApply universityInfoForApply + = universityInfoForApplyRepository.getUniversityInfoForApplyById(universityInfoForApplyId); + University university = universityInfoForApply.getUniversity(); + + return UniversityDetailResponse.of(university, universityInfoForApply); + } + + /* + * 대학교 검색 결과를 불러온다. + * - 권역, 키워드, 언어 시험 종류, 언어 시험 점수를 조건으로 검색하여 결과를 반환한다. + * - 권역은 영어 대문자로 받는다 e.g. ASIA + * - 키워드는 국가명 또는 대학명에 포함되는 것이 조건이다. + * - 언어 시험 점수는 합격 최소 점수보다 높은 것이 조건이다. + * */ + @Transactional(readOnly = true) + @ThunderingHerdCaching(key = "university:{0}:{1}:{2}:{3}", cacheManager = "customCacheManager", ttlSec = 86400) + public UniversityInfoForApplyPreviewResponses searchUniversity( + String regionCode, List keywords, LanguageTestType testType, String testScore) { + + return new UniversityInfoForApplyPreviewResponses(universityFilterRepository + .findByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm(regionCode, keywords, testType, testScore, term) + .stream() + .map(UniversityInfoForApplyPreviewResponse::from) + .toList()); + } +} diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java index 37f922e4e..fb78cdffb 100644 --- a/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java +++ b/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java @@ -25,8 +25,8 @@ import static com.example.solidconnection.e2e.DynamicFixture.createLikedUniversity; import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; import static com.example.solidconnection.e2e.DynamicFixture.createUniversityForApply; -import static com.example.solidconnection.university.service.UniversityService.LIKE_CANCELED_MESSAGE; -import static com.example.solidconnection.university.service.UniversityService.LIKE_SUCCESS_MESSAGE; +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.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java index f1b25bd98..d7e9ba090 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java @@ -24,8 +24,8 @@ import java.util.List; -import static com.example.solidconnection.university.service.UniversityService.LIKE_CANCELED_MESSAGE; -import static com.example.solidconnection.university.service.UniversityService.LIKE_SUCCESS_MESSAGE; +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.junit.jupiter.api.Assertions.assertThrows; import static com.example.solidconnection.custom.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; import static org.assertj.core.api.Assertions.assertThat; @@ -34,7 +34,10 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { @Autowired - private UniversityService universityService; + private UniversityQueryService universityQueryService; + + @Autowired + private UniversityLikeService universityLikeService; @Autowired private LikedUniversityRepository likedUniversityRepository; @@ -51,7 +54,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { Long universityId = 괌대학_A_지원_정보.getId(); // when - UniversityDetailResponse response = universityService.getUniversityDetail(universityId); + UniversityDetailResponse response = universityQueryService.getUniversityDetail(universityId); // then Assertions.assertAll( @@ -94,9 +97,9 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { String cacheKey = "university:" + 괌대학_A_지원_정보.getId(); // when - UniversityDetailResponse dbResponse = universityService.getUniversityDetail(universityId); + UniversityDetailResponse dbResponse = universityQueryService.getUniversityDetail(universityId); Object cachedValue = cacheManager.get(cacheKey); - UniversityDetailResponse cacheResponse = universityService.getUniversityDetail(universityId); + UniversityDetailResponse cacheResponse = universityQueryService.getUniversityDetail(universityId); // then(정말 한 번만 호출하는지 검증하는 로직이 필요한데 아직 구현이 안되었습니다.) assertThat(dbResponse).isEqualTo(cacheResponse); @@ -110,7 +113,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { // when RuntimeException exception = assertThrows(RuntimeException.class, - () -> universityService.getUniversityDetail(invalidUniversityInfoForApplyId)); + () -> universityQueryService.getUniversityDetail(invalidUniversityInfoForApplyId)); CustomException customException = (CustomException) exception.getCause().getCause(); // then @@ -120,7 +123,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { @Test void 전체_대학을_조회한다() { // when - UniversityInfoForApplyPreviewResponses response = universityService.searchUniversity( + UniversityInfoForApplyPreviewResponses response = universityQueryService.searchUniversity( null, List.of(), null, null); // then @@ -150,10 +153,10 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { // when UniversityInfoForApplyPreviewResponses firstResponse = - universityService.searchUniversity(regionCode, keywords, testType, testScore); + universityQueryService.searchUniversity(regionCode, keywords, testType, testScore); Object cachedValue = cacheManager.get(cacheKey); UniversityInfoForApplyPreviewResponses secondResponse = - universityService.searchUniversity(regionCode, keywords, testType, testScore); + universityQueryService.searchUniversity(regionCode, keywords, testType, testScore); // then assertThat(firstResponse).isEqualTo(secondResponse); @@ -163,7 +166,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { @Test void 지역으로_대학을_필터링한다() { // when - UniversityInfoForApplyPreviewResponses response = universityService.searchUniversity( + UniversityInfoForApplyPreviewResponses response = universityQueryService.searchUniversity( 영미권.getCode(), List.of(), null, null); // then @@ -179,7 +182,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { @Test void 키워드로_대학을_필터링한다() { // when - UniversityInfoForApplyPreviewResponses response = universityService.searchUniversity( + UniversityInfoForApplyPreviewResponses response = universityQueryService.searchUniversity( null, List.of("라", "일본"), null, null); // then @@ -195,7 +198,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { @Test void 어학시험_조건으로_대학을_필터링한다() { // when - UniversityInfoForApplyPreviewResponses response = universityService.searchUniversity( + UniversityInfoForApplyPreviewResponses response = universityQueryService.searchUniversity( null, List.of(), LanguageTestType.TOEFL_IBT, "70"); // then @@ -209,7 +212,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { @Test void 모든_조건으로_대학을_필터링한다() { // when - UniversityInfoForApplyPreviewResponses response = universityService.searchUniversity( + UniversityInfoForApplyPreviewResponses response = universityQueryService.searchUniversity( "EUROPE", List.of(), LanguageTestType.TOEFL_IBT, "70"); // then @@ -222,7 +225,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { SiteUser testUser = createSiteUser(); // when - LikeResultResponse response = universityService.likeUniversity( + LikeResultResponse response = universityLikeService.likeUniversity( testUser.getEmail(), 괌대학_A_지원_정보.getId()); // then @@ -238,7 +241,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { saveLikedUniversity(testUser, 괌대학_A_지원_정보); // when - LikeResultResponse response = universityService.likeUniversity( + LikeResultResponse response = universityLikeService.likeUniversity( testUser.getEmail(), 괌대학_A_지원_정보.getId()); // then @@ -255,7 +258,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { // when CustomException exception = assertThrows(CustomException.class, - () -> universityService.likeUniversity(testUser.getEmail(), invalidUniversityId)); + () -> universityLikeService.likeUniversity(testUser.getEmail(), invalidUniversityId)); // then assertThat(exception.getMessage()) @@ -269,7 +272,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { saveLikedUniversity(testUser, 괌대학_A_지원_정보); // when - IsLikeResponse response = universityService.getIsLiked(testUser.getEmail(), 괌대학_A_지원_정보.getId()); + IsLikeResponse response = universityLikeService.getIsLiked(testUser.getEmail(), 괌대학_A_지원_정보.getId()); // then assertThat(response.isLike()).isTrue(); @@ -281,7 +284,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { SiteUser testUser = createSiteUser(); // when - IsLikeResponse response = universityService.getIsLiked(testUser.getEmail(), 괌대학_A_지원_정보.getId()); + IsLikeResponse response = universityLikeService.getIsLiked(testUser.getEmail(), 괌대학_A_지원_정보.getId()); // then assertThat(response.isLike()).isFalse(); @@ -295,7 +298,7 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { // when CustomException exception = assertThrows(CustomException.class, - () -> universityService.getIsLiked(testUser.getEmail(), invalidUniversityId)); + () -> universityLikeService.getIsLiked(testUser.getEmail(), invalidUniversityId)); // then assertThat(exception.getMessage()) From e2a835560ea9f87b423159a909a21742e14f6e58 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:08:23 +0900 Subject: [PATCH 13/18] =?UTF-8?q?test:=20=EC=A1=B0=ED=9A=8C=20=EB=B0=8F=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EA=B8=B0=EB=8A=A5=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UniversityLikeServiceTest.java | 141 ++++++++++++++++++ ...t.java => UniversityQueryServiceTest.java} | 132 +--------------- 2 files changed, 143 insertions(+), 130 deletions(-) create mode 100644 src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java rename src/test/java/com/example/solidconnection/university/service/{UniversityServiceTest.java => UniversityQueryServiceTest.java} (69%) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java new file mode 100644 index 000000000..1f7ab3bd0 --- /dev/null +++ b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java @@ -0,0 +1,141 @@ +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.type.Gender; +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.*; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +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.junit.jupiter.api.Assertions.assertThrows; + +@DisplayName("대학교 좋아요 서비스 테스트") +class UniversityLikeServiceTest extends UniversityDataSetUpIntegrationTest { + + @Autowired + private UniversityLikeService universityLikeService; + + @Autowired + private LikedUniversityRepository likedUniversityRepository; + + @Autowired + private SiteUserRepository siteUserRepository; + + @Test + void 대학_좋아요를_등록한다() { + // given + SiteUser testUser = createSiteUser(); + + // when + LikeResultResponse response = universityLikeService.likeUniversity( + testUser.getEmail(), 괌대학_A_지원_정보.getId()); + + // then + assertThat(response.result()).isEqualTo(LIKE_SUCCESS_MESSAGE); + assertThat(likedUniversityRepository.findBySiteUserAndUniversityInfoForApply( + testUser, 괌대학_A_지원_정보)).isPresent(); + } + + @Test + void 대학_좋아요를_취소한다() { + // given + SiteUser testUser = createSiteUser(); + saveLikedUniversity(testUser, 괌대학_A_지원_정보); + + // when + LikeResultResponse response = universityLikeService.likeUniversity( + testUser.getEmail(), 괌대학_A_지원_정보.getId()); + + // then + assertThat(response.result()).isEqualTo(LIKE_CANCELED_MESSAGE); + assertThat(likedUniversityRepository.findBySiteUserAndUniversityInfoForApply( + testUser, 괌대학_A_지원_정보)).isEmpty(); + } + + @Test + void 존재하지_않는_대학_좋아요_시도하면_예외를_반환한다() { + // given + SiteUser testUser = createSiteUser(); + Long invalidUniversityId = 9999L; + + // when + CustomException exception = assertThrows(CustomException.class, + () -> universityLikeService.likeUniversity(testUser.getEmail(), invalidUniversityId)); + + // then + assertThat(exception.getMessage()) + .isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); + } + + @Test + void 좋아요한_대학인지_확인한다() { + // given + SiteUser testUser = createSiteUser(); + saveLikedUniversity(testUser, 괌대학_A_지원_정보); + + // when + IsLikeResponse response = universityLikeService.getIsLiked(testUser.getEmail(), 괌대학_A_지원_정보.getId()); + + // then + assertThat(response.isLike()).isTrue(); + } + + @Test + void 좋아요하지_않은_대학인지_확인한다() { + // given + SiteUser testUser = createSiteUser(); + + // when + IsLikeResponse response = universityLikeService.getIsLiked(testUser.getEmail(), 괌대학_A_지원_정보.getId()); + + // then + assertThat(response.isLike()).isFalse(); + } + + @Test + void 존재하지_않는_대학의_좋아요_여부_조회시_예외를_반환한다() { + // given + SiteUser testUser = createSiteUser(); + Long invalidUniversityId = 9999L; + + // when + CustomException exception = assertThrows(CustomException.class, + () -> universityLikeService.getIsLiked(testUser.getEmail(), invalidUniversityId)); + + // then + assertThat(exception.getMessage()) + .isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); + } + + private SiteUser createSiteUser() { + SiteUser siteUser = new SiteUser( + "test@example.com", + "nickname", + "profileImageUrl", + "1999-01-01", + PreparationStatus.CONSIDERING, + Role.MENTEE, + Gender.MALE + ); + return siteUserRepository.save(siteUser); + } + + private void saveLikedUniversity(SiteUser siteUser, UniversityInfoForApply universityInfoForApply) { + LikedUniversity likedUniversity = LikedUniversity.builder() + .siteUser(siteUser) + .universityInfoForApply(universityInfoForApply) + .build(); + likedUniversityRepository.save(likedUniversity); + } +} diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java similarity index 69% rename from src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java rename to src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java index d7e9ba090..0bd8a1ac5 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java @@ -2,19 +2,9 @@ import com.example.solidconnection.cache.manager.CacheManager; 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.type.Gender; import com.example.solidconnection.type.LanguageTestType; -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.UniversityDetailResponse; -import com.example.solidconnection.university.dto.IsLikeResponse; import com.example.solidconnection.university.dto.LanguageRequirementResponse; -import com.example.solidconnection.university.dto.LikeResultResponse; import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponses; import org.junit.jupiter.api.Assertions; @@ -24,27 +14,16 @@ import java.util.List; -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.junit.jupiter.api.Assertions.assertThrows; import static com.example.solidconnection.custom.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; import static org.assertj.core.api.Assertions.assertThat; -@DisplayName("대학교 서비스 테스트") -class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { +@DisplayName("대학교 조회 서비스 테스트") +class UniversityQueryServiceTest extends UniversityDataSetUpIntegrationTest { @Autowired private UniversityQueryService universityQueryService; - @Autowired - private UniversityLikeService universityLikeService; - - @Autowired - private LikedUniversityRepository likedUniversityRepository; - - @Autowired - private SiteUserRepository siteUserRepository; - @Autowired private CacheManager cacheManager; @@ -218,111 +197,4 @@ class UniversityServiceTest extends UniversityDataSetUpIntegrationTest { // then assertThat(response.universityInfoForApplyPreviewResponses()).containsExactly(UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보)); } - - @Test - void 대학_좋아요를_등록한다() { - // given - SiteUser testUser = createSiteUser(); - - // when - LikeResultResponse response = universityLikeService.likeUniversity( - testUser.getEmail(), 괌대학_A_지원_정보.getId()); - - // then - assertThat(response.result()).isEqualTo(LIKE_SUCCESS_MESSAGE); - assertThat(likedUniversityRepository.findBySiteUserAndUniversityInfoForApply( - testUser, 괌대학_A_지원_정보)).isPresent(); - } - - @Test - void 대학_좋아요를_취소한다() { - // given - SiteUser testUser = createSiteUser(); - saveLikedUniversity(testUser, 괌대학_A_지원_정보); - - // when - LikeResultResponse response = universityLikeService.likeUniversity( - testUser.getEmail(), 괌대학_A_지원_정보.getId()); - - // then - assertThat(response.result()).isEqualTo(LIKE_CANCELED_MESSAGE); - assertThat(likedUniversityRepository.findBySiteUserAndUniversityInfoForApply( - testUser, 괌대학_A_지원_정보)).isEmpty(); - } - - @Test - void 존재하지_않는_대학_좋아요_시도하면_예외를_반환한다() { - // given - SiteUser testUser = createSiteUser(); - Long invalidUniversityId = 9999L; - - // when - CustomException exception = assertThrows(CustomException.class, - () -> universityLikeService.likeUniversity(testUser.getEmail(), invalidUniversityId)); - - // then - assertThat(exception.getMessage()) - .isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); - } - - @Test - void 좋아요한_대학인지_확인한다() { - // given - SiteUser testUser = createSiteUser(); - saveLikedUniversity(testUser, 괌대학_A_지원_정보); - - // when - IsLikeResponse response = universityLikeService.getIsLiked(testUser.getEmail(), 괌대학_A_지원_정보.getId()); - - // then - assertThat(response.isLike()).isTrue(); - } - - @Test - void 좋아요하지_않은_대학인지_확인한다() { - // given - SiteUser testUser = createSiteUser(); - - // when - IsLikeResponse response = universityLikeService.getIsLiked(testUser.getEmail(), 괌대학_A_지원_정보.getId()); - - // then - assertThat(response.isLike()).isFalse(); - } - - @Test - void 존재하지_않는_대학의_좋아요_여부_조회시_예외를_반환한다() { - // given - SiteUser testUser = createSiteUser(); - Long invalidUniversityId = 9999L; - - // when - CustomException exception = assertThrows(CustomException.class, - () -> universityLikeService.getIsLiked(testUser.getEmail(), invalidUniversityId)); - - // then - assertThat(exception.getMessage()) - .isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); - } - - private SiteUser createSiteUser() { - SiteUser siteUser = new SiteUser( - "test@example.com", - "nickname", - "profileImageUrl", - "1999-01-01", - PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE - ); - return siteUserRepository.save(siteUser); - } - - private void saveLikedUniversity(SiteUser siteUser, UniversityInfoForApply universityInfoForApply) { - LikedUniversity likedUniversity = LikedUniversity.builder() - .siteUser(siteUser) - .universityInfoForApply(universityInfoForApply) - .build(); - likedUniversityRepository.save(likedUniversity); - } } From 4c5bd9d17c8c93de67543fbaef370b0c2d349a83 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:23:49 +0900 Subject: [PATCH 14/18] =?UTF-8?q?test:=20=EB=8C=80=ED=95=99=EA=B5=90=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=BA=90=EC=8B=9C=20=EC=A0=81=EC=9A=A9=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CacheManager를 직접 검증하는 방식에서 SpyBean을 사용한 레포지토리 호출 횟수 검증으로 변경 --- .../service/UniversityQueryServiceTest.java | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java index 0bd8a1ac5..ebacd3a27 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java @@ -1,22 +1,26 @@ package com.example.solidconnection.university.service; -import com.example.solidconnection.cache.manager.CacheManager; import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.type.LanguageTestType; import com.example.solidconnection.university.dto.UniversityDetailResponse; import com.example.solidconnection.university.dto.LanguageRequirementResponse; import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponses; +import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; +import com.example.solidconnection.university.repository.custom.UniversityFilterRepository; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.SpyBean; import java.util.List; import static org.junit.jupiter.api.Assertions.assertThrows; import static com.example.solidconnection.custom.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.times; @DisplayName("대학교 조회 서비스 테스트") class UniversityQueryServiceTest extends UniversityDataSetUpIntegrationTest { @@ -24,8 +28,11 @@ class UniversityQueryServiceTest extends UniversityDataSetUpIntegrationTest { @Autowired private UniversityQueryService universityQueryService; - @Autowired - private CacheManager cacheManager; + @SpyBean + private UniversityFilterRepository universityFilterRepository; + + @SpyBean + private UniversityInfoForApplyRepository universityInfoForApplyRepository; @Test void 대학_상세정보를_정상_조회한다() { @@ -73,16 +80,14 @@ class UniversityQueryServiceTest extends UniversityDataSetUpIntegrationTest { void 대학_상세정보_조회시_캐시가_적용된다() { // given Long universityId = 괌대학_A_지원_정보.getId(); - String cacheKey = "university:" + 괌대학_A_지원_정보.getId(); // when - UniversityDetailResponse dbResponse = universityQueryService.getUniversityDetail(universityId); - Object cachedValue = cacheManager.get(cacheKey); - UniversityDetailResponse cacheResponse = universityQueryService.getUniversityDetail(universityId); + UniversityDetailResponse firstResponse = universityQueryService.getUniversityDetail(universityId); + UniversityDetailResponse secondResponse = universityQueryService.getUniversityDetail(universityId); - // then(정말 한 번만 호출하는지 검증하는 로직이 필요한데 아직 구현이 안되었습니다.) - assertThat(dbResponse).isEqualTo(cacheResponse); - assertThat(cachedValue).isEqualTo(dbResponse); + // then + assertThat(firstResponse).isEqualTo(secondResponse); + verify(universityInfoForApplyRepository, times(1)).getUniversityInfoForApplyById(universityId); } @Test @@ -128,18 +133,19 @@ class UniversityQueryServiceTest extends UniversityDataSetUpIntegrationTest { List keywords = List.of("괌"); LanguageTestType testType = LanguageTestType.TOEFL_IBT; String testScore = "70"; - String cacheKey = String.format("university:%s:%s:%s:%s", regionCode, keywords, testType, testScore); + String term = "2024-1"; // when UniversityInfoForApplyPreviewResponses firstResponse = universityQueryService.searchUniversity(regionCode, keywords, testType, testScore); - Object cachedValue = cacheManager.get(cacheKey); UniversityInfoForApplyPreviewResponses secondResponse = universityQueryService.searchUniversity(regionCode, keywords, testType, testScore); // then assertThat(firstResponse).isEqualTo(secondResponse); - assertThat(cachedValue).isEqualTo(firstResponse); + verify(universityFilterRepository, times(1)) + .findByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm( + regionCode, keywords, testType, testScore, term); } @Test From c53f49a317fa2afbbfb96a1fc58f427ad15cf812 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:49:49 +0900 Subject: [PATCH 15/18] =?UTF-8?q?test:=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EA=B2=80=EC=A6=9D=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=ED=95=9C=EC=A4=84=EB=A1=9C=20=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UniversityLikeServiceTest.java | 24 +++++++------------ .../service/UniversityQueryServiceTest.java | 15 ++++++------ 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java index 1f7ab3bd0..23a2290bd 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java @@ -18,7 +18,7 @@ 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.junit.jupiter.api.Assertions.assertThrows; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode; @DisplayName("대학교 좋아요 서비스 테스트") class UniversityLikeServiceTest extends UniversityDataSetUpIntegrationTest { @@ -69,13 +69,10 @@ class UniversityLikeServiceTest extends UniversityDataSetUpIntegrationTest { SiteUser testUser = createSiteUser(); Long invalidUniversityId = 9999L; - // when - CustomException exception = assertThrows(CustomException.class, - () -> universityLikeService.likeUniversity(testUser.getEmail(), invalidUniversityId)); - - // then - assertThat(exception.getMessage()) - .isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); + // when & then + assertThatCode(() -> universityLikeService.likeUniversity(testUser.getEmail(), invalidUniversityId)) + .isInstanceOf(CustomException.class) + .hasMessage(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); } @Test @@ -109,13 +106,10 @@ class UniversityLikeServiceTest extends UniversityDataSetUpIntegrationTest { SiteUser testUser = createSiteUser(); Long invalidUniversityId = 9999L; - // when - CustomException exception = assertThrows(CustomException.class, - () -> universityLikeService.getIsLiked(testUser.getEmail(), invalidUniversityId)); - - // then - assertThat(exception.getMessage()) - .isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); + // when & then + assertThatCode(() -> universityLikeService.getIsLiked(testUser.getEmail(), invalidUniversityId)) + .isInstanceOf(CustomException.class) + .hasMessage(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); } private SiteUser createSiteUser() { diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java index ebacd3a27..1a26cbeb9 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java @@ -16,7 +16,7 @@ import java.util.List; -import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; import static com.example.solidconnection.custom.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; @@ -95,13 +95,12 @@ class UniversityQueryServiceTest extends UniversityDataSetUpIntegrationTest { // given Long invalidUniversityInfoForApplyId = 9999L; - // when - RuntimeException exception = assertThrows(RuntimeException.class, - () -> universityQueryService.getUniversityDetail(invalidUniversityInfoForApplyId)); - CustomException customException = (CustomException) exception.getCause().getCause(); - - // then - assertThat(customException.getMessage()).isEqualTo(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); + // when & then + assertThatExceptionOfType(RuntimeException.class) + .isThrownBy(() -> universityQueryService.getUniversityDetail(invalidUniversityInfoForApplyId)) + .havingRootCause() + .isInstanceOf(CustomException.class) + .withMessage(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); } @Test From f6f793252788d0c725a2569416ef32b73fbff44b Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:50:49 +0900 Subject: [PATCH 16/18] =?UTF-8?q?refactor:=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20=EC=9D=91=EB=8B=B5=20import=20*?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EA=B5=AC=EC=B2=B4=EC=A0=81=EC=9D=B8=20imp?= =?UTF-8?q?ort=20=EB=AC=B8=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../university/service/UniversityLikeServiceTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java index 23a2290bd..50adf6839 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java @@ -9,7 +9,8 @@ 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.*; +import com.example.solidconnection.university.dto.IsLikeResponse; +import com.example.solidconnection.university.dto.LikeResultResponse; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; From d2f0a6f3530b6b3d1280bdd13a980b34bbe1e24e Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Fri, 17 Jan 2025 11:42:19 +0900 Subject: [PATCH 17/18] =?UTF-8?q?refactor:=20=EB=8C=80=ED=95=99=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=84=9C=EB=B9=84=EC=8A=A4=20dto=20*?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EA=B5=AC=EC=B2=B4=EC=A0=81=EC=9D=B8=20imp?= =?UTF-8?q?ort=20=EB=AC=B8=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../university/service/UniversityLikeService.java | 3 ++- .../university/service/UniversityQueryService.java | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java b/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java index fa390b9a0..4b15e5b8d 100644 --- a/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java +++ b/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java @@ -5,7 +5,8 @@ import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.university.domain.LikedUniversity; import com.example.solidconnection.university.domain.UniversityInfoForApply; -import com.example.solidconnection.university.dto.*; +import com.example.solidconnection.university.dto.IsLikeResponse; +import com.example.solidconnection.university.dto.LikeResultResponse; import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; diff --git a/src/main/java/com/example/solidconnection/university/service/UniversityQueryService.java b/src/main/java/com/example/solidconnection/university/service/UniversityQueryService.java index 059fa0f66..f93f3ffae 100644 --- a/src/main/java/com/example/solidconnection/university/service/UniversityQueryService.java +++ b/src/main/java/com/example/solidconnection/university/service/UniversityQueryService.java @@ -4,7 +4,9 @@ import com.example.solidconnection.type.LanguageTestType; import com.example.solidconnection.university.domain.University; import com.example.solidconnection.university.domain.UniversityInfoForApply; -import com.example.solidconnection.university.dto.*; +import com.example.solidconnection.university.dto.UniversityDetailResponse; +import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; +import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponses; import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; import com.example.solidconnection.university.repository.custom.UniversityFilterRepositoryImpl; import lombok.RequiredArgsConstructor; From ca054272e2820fa98ebbef6c09d0fadeb9214d05 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Fri, 17 Jan 2025 13:03:01 +0900 Subject: [PATCH 18/18] =?UTF-8?q?refactor:=20BDD=20Mockito=20=ED=98=95?= =?UTF-8?q?=EC=8B=9D=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../university/service/UniversityQueryServiceTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java index 1a26cbeb9..54c235452 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java @@ -19,7 +19,7 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; import static com.example.solidconnection.custom.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.verify; +import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.times; @DisplayName("대학교 조회 서비스 테스트") @@ -87,7 +87,7 @@ class UniversityQueryServiceTest extends UniversityDataSetUpIntegrationTest { // then assertThat(firstResponse).isEqualTo(secondResponse); - verify(universityInfoForApplyRepository, times(1)).getUniversityInfoForApplyById(universityId); + then(universityInfoForApplyRepository).should(times(1)).getUniversityInfoForApplyById(universityId); } @Test @@ -142,7 +142,7 @@ class UniversityQueryServiceTest extends UniversityDataSetUpIntegrationTest { // then assertThat(firstResponse).isEqualTo(secondResponse); - verify(universityFilterRepository, times(1)) + then(universityFilterRepository).should(times(1)) .findByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm( regionCode, keywords, testType, testScore, term); }