diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java index fff928f05..66ae84918 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java @@ -19,9 +19,12 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.function.Function; +import java.util.stream.Collectors; import static com.example.solidconnection.custom.exception.ErrorCode.APPLICATION_NOT_APPROVED; @@ -64,12 +67,19 @@ public ApplicationsResponse getApplicantsByUserApplications(String email) { SiteUser siteUser = siteUserRepository.getByEmail(email); Application userLatestApplication = applicationRepository.getApplicationBySiteUserAndTerm(siteUser, term); - List userAppliedUniversities = List.of( - userLatestApplication.getFirstChoiceUniversity().getUniversity(), - userLatestApplication.getSecondChoiceUniversity().getUniversity(), - userLatestApplication.getThirdChoiceUniversity().getUniversity() - ); - + List userAppliedUniversities = Arrays.asList( + Optional.ofNullable(userLatestApplication.getFirstChoiceUniversity()) + .map(UniversityInfoForApply::getUniversity) + .orElse(null), + Optional.ofNullable(userLatestApplication.getSecondChoiceUniversity()) + .map(UniversityInfoForApply::getUniversity) + .orElse(null), + Optional.ofNullable(userLatestApplication.getThirdChoiceUniversity()) + .map(UniversityInfoForApply::getUniversity) + .orElse(null) + ).stream() + .filter(Objects::nonNull) + .collect(Collectors.toList()); List firstChoiceApplicants = getFirstChoiceApplicants(userAppliedUniversities, siteUser, term); List secondChoiceApplicants = getSecondChoiceApplicants(userAppliedUniversities, siteUser, term); diff --git a/src/main/java/com/example/solidconnection/auth/controller/AuthController.java b/src/main/java/com/example/solidconnection/auth/controller/AuthController.java index c126da674..b73812a2a 100644 --- a/src/main/java/com/example/solidconnection/auth/controller/AuthController.java +++ b/src/main/java/com/example/solidconnection/auth/controller/AuthController.java @@ -31,15 +31,13 @@ public class AuthController implements AuthControllerSwagger { @PostMapping("/kakao") public ResponseEntity processKakaoOauth(@RequestBody KakaoCodeRequest kakaoCodeRequest) { KakaoOauthResponse kakaoOauthResponse = signInService.signIn(kakaoCodeRequest); - return ResponseEntity - .ok(kakaoOauthResponse); + return ResponseEntity.ok(kakaoOauthResponse); } @PostMapping("/sign-up") public ResponseEntity signUp(@Valid @RequestBody SignUpRequest signUpRequest) { SignUpResponse signUpResponseDto = signUpService.signUp(signUpRequest); - return ResponseEntity - .ok(signUpResponseDto); + return ResponseEntity.ok(signUpResponseDto); } @PostMapping("/sign-out") @@ -57,7 +55,6 @@ public ResponseEntity quit(Principal principal) { @PostMapping("/reissue") public ResponseEntity reissueToken(Principal principal) { ReissueResponse reissueResponse = authService.reissue(principal.getName()); - return ResponseEntity - .ok(reissueResponse); + return ResponseEntity.ok(reissueResponse); } } diff --git a/src/main/java/com/example/solidconnection/s3/FileUploadService.java b/src/main/java/com/example/solidconnection/s3/FileUploadService.java new file mode 100644 index 000000000..5e31c5475 --- /dev/null +++ b/src/main/java/com/example/solidconnection/s3/FileUploadService.java @@ -0,0 +1,51 @@ +package com.example.solidconnection.s3; + +import com.amazonaws.AmazonServiceException; +import com.amazonaws.SdkClientException; +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.model.CannedAccessControlList; +import com.amazonaws.services.s3.model.ObjectMetadata; +import com.amazonaws.services.s3.model.PutObjectRequest; +import com.example.solidconnection.custom.exception.CustomException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +import static com.example.solidconnection.custom.exception.ErrorCode.S3_CLIENT_EXCEPTION; +import static com.example.solidconnection.custom.exception.ErrorCode.S3_SERVICE_EXCEPTION; + +@Component +@EnableAsync +@Slf4j +public class FileUploadService { + private final AmazonS3Client amazonS3; + + public FileUploadService(AmazonS3Client amazonS3) { + this.amazonS3 = amazonS3; + } + + @Async + public void uploadFile(String bucket, String fileName, MultipartFile multipartFile) { + // 메타데이터 생성 + String contentType = multipartFile.getContentType(); + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentType(contentType); + metadata.setContentLength(multipartFile.getSize()); + + try { + amazonS3.putObject(new PutObjectRequest(bucket, fileName, multipartFile.getInputStream(), metadata) + .withCannedAcl(CannedAccessControlList.PublicRead)); + log.info("이미지 업로드 정상적 완료 thread: {}", Thread.currentThread().getName()); + } catch (AmazonServiceException e) { + log.error("이미지 업로드 중 s3 서비스 예외 발생 : {}", e.getMessage()); + throw new CustomException(S3_SERVICE_EXCEPTION); + } catch (SdkClientException | IOException e) { + log.error("이미지 업로드 중 s3 클라이언트 예외 발생 : {}", e.getMessage()); + throw new CustomException(S3_CLIENT_EXCEPTION); + } + } +} diff --git a/src/main/java/com/example/solidconnection/s3/S3Controller.java b/src/main/java/com/example/solidconnection/s3/S3Controller.java index 8da2984ea..7a1c1fc7c 100644 --- a/src/main/java/com/example/solidconnection/s3/S3Controller.java +++ b/src/main/java/com/example/solidconnection/s3/S3Controller.java @@ -2,11 +2,9 @@ import com.example.solidconnection.type.ImgType; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.security.Principal; @@ -17,6 +15,14 @@ public class S3Controller implements S3ControllerSwagger { private final S3Service s3Service; + @Value("${cloud.aws.s3.url.default}") + private String s3Default; + @Value("${cloud.aws.s3.url.uploaded}") + private String s3Uploaded; + @Value("${cloud.aws.cloudFront.url.default}") + private String cloudFrontDefault; + @Value("${cloud.aws.cloudFront.url.uploaded}") + private String cloudFrontUploaded; @PostMapping("/profile/pre") public ResponseEntity uploadPreProfileImage( @@ -46,4 +52,9 @@ public ResponseEntity uploadLanguageImage( UploadedFileUrlResponse profileImageUrl = s3Service.uploadFile(imageFile, ImgType.LANGUAGE_TEST); return ResponseEntity.ok(profileImageUrl); } + + @GetMapping("/s3-url-prefix") + public ResponseEntity getS3UrlPrefix() { + return ResponseEntity.ok(new urlPrefixResponse(s3Default, s3Uploaded, cloudFrontDefault, cloudFrontUploaded)); + } } diff --git a/src/main/java/com/example/solidconnection/s3/S3ControllerSwagger.java b/src/main/java/com/example/solidconnection/s3/S3ControllerSwagger.java index aa432b195..bce6bfe15 100644 --- a/src/main/java/com/example/solidconnection/s3/S3ControllerSwagger.java +++ b/src/main/java/com/example/solidconnection/s3/S3ControllerSwagger.java @@ -116,4 +116,21 @@ public interface S3ControllerSwagger { } ) ResponseEntity uploadLanguageImage(@RequestParam("file") MultipartFile imageFile); + + @SecurityRequirements + @SecurityRequirement(name = ACCESS_TOKEN) + @Operation( + summary = "S3 url prefix 확인", + responses = { + @ApiResponse( + responseCode = "200", + description = "S3 url prefix 반환", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = urlPrefixResponse.class) + ) + ) + } + ) + ResponseEntity getS3UrlPrefix(); } diff --git a/src/main/java/com/example/solidconnection/s3/S3Service.java b/src/main/java/com/example/solidconnection/s3/S3Service.java index 4bee94932..534c4a935 100644 --- a/src/main/java/com/example/solidconnection/s3/S3Service.java +++ b/src/main/java/com/example/solidconnection/s3/S3Service.java @@ -3,10 +3,7 @@ import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.services.s3.AmazonS3Client; -import com.amazonaws.services.s3.model.CannedAccessControlList; import com.amazonaws.services.s3.model.DeleteObjectRequest; -import com.amazonaws.services.s3.model.ObjectMetadata; -import com.amazonaws.services.s3.model.PutObjectRequest; import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; @@ -15,10 +12,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; import java.util.*; import static com.example.solidconnection.custom.exception.ErrorCode.FILE_NOT_EXIST; @@ -34,8 +31,11 @@ public class S3Service { private static final Logger log = LoggerFactory.getLogger(S3Service.class); private final AmazonS3Client amazonS3; private final SiteUserRepository siteUserRepository; + private final FileUploadService fileUploadService; + private final ThreadPoolTaskExecutor asyncExecutor; @Value("${cloud.aws.s3.bucket}") private String bucket; + private final long MAX_FILE_SIZE_MB = 1024 * 1024 * 3; /* * 파일을 S3에 업로드한다. @@ -44,66 +44,35 @@ public class S3Service { * - 파일에 대한 메타 데이터를 생성한다. * - 임의의 랜덤한 문자열로 파일 이름을 생성한다. * - S3에 파일을 업로드한다. + * - 3mb 이상의 파일은 /origin/ 경로로 업로드하여 lambda 함수로 리사이징 진행한다. + * - 3mb 미만의 파일은 바로 업로드한다. * */ public UploadedFileUrlResponse uploadFile(MultipartFile multipartFile, ImgType imageFile) { // 파일 검증 validateImgFile(multipartFile); - - // 메타데이터 생성 - String contentType = multipartFile.getContentType(); - ObjectMetadata metadata = new ObjectMetadata(); - metadata.setContentType(contentType); - metadata.setContentLength(multipartFile.getSize()); - // 파일 이름 생성 UUID randomUUID = UUID.randomUUID(); String fileName = imageFile.getType() + "/" + randomUUID; - - try { - amazonS3.putObject(new PutObjectRequest(bucket, fileName, multipartFile.getInputStream(), metadata) - .withCannedAcl(CannedAccessControlList.PublicRead)); - } catch (AmazonServiceException e) { - log.error("이미지 업로드 중 s3 서비스 예외 발생 : {}", e.getMessage()); - throw new CustomException(S3_SERVICE_EXCEPTION); - } catch (SdkClientException | IOException e) { - log.error("이미지 업로드 중 s3 클라이언트 예외 발생 : {}", e.getMessage()); - throw new CustomException(S3_CLIENT_EXCEPTION); + // 파일업로드 비동기로 진행 + if (multipartFile.getSize() >= MAX_FILE_SIZE_MB) { + asyncExecutor.submit(() -> { + fileUploadService.uploadFile(bucket, "origin/" + fileName, multipartFile); + }); + } else { + asyncExecutor.submit(() -> { + fileUploadService.uploadFile(bucket, fileName, multipartFile); + }); } - - return new UploadedFileUrlResponse(amazonS3.getUrl(bucket, fileName).toString()); + return new UploadedFileUrlResponse(fileName); } public List uploadFiles(List multipartFile, ImgType imageFile) { List uploadedFileUrlResponseList = new ArrayList<>(); - for (MultipartFile file : multipartFile) { - // 파일 검증 - validateImgFile(file); - - // 메타데이터 생성 - String contentType = file.getContentType(); - ObjectMetadata metadata = new ObjectMetadata(); - metadata.setContentType(contentType); - metadata.setContentLength(file.getSize()); - - // 파일 이름 생성 - UUID randomUUID = UUID.randomUUID(); - String fileName = imageFile.getType() + "/" + randomUUID; - - try { - amazonS3.putObject(new PutObjectRequest(bucket, fileName, file.getInputStream(), metadata) - .withCannedAcl(CannedAccessControlList.PublicRead)); - } catch (AmazonServiceException e) { - log.error("이미지 업로드 중 s3 서비스 예외 발생 : {}", e.getMessage()); - throw new CustomException(S3_SERVICE_EXCEPTION); - } catch (SdkClientException | IOException e) { - log.error("이미지 업로드 중 s3 클라이언트 예외 발생 : {}", e.getMessage()); - throw new CustomException(S3_CLIENT_EXCEPTION); - } - uploadedFileUrlResponseList.add(new UploadedFileUrlResponse(amazonS3.getUrl(bucket, fileName).toString())); + UploadedFileUrlResponse uploadedFileUrlResponse = uploadFile(file, imageFile); + uploadedFileUrlResponseList.add(uploadedFileUrlResponse); } - return uploadedFileUrlResponseList; } @@ -140,8 +109,7 @@ public void deleteExProfile(String email) { } public void deletePostImage(String url) { - String key = getPostImageUrl(url); - deleteFile(key); + deleteFile(url); } private void deleteFile(String fileName) { @@ -158,13 +126,6 @@ private void deleteFile(String fileName) { private String getExProfileImageUrl(String email) { SiteUser siteUser = siteUserRepository.getByEmail(email); - String fileName = siteUser.getProfileImageUrl(); - int domainStartIndex = fileName.indexOf(".com"); - return fileName.substring(domainStartIndex + 5); - } - - private String getPostImageUrl(String url) { - int domainStartIndex = url.indexOf(".com"); - return url.substring(domainStartIndex + 5); + return siteUser.getProfileImageUrl(); } } diff --git a/src/main/java/com/example/solidconnection/s3/urlPrefixResponse.java b/src/main/java/com/example/solidconnection/s3/urlPrefixResponse.java new file mode 100644 index 000000000..59eac23ca --- /dev/null +++ b/src/main/java/com/example/solidconnection/s3/urlPrefixResponse.java @@ -0,0 +1,9 @@ +package com.example.solidconnection.s3; + +public record urlPrefixResponse( + String s3Default, + String s3Uploaded, + String cloudFrontDefault, + String cloudFrontUploaded +) { +} diff --git a/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java b/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java index 0f035c905..892094394 100644 --- a/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java +++ b/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java @@ -19,6 +19,9 @@ public record MyPageResponse( @Schema(description = "생년월일", example = "1990-01-01") String birth, + @Schema(description = "이메일", example = "example@solid-conenct.net") + String email, + @Schema(description = "좋아요 누른 게시물 수", example = "0") int likedPostCount, @@ -34,6 +37,7 @@ public static MyPageResponse of(SiteUser siteUser, int likedUniversityCount) { siteUser.getProfileImageUrl(), siteUser.getRole(), siteUser.getBirth(), + siteUser.getEmail(), 0, // TODO: 커뮤니티 기능 생기면 업데이트 필요 0, // TODO: 멘토 기능 생기면 업데이트 필요 likedUniversityCount diff --git a/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java b/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java index 0ab6aa0d2..793627adf 100644 --- a/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java +++ b/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java @@ -106,7 +106,7 @@ private void validateProfileImage(MultipartFile imageFile) { } private boolean isDefaultProfileImage(String profileImageUrl) { - String prefix = "https://solid-connection-uploaded.s3.ap-northeast-2.amazonaws.com/profile/"; + String prefix = "profile/"; return profileImageUrl == null || !profileImageUrl.startsWith(prefix); } diff --git a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java b/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java index 7dd8b63f9..2f69d6cf7 100644 --- a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java +++ b/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java @@ -39,11 +39,15 @@ class ApplicantsQueryTest extends UniversityDataSetUpEndToEndTest { TokenService tokenService; 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; @@ -60,11 +64,21 @@ public void setUpUserAndToken() { String refreshToken = tokenService.generateToken(email, TokenType.REFRESH); tokenService.saveToken(refreshToken, TokenType.REFRESH); + adminAccessToken = tokenService.generateToken("email5", TokenType.ACCESS); + String adminRefreshToken = tokenService.generateToken("email5", TokenType.REFRESH); + tokenService.saveToken(adminRefreshToken, TokenType.REFRESH); + + user6AccessToken = tokenService.generateToken("email6", TokenType.ACCESS); + String user6RefreshToken = tokenService.generateToken("email6", TokenType.REFRESH); + tokenService.saveToken(user6RefreshToken, TokenType.REFRESH); + // setUp - 사용자 정보 저장 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 - 지원 정보 저장 Gpa gpa = createDummyGpa(); @@ -74,17 +88,22 @@ public void setUpUserAndToken() { 사용자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); - applicationRepository.saveAll(List.of(나의_지원정보, 사용자1_지원정보, 사용자2_지원정보, 사용자3_지원정보, 사용자4_이전학기_지원정보)); + 사용자5_관리자_지원정보.setVerifyStatus(VerifyStatus.APPROVED); + 사용자6_지원정보.setVerifyStatus(VerifyStatus.APPROVED); + applicationRepository.saveAll(List.of(나의_지원정보, 사용자1_지원정보, 사용자2_지원정보, 사용자3_지원정보, 사용자4_이전학기_지원정보, 사용자5_관리자_지원정보, 사용자6_지원정보)); } @Test @@ -236,7 +255,7 @@ public void setUpUserAndToken() { } @Test - void 내가_지원한_대학의_지원자를_조회한다() { + void 경쟁자를_조회한다() { ApplicationsResponse response = RestAssured.given().log().all() .header("Authorization", "Bearer " + accessToken) .when().log().all() @@ -245,6 +264,8 @@ public void setUpUserAndToken() { .statusCode(200) .extract().as(ApplicationsResponse.class); + Integer choicedUniversityCount = 3; + List firstChoiceApplicants = response.firstChoice(); List secondChoiceApplicants = response.secondChoice(); List thirdChoiceApplicants = response.thirdChoice(); @@ -269,9 +290,52 @@ public void setUpUserAndToken() { List.of()), UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, List.of(ApplicantResponse.of(나의_지원정보, true)))); - - assertThat(firstChoiceApplicants.size()).isEqualTo(3); - assertThat(secondChoiceApplicants.size()).isEqualTo(3); - assertThat(thirdChoiceApplicants.size()).isEqualTo(3); + + 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("/application/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("/application/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/MyPageTest.java b/src/test/java/com/example/solidconnection/e2e/MyPageTest.java index 953fddf8b..059e00cde 100644 --- a/src/test/java/com/example/solidconnection/e2e/MyPageTest.java +++ b/src/test/java/com/example/solidconnection/e2e/MyPageTest.java @@ -52,6 +52,7 @@ public void setUpUserAndToken() { assertAll("불러온 마이 페이지 정보가 DB의 정보와 일치한다.", () -> assertThat(myPageResponse.nickname()).isEqualTo(savedSiteUser.getNickname()), () -> assertThat(myPageResponse.birth()).isEqualTo(savedSiteUser.getBirth()), - () -> assertThat(myPageResponse.profileImageUrl()).isEqualTo(savedSiteUser.getProfileImageUrl())); + () -> assertThat(myPageResponse.profileImageUrl()).isEqualTo(savedSiteUser.getProfileImageUrl()), + () -> assertThat(myPageResponse.email()).isEqualTo(savedSiteUser.getEmail())); } } diff --git a/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java b/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java index 7cfeb94c6..860f76e11 100644 --- a/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java +++ b/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java @@ -63,7 +63,7 @@ private SiteUser createSiteUser() { return new SiteUser( "test@example.com", "nickname", - "https://solid-connection-uploaded.s3.ap-northeast-2.amazonaws.com/profile/abcd", + "profile/fajwoiejoiewjfoi", "1999-01-01", PreparationStatus.CONSIDERING, Role.MENTEE, @@ -78,7 +78,7 @@ private MultipartFile createMockImageFile() { } private UploadedFileUrlResponse createUploadedFileUrlResponse() { - return new UploadedFileUrlResponse("https://s3.example.com/test1.png"); + return new UploadedFileUrlResponse("profile/fajwoiejoiewjfoi"); } @Test