diff --git a/build.gradle b/build.gradle index a9c8edbbf..b7af891fa 100644 --- a/build.gradle +++ b/build.gradle @@ -49,7 +49,6 @@ dependencies {//todo: 안쓰는 의존성이나 deprecated된 의존성 제거 // Test testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.mockito:mockito-core:3.3.3' - testImplementation 'io.rest-assured:rest-assured:5.4.0' // Testcontainers testImplementation 'org.testcontainers:testcontainers' diff --git a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java b/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java deleted file mode 100644 index 03d130542..000000000 --- a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java +++ /dev/null @@ -1,282 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.application.domain.Application; -import com.example.solidconnection.application.domain.Gpa; -import com.example.solidconnection.application.domain.LanguageTest; -import com.example.solidconnection.application.dto.ApplicantResponse; -import com.example.solidconnection.application.dto.ApplicationsResponse; -import com.example.solidconnection.application.dto.UniversityApplicantsResponse; -import com.example.solidconnection.application.repository.ApplicationRepository; -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.type.VerifyStatus; -import io.restassured.RestAssured; -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; -import org.springframework.beans.factory.annotation.Value; - -import java.util.List; - -import static com.example.solidconnection.e2e.DynamicFixture.createDummyGpa; -import static com.example.solidconnection.e2e.DynamicFixture.createDummyLanguageTest; -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static org.assertj.core.api.Assertions.assertThat; - -@DisplayName("지원자 조회 테스트") -class ApplicantsQueryTest extends UniversityDataSetUpEndToEndTest { - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private ApplicationRepository applicationRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - private String accessToken; - private String adminAccessToken; - private String user6AccessToken; - private Application 나의_지원정보; - private Application 사용자1_지원정보; - private Application 사용자2_지원정보; - private Application 사용자3_지원정보; - private Application 사용자4_이전학기_지원정보; - private Application 사용자5_관리자_지원정보; - private Application 사용자6_지원정보; - - @Value("${university.term}") - private String term; - private String beforeTerm = "1988-1"; - - @BeforeEach - public void setUpUserAndToken() { - // setUp - 사용자 정보 저장 - SiteUser 나 = siteUserRepository.save(createSiteUserByEmail("my-email")); - SiteUser 사용자1 = siteUserRepository.save(createSiteUserByEmail("email1")); - SiteUser 사용자2 = siteUserRepository.save(createSiteUserByEmail("email2")); - SiteUser 사용자3 = siteUserRepository.save(createSiteUserByEmail("email3")); - SiteUser 사용자4_이전학기_지원자 = siteUserRepository.save(createSiteUserByEmail("email4")); - SiteUser 사용자5_관리자 = siteUserRepository.save(createSiteUserByEmail("email5")); - SiteUser 사용자6 = siteUserRepository.save(createSiteUserByEmail("email6")); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(나); - authTokenProvider.generateAndSaveRefreshToken(나); - - adminAccessToken = authTokenProvider.generateAccessToken(사용자5_관리자); - authTokenProvider.generateAndSaveRefreshToken(사용자5_관리자); - - user6AccessToken = authTokenProvider.generateAccessToken(사용자6); - authTokenProvider.generateAndSaveRefreshToken(사용자6); - - // setUp - 지원 정보 저장 - Gpa gpa = createDummyGpa(); - LanguageTest languageTest = createDummyLanguageTest(); - 나의_지원정보 = new Application(나, gpa, languageTest, term); - 사용자1_지원정보 = new Application(사용자1, gpa, languageTest, term); - 사용자2_지원정보 = new Application(사용자2, gpa, languageTest, term); - 사용자3_지원정보 = new Application(사용자3, gpa, languageTest, term); - 사용자4_이전학기_지원정보 = new Application(사용자4_이전학기_지원자, gpa, languageTest, beforeTerm); - 사용자5_관리자_지원정보 = new Application(사용자5_관리자, gpa, languageTest, term); - 사용자6_지원정보 = new Application(사용자6, gpa, languageTest, term); - - 나의_지원정보.updateUniversityChoice(괌대학_B_지원_정보, 괌대학_A_지원_정보, 린츠_카톨릭대학_지원_정보, "0"); - 사용자1_지원정보.updateUniversityChoice(괌대학_A_지원_정보, 괌대학_B_지원_정보, 그라츠공과대학_지원_정보, "1"); - 사용자2_지원정보.updateUniversityChoice(메이지대학_지원_정보, 그라츠대학_지원_정보, 서던덴마크대학교_지원_정보, "2"); - 사용자3_지원정보.updateUniversityChoice(네바다주립대학_라스베이거스_지원_정보, 그라츠공과대학_지원_정보, 메이지대학_지원_정보, "3"); - 사용자4_이전학기_지원정보.updateUniversityChoice(네바다주립대학_라스베이거스_지원_정보, 그라츠공과대학_지원_정보, 메이지대학_지원_정보, "4"); - 사용자6_지원정보.updateUniversityChoice(코펜하겐IT대학_지원_정보, null, null, "6"); - 나의_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자1_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자2_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자3_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자4_이전학기_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자5_관리자_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자6_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - applicationRepository.saveAll(List.of(나의_지원정보, 사용자1_지원정보, 사용자2_지원정보, 사용자3_지원정보, 사용자4_이전학기_지원정보, 사용자5_관리자_지원정보, 사용자6_지원정보)); - } - - @Test - void 전체_지원자를_조회한다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().log().all() - .get("/applications/competitors") - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - List thirdChoiceApplicants = response.thirdChoice(); - - assertThat(firstChoiceApplicants).containsAnyElementsOf(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, false))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, - List.of()) - )); - assertThat(secondChoiceApplicants).containsAnyElementsOf(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, false))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, true))), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, - List.of()) - )); - assertThat(thirdChoiceApplicants).containsAnyElementsOf(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of()), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of()), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))) - )); - } - - @Test - void 지역으로_필터링해서_지원자를_조회한다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().log().all() - .get("/applications/competitors?region=" + 영미권.getCode()) - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - - assertThat(firstChoiceApplicants).containsAnyElementsOf(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, false))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))) - )); - assertThat(secondChoiceApplicants).containsAnyElementsOf(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, false))) - )); - } - - @Test - void 지원자를_조회할_때_이전학기_지원자는_조회되지_않는다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().log().all() - .get("/applications/competitors") - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - List thirdChoiceApplicants = response.thirdChoice(); - - - assertThat(firstChoiceApplicants).doesNotContainAnyElementsOf(List.of( - UniversityApplicantsResponse.of(네바다주립대학_라스베이거스_지원_정보, - List.of(ApplicantResponse.of(사용자4_이전학기_지원정보, false))) - )); - assertThat(secondChoiceApplicants).doesNotContainAnyElementsOf(List.of( - UniversityApplicantsResponse.of(네바다주립대학_라스베이거스_지원_정보, - List.of(ApplicantResponse.of(사용자4_이전학기_지원정보, false))) - )); - assertThat(thirdChoiceApplicants).doesNotContainAnyElementsOf(List.of( - UniversityApplicantsResponse.of(네바다주립대학_라스베이거스_지원_정보, - List.of(ApplicantResponse.of(사용자4_이전학기_지원정보, false))) - )); - } - - @Test - void 경쟁자를_조회한다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().log().all() - .get("/applications/competitors") - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - Integer choicedUniversityCount = 3; - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - List thirdChoiceApplicants = response.thirdChoice(); - - assertThat(firstChoiceApplicants).containsExactlyInAnyOrder( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, false))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, List.of())); - assertThat(secondChoiceApplicants).containsExactlyInAnyOrder( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, false))), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, - List.of())); - assertThat(thirdChoiceApplicants).containsExactlyInAnyOrder( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of()), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of()), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true)))); - - assertThat(firstChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(secondChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(thirdChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - } - - @Test - void 지원_대학중_미선택이_있을_떄_경쟁자를_조회한다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + user6AccessToken) - .when().log().all() - .get("/applications/competitors") - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - Integer choicedUniversityCount = 1; - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - List thirdChoiceApplicants = response.thirdChoice(); - - assertThat(firstChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(secondChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(thirdChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - } - - @Test - void 지원_대학이_모두_미선택일_때_경쟁자를_조회한다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + adminAccessToken) - .when().log().all() - .get("/applications/competitors") - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - Integer choicedUniversityCount = 0; - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - List thirdChoiceApplicants = response.thirdChoice(); - - assertThat(firstChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(secondChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(thirdChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/BaseEndToEndTest.java b/src/test/java/com/example/solidconnection/e2e/BaseEndToEndTest.java deleted file mode 100644 index 0b3ac3524..000000000 --- a/src/test/java/com/example/solidconnection/e2e/BaseEndToEndTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.support.DatabaseClearExtension; -import com.example.solidconnection.support.TestContainerSpringBootTest; -import io.restassured.RestAssured; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.boot.test.web.server.LocalServerPort; - -@TestContainerSpringBootTest -@ExtendWith(DatabaseClearExtension.class) -abstract class BaseEndToEndTest { - - @LocalServerPort - private int port; - - @BeforeEach - public void setUp() { - RestAssured.port = port; - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/DynamicFixture.java b/src/test/java/com/example/solidconnection/e2e/DynamicFixture.java index f17987690..43af92ea5 100644 --- a/src/test/java/com/example/solidconnection/e2e/DynamicFixture.java +++ b/src/test/java/com/example/solidconnection/e2e/DynamicFixture.java @@ -1,22 +1,10 @@ package com.example.solidconnection.e2e; -import com.example.solidconnection.application.domain.Gpa; -import com.example.solidconnection.application.domain.LanguageTest; -import com.example.solidconnection.auth.dto.oauth.KakaoUserInfoDto; import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.type.LanguageTestType; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; -import com.example.solidconnection.type.SemesterAvailableForDispatch; -import com.example.solidconnection.type.TuitionFeeType; -import com.example.solidconnection.university.domain.LanguageRequirement; -import com.example.solidconnection.university.domain.LikedUniversity; -import com.example.solidconnection.university.domain.University; -import com.example.solidconnection.university.domain.UniversityInfoForApply; -import java.util.Set; - -public class DynamicFixture { +public class DynamicFixture { // todo: test fixture 개선 작업 이후, 이 클래스의 사용이 대체되면 삭제 필요 public static SiteUser createSiteUserByEmail(String email) { return new SiteUser( @@ -27,61 +15,4 @@ public static SiteUser createSiteUserByEmail(String email) { Role.MENTEE ); } - - public static SiteUser createSiteUserByNickName(String nickname) { - return new SiteUser( - "email@email.com", - nickname, - "profileImage", - PreparationStatus.CONSIDERING, - Role.MENTEE - ); - } - - public static KakaoUserInfoDto createKakaoUserInfoDtoByEmail(String email) { - return new KakaoUserInfoDto( - new KakaoUserInfoDto.KakaoAccountDto( - new KakaoUserInfoDto.KakaoAccountDto.KakaoProfileDto( - "nickname", - "profileImageUrl" - ), - email - ) - ); - } - - public static UniversityInfoForApply createUniversityForApply( - String term, University university, Set languageRequirements) { - return new UniversityInfoForApply( - null, - term, - "koreanName", - 1, - TuitionFeeType.HOME_UNIVERSITY_PAYMENT, - SemesterAvailableForDispatch.ONE_SEMESTER, - "1", - "detailsForLanguage", - "gpaRequirement", - "gpaRequirementCriteria", - "detailsForApply", - "detailsForMajor", - "detailsForAccommodation", - "detailsForEnglishCourse", - "details", - languageRequirements, - university); - } - - public static LikedUniversity createLikedUniversity( - SiteUser siteUser, UniversityInfoForApply universityInfoForApply) { - return new LikedUniversity(null, universityInfoForApply, siteUser); - } - - public static Gpa createDummyGpa() { - return new Gpa(3.5, 4.0, "gpaReportUrl"); - } - - public static LanguageTest createDummyLanguageTest() { - return new LanguageTest(LanguageTestType.TOEIC, "900", "toeicReportUrl"); - } } diff --git a/src/test/java/com/example/solidconnection/e2e/MyPageTest.java b/src/test/java/com/example/solidconnection/e2e/MyPageTest.java deleted file mode 100644 index 309cab1f4..000000000 --- a/src/test/java/com/example/solidconnection/e2e/MyPageTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.dto.MyPageResponse; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import io.restassured.RestAssured; -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; -import org.springframework.http.HttpStatus; - -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; - -@DisplayName("마이페이지 테스트") -class MyPageTest extends BaseEndToEndTest { - - private SiteUser siteUser; - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - private String accessToken; - - @BeforeEach - public void setUpUserAndToken() { - // setUp - 회원 정보 저장 - siteUser = siteUserRepository.save(createSiteUserByEmail("email")); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(siteUser); - authTokenProvider.generateAndSaveRefreshToken(siteUser); - } - - @Test - void 마이페이지_정보를_조회한다() { - // request - 요청 - MyPageResponse myPageResponse = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/my") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(MyPageResponse.class); - - assertAll("불러온 마이 페이지 정보가 DB의 정보와 일치한다.", - () -> assertThat(myPageResponse.nickname()).isEqualTo(siteUser.getNickname()), - () -> assertThat(myPageResponse.profileImageUrl()).isEqualTo(siteUser.getProfileImageUrl()), - () -> assertThat(myPageResponse.email()).isEqualTo(siteUser.getEmail())); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/SignInTest.java b/src/test/java/com/example/solidconnection/e2e/SignInTest.java deleted file mode 100644 index cc16f71c1..000000000 --- a/src/test/java/com/example/solidconnection/e2e/SignInTest.java +++ /dev/null @@ -1,137 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.client.KakaoOAuthClient; -import com.example.solidconnection.auth.dto.oauth.OAuthSignInResponse; -import com.example.solidconnection.auth.dto.oauth.SignUpPrepareResponse; -import com.example.solidconnection.auth.dto.oauth.OAuthCodeRequest; -import com.example.solidconnection.auth.dto.oauth.KakaoUserInfoDto; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -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.MockBean; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.http.HttpStatus; - -import java.time.LocalDate; - -import static com.example.solidconnection.auth.domain.TokenType.REFRESH; -import static com.example.solidconnection.auth.domain.TokenType.SIGN_UP; -import static com.example.solidconnection.e2e.DynamicFixture.createKakaoUserInfoDtoByEmail; -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static com.example.solidconnection.scheduler.UserRemovalScheduler.ACCOUNT_RECOVER_DURATION; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; -import static org.mockito.BDDMockito.given; - -@DisplayName("카카오 로그인 테스트") -class SignInTest extends BaseEndToEndTest { - - @Autowired - SiteUserRepository siteUserRepository; - - @Autowired - RedisTemplate redisTemplate; - - @MockBean - KakaoOAuthClient kakaoOAuthClient; - - @Test - void 신규_회원이_카카오로_로그인한다() { - // stub - kakaoOAuthClient 가 정해진 사용자 프로필 정보를 반환하도록 - String kakaoCode = "kakaoCode"; - String email = "email@email.com"; - KakaoUserInfoDto kakaoUserInfoDto = createKakaoUserInfoDtoByEmail(email); - given(kakaoOAuthClient.getUserInfo(kakaoCode)) - .willReturn(kakaoUserInfoDto); - - // request - body 생성 및 요청 - OAuthCodeRequest OAuthCodeRequest = new OAuthCodeRequest(kakaoCode); - SignUpPrepareResponse response = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(OAuthCodeRequest) - .when().post("/auth/kakao") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(SignUpPrepareResponse.class); - - KakaoUserInfoDto.KakaoAccountDto.KakaoProfileDto kakaoProfileDto = kakaoUserInfoDto.kakaoAccountDto().profile(); - assertAll("카카오톡 사용자 정보를 응답한다.", - () -> assertThat(response.isRegistered()).isFalse(), - () -> assertThat(response.email()).isEqualTo(email), - () -> assertThat(response.nickname()).isEqualTo(kakaoProfileDto.nickname()), - () -> assertThat(response.profileImageUrl()).isEqualTo(kakaoProfileDto.profileImageUrl()), - () -> assertThat(response.signUpToken()).isNotNull()); - assertThat(redisTemplate.opsForValue().get(SIGN_UP.addPrefix(email))) - .as("카카오 인증 토큰을 저장한다.") - .isEqualTo(response.signUpToken()); - } - - @Test - void 기존_회원이_카카오로_로그인한다() { - // stub - kakaoOAuthClient 가 정해진 사용자 프로필 정보를 반환하도록 - String kakaoCode = "kakaoCode"; - String email = "email@email.com"; - given(kakaoOAuthClient.getUserInfo(kakaoCode)) - .willReturn(createKakaoUserInfoDtoByEmail(email)); - - // setUp - 사용자 정보 저장 - SiteUser siteUser = siteUserRepository.save(createSiteUserByEmail(email)); - - // request - body 생성 및 요청 - OAuthCodeRequest oAuthCodeRequest = new OAuthCodeRequest(kakaoCode); - OAuthSignInResponse response = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(oAuthCodeRequest) - .when().post("/auth/kakao") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(OAuthSignInResponse.class); - - assertAll("리프레스 토큰과 엑세스 토큰을 응답한다.", - () -> assertThat(response.isRegistered()).isTrue(), - () -> assertThat(response.accessToken()).isNotNull(), - () -> assertThat(response.refreshToken()).isNotNull()); - assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefix(siteUser.getId().toString()))) - .as("리프레시 토큰을 저장한다.") - .isEqualTo(response.refreshToken()); - } - - @Test - void 탈퇴한_회원이_계정_복구_기간_안에_다시_로그인하면_탈퇴가_무효화된다() { - // stub - kakaoOAuthClient 가 정해진 사용자 프로필 정보를 반환하도록 - String kakaoCode = "kakaoCode"; - String email = "email@email.com"; - given(kakaoOAuthClient.getUserInfo(kakaoCode)) - .willReturn(createKakaoUserInfoDtoByEmail(email)); - - // setUp - 계정 복구 기간이 되지 않은 사용자 저장 - SiteUser siteUserFixture = createSiteUserByEmail(email); - LocalDate justBeforeRemoval = LocalDate.now().minusDays(ACCOUNT_RECOVER_DURATION - 1); - siteUserFixture.setQuitedAt(justBeforeRemoval); - SiteUser siteUser = siteUserRepository.save(siteUserFixture); - - // request - body 생성 및 요청 - OAuthCodeRequest OAuthCodeRequest = new OAuthCodeRequest(kakaoCode); - OAuthSignInResponse response = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(OAuthCodeRequest) - .when().post("/auth/kakao") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(OAuthSignInResponse.class); - - SiteUser updatedSiteUser = siteUserRepository.findById(siteUser.getId()).get(); - assertAll("리프레스 토큰과 엑세스 토큰을 응답하고, 탈퇴 날짜를 초기화한다.", - () -> assertThat(response.isRegistered()).isTrue(), - () -> assertThat(response.accessToken()).isNotNull(), - () -> assertThat(response.refreshToken()).isNotNull(), - () -> assertThat(updatedSiteUser.getQuitedAt()).isNull()); - assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefix(siteUser.getId().toString()))) - .as("리프레시 토큰을 저장한다.") - .isEqualTo(response.refreshToken()); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/SignUpTest.java b/src/test/java/com/example/solidconnection/e2e/SignUpTest.java deleted file mode 100644 index ab3f75515..000000000 --- a/src/test/java/com/example/solidconnection/e2e/SignUpTest.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.dto.SignInResponse; -import com.example.solidconnection.auth.dto.SignUpRequest; -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.auth.service.oauth.OAuthSignUpTokenProvider; -import com.example.solidconnection.custom.response.ErrorResponse; -import com.example.solidconnection.entity.Country; -import com.example.solidconnection.entity.InterestedCountry; -import com.example.solidconnection.entity.InterestedRegion; -import com.example.solidconnection.entity.Region; -import com.example.solidconnection.repositories.CountryRepository; -import com.example.solidconnection.repositories.InterestedCountyRepository; -import com.example.solidconnection.repositories.InterestedRegionRepository; -import com.example.solidconnection.repositories.RegionRepository; -import com.example.solidconnection.siteuser.domain.AuthType; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.type.PreparationStatus; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.http.HttpStatus; - -import java.util.List; - -import static com.example.solidconnection.auth.domain.TokenType.REFRESH; -import static com.example.solidconnection.custom.exception.ErrorCode.NICKNAME_ALREADY_EXISTED; -import static com.example.solidconnection.custom.exception.ErrorCode.SIGN_UP_TOKEN_INVALID; -import static com.example.solidconnection.custom.exception.ErrorCode.USER_ALREADY_EXISTED; -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByNickName; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; - -@DisplayName("회원가입 테스트") -class SignUpTest extends BaseEndToEndTest { - - @Autowired - SiteUserRepository siteUserRepository; - - @Autowired - CountryRepository countryRepository; - - @Autowired - RegionRepository regionRepository; - - @Autowired - InterestedRegionRepository interestedRegionRepository; - - @Autowired - InterestedCountyRepository interestedCountyRepository; - - @Autowired - AuthTokenProvider authTokenProvider; - - @Autowired - OAuthSignUpTokenProvider OAuthSignUpTokenProvider; - - @Autowired - RedisTemplate redisTemplate; - - @Test - void 유효한_카카오_토큰으로_회원가입한다() { - // setup - 국가, 지역 정보 저장 - Region region = regionRepository.save(new Region("EROUPE", "유럽")); - List countries = countryRepository.saveAll(List.of( - new Country("FR", "프랑스", region), - new Country("DE", "독일", region))); - - // setup - 카카오 토큰 발급 - String email = "email@email.com"; - String generatedKakaoToken = OAuthSignUpTokenProvider.generateAndSaveSignUpToken(email, AuthType.KAKAO); - - // request - body 생성 및 요청 - List interestedRegionNames = List.of("유럽"); - List interestedCountryNames = List.of("프랑스", "독일"); - SignUpRequest signUpRequest = new SignUpRequest(generatedKakaoToken, interestedRegionNames, interestedCountryNames, - PreparationStatus.CONSIDERING, "profile", "nickname"); - SignInResponse response = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(signUpRequest) - .when().post("/auth/sign-up") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(SignInResponse.class); - - SiteUser savedSiteUser = siteUserRepository.findByEmailAndAuthType(email, AuthType.KAKAO).get(); - assertAll( - "회원 정보를 저장한다.", - () -> assertThat(savedSiteUser.getId()).isNotNull(), - () -> assertThat(savedSiteUser.getEmail()).isEqualTo(email), - () -> assertThat(savedSiteUser.getNickname()).isEqualTo(signUpRequest.nickname()), - () -> assertThat(savedSiteUser.getProfileImageUrl()).isEqualTo(signUpRequest.profileImageUrl()), - () -> assertThat(savedSiteUser.getPreparationStage()).isEqualTo(signUpRequest.preparationStatus())); - - List interestedRegions = interestedRegionRepository.findAllBySiteUser(savedSiteUser).stream() - .map(InterestedRegion::getRegion) - .toList(); - List interestedCountries = interestedCountyRepository.findAllBySiteUser(savedSiteUser).stream() - .map(InterestedCountry::getCountry) - .toList(); - assertAll( - "관심 지역과 나라 정보를 저장한다.", - () -> assertThat(interestedRegions).containsExactlyInAnyOrder(region), - () -> assertThat(interestedCountries).containsExactlyInAnyOrderElementsOf(countries) - ); - - assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefix(savedSiteUser.getId().toString()))) - .as("리프레시 토큰을 저장한다.") - .isEqualTo(response.refreshToken()); - } - - @Test - void 이미_있는_닉네임으로_회원가입하면_예외를_응답한다() { - // setup - 회원 정보 저장 - String alreadyExistNickname = "nickname"; - SiteUser alreadyExistUser = createSiteUserByNickName(alreadyExistNickname); - siteUserRepository.save(alreadyExistUser); - - // setup - 카카오 토큰 발급 - String email = "test@email.com"; - String generatedKakaoToken = OAuthSignUpTokenProvider.generateAndSaveSignUpToken(email, AuthType.KAKAO); - - // request - body 생성 및 요청 - SignUpRequest signUpRequest = new SignUpRequest(generatedKakaoToken, null, null, - PreparationStatus.CONSIDERING, "profile", alreadyExistNickname); - ErrorResponse errorResponse = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(signUpRequest) - .when().post("/auth/sign-up") - .then().log().all() - .statusCode(HttpStatus.CONFLICT.value()) - .extract().as(ErrorResponse.class); - - assertThat(errorResponse.message()) - .isEqualTo(NICKNAME_ALREADY_EXISTED.getMessage()); - } - - @Test - void 이미_있는_이메일로_회원가입하면_예외를_응답한다() { - // setup - 회원 정보 저장 - String alreadyExistEmail = "email@email.com"; - SiteUser alreadyExistUser = createSiteUserByEmail(alreadyExistEmail); - siteUserRepository.save(alreadyExistUser); - - // setup - 카카오 토큰 발급 - String generatedKakaoToken = OAuthSignUpTokenProvider.generateAndSaveSignUpToken(alreadyExistEmail, AuthType.KAKAO); - - // request - body 생성 및 요청 - SignUpRequest signUpRequest = new SignUpRequest(generatedKakaoToken, null, null, - PreparationStatus.CONSIDERING, "profile", "nickname0"); - ErrorResponse errorResponse = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(signUpRequest) - .when().post("/auth/sign-up") - .then().log().all() - .statusCode(HttpStatus.CONFLICT.value()) - .extract().as(ErrorResponse.class); - - assertThat(errorResponse.message()) - .isEqualTo(USER_ALREADY_EXISTED.getMessage()); - } - - @Test - void 유효하지_않은_카카오_토큰으로_회원가입을_하면_예외를_응답한다() { - SignUpRequest signUpRequest = new SignUpRequest("invalid", null, null, - PreparationStatus.CONSIDERING, "profile", "nickname"); - ErrorResponse errorResponse = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(signUpRequest) - .when().post("/auth/sign-up") - .then().log().all() - .statusCode(HttpStatus.BAD_REQUEST.value()) - .extract().as(ErrorResponse.class); - - assertThat(errorResponse.message()) - .contains(SIGN_UP_TOKEN_INVALID.getMessage()); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityDataSetUpEndToEndTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityDataSetUpEndToEndTest.java deleted file mode 100644 index 20a0bbc6b..000000000 --- a/src/test/java/com/example/solidconnection/e2e/UniversityDataSetUpEndToEndTest.java +++ /dev/null @@ -1,288 +0,0 @@ -package com.example.solidconnection.e2e; - -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 UniversityDataSetUpEndToEndTest { - - 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); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityDetailTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityDetailTest.java deleted file mode 100644 index c7a364ebf..000000000 --- a/src/test/java/com/example/solidconnection/e2e/UniversityDetailTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.university.dto.LanguageRequirementResponse; -import com.example.solidconnection.university.dto.UniversityDetailResponse; -import io.restassured.RestAssured; -import org.junit.jupiter.api.Assertions; -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; -import org.springframework.http.HttpStatus; - -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static org.assertj.core.api.Assertions.assertThat; - -@DisplayName("대학교 상세 조회 테스트") -class UniversityDetailTest extends UniversityDataSetUpEndToEndTest { - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - private String accessToken; - - @BeforeEach - public void setUpUserAndToken() { - // setUp - 회원 정보 저장 - String email = "email@email.com"; - SiteUser siteUser = createSiteUserByEmail(email); - siteUserRepository.save(siteUser); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(siteUser); - authTokenProvider.generateAndSaveRefreshToken(siteUser); - } - - @Test - void 대학교_정보를_조회한다() { - // request - 요청 - UniversityDetailResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/" + 메이지대학_지원_정보.getId()) - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityDetailResponse.class); - - // response - 응답 - Assertions.assertAll( - () -> assertThat(response.id()).isEqualTo(메이지대학_지원_정보.getId()), - () -> assertThat(response.koreanName()).isEqualTo(메이지대학_지원_정보.getKoreanName()), - () -> assertThat(response.englishName()).isEqualTo(아시아_일본_메이지대학.getEnglishName()), - () -> assertThat(response.region()).isEqualTo(아시아_일본_메이지대학.getRegion().getKoreanName()), - () -> assertThat(response.country()).isEqualTo(아시아_일본_메이지대학.getCountry().getKoreanName()), - () -> assertThat(response.languageRequirements()).isEqualTo( - 메이지대학_지원_정보.getLanguageRequirements().stream() - .map(LanguageRequirementResponse::from) - .toList()), - () -> assertThat(response.term()).isEqualTo(메이지대학_지원_정보.getTerm()), - () -> assertThat(response.formatName()).isEqualTo(아시아_일본_메이지대학.getFormatName()), - () -> assertThat(response.homepageUrl()).isEqualTo(아시아_일본_메이지대학.getHomepageUrl()), - () -> assertThat(response.logoImageUrl()).isEqualTo(아시아_일본_메이지대학.getLogoImageUrl()), - () -> assertThat(response.backgroundImageUrl()).isEqualTo(아시아_일본_메이지대학.getBackgroundImageUrl()), - () -> assertThat(response.detailsForLocal()).isEqualTo(아시아_일본_메이지대학.getDetailsForLocal()), - () -> assertThat(response.studentCapacity()).isEqualTo(메이지대학_지원_정보.getStudentCapacity()), - () -> assertThat(response.tuitionFeeType()).isEqualTo(메이지대학_지원_정보.getTuitionFeeType().getKoreanName()), - () -> assertThat(response.semesterAvailableForDispatch()).isEqualTo(메이지대학_지원_정보.getSemesterAvailableForDispatch().getKoreanName()), - () -> assertThat(response.detailsForLanguage()).isEqualTo(메이지대학_지원_정보.getDetailsForLanguage()), - () -> assertThat(response.gpaRequirement()).isEqualTo(메이지대학_지원_정보.getGpaRequirement()), - () -> assertThat(response.gpaRequirementCriteria()).isEqualTo(메이지대학_지원_정보.getGpaRequirementCriteria()), - () -> assertThat(response.semesterRequirement()).isEqualTo(메이지대학_지원_정보.getSemesterRequirement()), - () -> assertThat(response.detailsForApply()).isEqualTo(메이지대학_지원_정보.getDetailsForApply()), - () -> assertThat(response.detailsForMajor()).isEqualTo(메이지대학_지원_정보.getDetailsForMajor()), - () -> assertThat(response.detailsForAccommodation()).isEqualTo(메이지대학_지원_정보.getDetailsForAccommodation()), - () -> assertThat(response.detailsForEnglishCourse()).isEqualTo(메이지대학_지원_정보.getDetailsForEnglishCourse()), - () -> assertThat(response.details()).isEqualTo(메이지대학_지원_정보.getDetails()), - () -> assertThat(response.accommodationUrl()).isEqualTo(아시아_일본_메이지대학.getAccommodationUrl()), - () -> assertThat(response.englishCourseUrl()).isEqualTo(아시아_일본_메이지대학.getEnglishCourseUrl()) - ); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java deleted file mode 100644 index 693d6d91b..000000000 --- a/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.service.AuthTokenProvider; -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.university.domain.LikedUniversity; -import com.example.solidconnection.university.domain.UniversityInfoForApply; -import com.example.solidconnection.university.dto.IsLikeResponse; -import com.example.solidconnection.university.dto.LikeResultResponse; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; -import io.restassured.RestAssured; -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; -import org.springframework.http.HttpStatus; - -import java.util.List; -import java.util.Optional; -import java.util.Set; - -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.UniversityLikeService.LIKE_SUCCESS_MESSAGE; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; - -@DisplayName("대학교 좋아요 테스트") -class UniversityLikeTest extends UniversityDataSetUpEndToEndTest { - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private UniversityInfoForApplyRepository universityInfoForApplyRepository; - - @Autowired - private LikedUniversityRepository likedUniversityRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - private String accessToken; - private SiteUser siteUser; - - @BeforeEach - public void setUpUserAndToken() { - // setUp - 회원 정보 저장 - siteUser = createSiteUserByEmail("email@email.com"); - siteUserRepository.save(siteUser); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(siteUser); - authTokenProvider.generateAndSaveRefreshToken(siteUser); - } - - @Test - void 좋아요를_한_대학을_조회한다() { - // setUp - 대학교 좋아요 저장 - UniversityInfoForApply differentTermUniversityInfoForApply = - createUniversityForApply(term + " 추가 지원", 영미권_미국_괌대학, null); - universityInfoForApplyRepository.save(differentTermUniversityInfoForApply); - likedUniversityRepository.saveAll(Set.of( - createLikedUniversity(siteUser, 괌대학_A_지원_정보), - createLikedUniversity(siteUser, differentTermUniversityInfoForApply) - )); - - // request - 요청 - List wishUniversities = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/like") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - List wishUniversitiesId = wishUniversities.stream() - .map(UniversityInfoForApplyPreviewResponse::id) - .toList(); - assertThat(wishUniversitiesId) - .as("좋아요한 대학교를 지원 시기와 관계 없이 불러온다.") - .containsExactlyInAnyOrder(괌대학_A_지원_정보.getId(), differentTermUniversityInfoForApply.getId()); - } - - @Test - void 좋아요_하지_않은_대학교에_좋아요를_누른다() { - // request - 요청 - LikeResultResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .post("/universities/" + 괌대학_A_지원_정보.getId() + "/like") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(LikeResultResponse.class); - - Optional likedUniversity - = likedUniversityRepository.findAllBySiteUser_Id(siteUser.getId()).stream().findFirst(); - assertAll("좋아요 누른 대학교를 저장하고 좋아요 성공 응답을 반환한다.", - () -> assertThat(likedUniversity).isPresent(), - () -> assertThat(likedUniversity.get().getId()).isEqualTo(괌대학_A_지원_정보.getId()), - () -> assertThat(response.result()).isEqualTo(LIKE_SUCCESS_MESSAGE) - ); - } - - @Test - void 대학의_좋아요_여부를_조회한다() { - // setUp - 대학교 좋아요 저장 - likedUniversityRepository.save(createLikedUniversity(siteUser, 괌대학_A_지원_정보)); - - // request - 요청 - IsLikeResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .get("/universities/" + 괌대학_A_지원_정보.getId() + "/like") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(IsLikeResponse.class); - - assertThat(response.isLike()).isTrue(); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityRecommendTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityRecommendTest.java deleted file mode 100644 index 9939d1a54..000000000 --- a/src/test/java/com/example/solidconnection/e2e/UniversityRecommendTest.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.service.AuthTokenProvider; -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.university.dto.UniversityInfoForApplyPreviewResponse; -import com.example.solidconnection.university.dto.UniversityRecommendsResponse; -import com.example.solidconnection.university.service.GeneralUniversityRecommendService; -import io.restassured.RestAssured; -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; -import org.springframework.http.HttpStatus; - -import java.util.List; - -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -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.assertAll; - -@DisplayName("추천 대학 목록 조회 테스트") -class UniversityRecommendTest extends UniversityDataSetUpEndToEndTest { - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private InterestedRegionRepository interestedRegionRepository; - - @Autowired - private InterestedCountyRepository interestedCountyRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - @Autowired - private GeneralUniversityRecommendService generalUniversityRecommendService; - - private SiteUser siteUser; - private String accessToken; - - @BeforeEach - void setUp() { - // setUp - 회원 정보 저장 - String email = "email@email.com"; - siteUser = siteUserRepository.save(createSiteUserByEmail(email)); - generalUniversityRecommendService.init(); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(siteUser); - authTokenProvider.generateAndSaveRefreshToken(siteUser); - } - - @Test - void 관심_지역을_설정한_사용자의_추천_대학_목록을_조회한다() { - // setUp - 관심 지역 저장 - interestedRegionRepository.save(new InterestedRegion(siteUser, 영미권)); - - // request - 요청 - UniversityRecommendsResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/recommend") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityRecommendsResponse.class); - - assertAll( - String.format("관심 지역에 해당하는 학교를 포함한 %d개의 대학 목록을 반환한다.", RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .containsOnlyOnceElementsOf(List.of( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보) - )) - ); - } - - @Test - void 관심_국가를_설정한_사용자의_추천_대학_목록을_조회한다() { - // setUp - 관심 국가 저장 - interestedCountyRepository.save(new InterestedCountry(siteUser, 덴마크)); - - // request - 요청 - UniversityRecommendsResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/recommend") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityRecommendsResponse.class); - - assertAll( - String.format("관심 국가에 해당하는 학교를 포함한 %d개의 대학 목록을 반환한다.", RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .containsOnlyOnceElementsOf(List.of( - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), - UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보) - )) - ); - } - - @Test - void 관심_지역과_관심_국가를_설정한_사용자의_추천_대학_목록을_조회한다() { - // setUp - 관심 지역과 국가 저장 - interestedRegionRepository.save(new InterestedRegion(siteUser, 영미권)); - interestedCountyRepository.save(new InterestedCountry(siteUser, 덴마크)); - - // request - 요청 - UniversityRecommendsResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/recommend") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityRecommendsResponse.class); - - assertAll( - String.format("관심 지역 또는 국가에 해당하는 학교를 포함한 %d개의 대학 목록을 반환한다.", RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .containsOnlyOnceElementsOf(List.of( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), - UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보) - )) - ); - } - - @Test - void 관심_지역_또는_관심_국가를_설정하지_않은_사용자의_추천_대학_목록을_조회한다() { - // request - 요청 - UniversityRecommendsResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/recommend") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityRecommendsResponse.class); - - List generalRecommendUniversities - = this.generalUniversityRecommendService.getRecommendUniversities().stream() - .map(UniversityInfoForApplyPreviewResponse::from) - .toList(); - assertAll( - String.format("일반 추천 대학 목록 %d개를 반환한다.", RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(generalRecommendUniversities) - .containsOnlyOnceElementsOf(response.recommendedUniversities()) - ); - } - - @Test - void 로그인하지_않은_방문객의_추천_대학_목록을_조회한다() { - // request - 요청 - UniversityRecommendsResponse response = RestAssured.given() - .log().all() - .get("/universities/recommend") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityRecommendsResponse.class); - - List generalRecommendUniversities - = this.generalUniversityRecommendService.getRecommendUniversities().stream() - .map(UniversityInfoForApplyPreviewResponse::from) - .toList(); - assertAll( - String.format("일반 추천 대학 목록 %d개를 반환한다.", RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(generalRecommendUniversities) - .containsOnlyOnceElementsOf(response.recommendedUniversities()) - ); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/UniversitySearchTest.java b/src/test/java/com/example/solidconnection/e2e/UniversitySearchTest.java deleted file mode 100644 index 5d4ff71fd..000000000 --- a/src/test/java/com/example/solidconnection/e2e/UniversitySearchTest.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import io.restassured.RestAssured; -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; - -import java.util.List; - -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static org.assertj.core.api.Assertions.assertThat; - -@DisplayName("대학교 검색 테스트") -class UniversitySearchTest extends UniversityDataSetUpEndToEndTest { - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - private String accessToken; - private SiteUser siteUser; - - @BeforeEach - public void setUpUserAndToken() { - // setUp - 회원 정보 저장 - siteUser = createSiteUserByEmail("email@email.com"); - siteUserRepository.save(siteUser); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(siteUser); - authTokenProvider.generateAndSaveRefreshToken(siteUser); - } - - @Test - void 아무_필터링_없이_전체_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).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 지역으로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?region=" + 영미권.getCode()) - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보) - ); - } - - @Test - void 국가_국문명_또는_대학_국문명으로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?keyword=라") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠공과대학_지원_정보) - ); - } - - @Test - void 둘_이상의_국가_국문명_또는_대학_국문명으로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?keyword=라&keyword=일본") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠공과대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메이지대학_지원_정보) - ); - } - - @Test - void 어학시험_종류로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?testType=TOEFL_IBT") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), - UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠대학_지원_정보) - ); - } - - @Test - void 어학시험과_시험_성적으로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?testType=TOEFL_IBT&testScore=70") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보) - ); - } - - @Test - void 지역과_어학시험과_시험_성적으로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?region=EUROPE&testType=TOEFL_IBT&testScore=70") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response) - .containsExactlyInAnyOrder(UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보)); - } -}