From be8850dfdefadb38df45a32ca096401f414eed86 Mon Sep 17 00:00:00 2001 From: Bokyeom <79684339+k-kbk@users.noreply.github.com> Date: Thu, 9 Jan 2025 19:39:04 +0900 Subject: [PATCH] =?UTF-8?q?[DEV-52]=20=EC=99=B8=EA=B5=AD=EC=9D=B8=20?= =?UTF-8?q?=ED=95=99=EC=83=9D=20=EA=B2=80=EC=82=AC=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?(#298)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 외국인학생 공통교양 요건(한국어) 검사 추가 * refactor: 익명 사용자 확인 메서드 추가 * style: formatting * refactor: 한국어 레벨 추가 * feat: 외국인학생 채플/기독교 영역 검사 * refactor: 변수명 수정 * refactor: 한국어 레벨 속성 추가 * refactor: 기타 수정 * feat: 경영학과 외국인학생 전공필수 검사 추가 * refactor: null 체크 * style: formatting * fix: conflict 해결 --- .../CheckGraduationRequirementController.java | 1 + .../CheckGraduationRequirementRequest.java | 19 +- .../service/CalculateGraduationService.java | 42 +- .../CheckGraduationRequirementService.java | 49 +- .../graduation/domain/model/ChapelResult.java | 6 + .../domain/model/DetailCategoryResult.java | 8 +- .../CommonCultureDetailCategoryManager.java | 156 +++-- .../CommonGraduationManager.java | 20 +- .../CoreCultureDetailCategoryManager.java | 41 +- .../service/major/MajorGraduationManager.java | 35 +- .../service/major/MandatoryMajorManager.java | 16 +- .../domain/model/CommonCultureCategory.java | 9 +- .../service/ParsingAnonymousService.java | 51 +- .../usecase/ParsingAnonymousUseCase.java | 7 +- .../service/signup/SignUpService.java | 8 +- .../UpdateStudentInformationService.java | 3 +- .../usecase/signup/SignUpCommand.java | 15 +- .../user/domain/model/College.java | 19 +- .../user/domain/model/KoreanLevel.java | 11 + .../user/domain/model/User.java | 111 +++- .../fixture/CommonCultureFixture.java | 19 + .../fixture/UserFixture.java | 497 +++++++++++++--- .../CalculateMajorGraduationServiceTest.java | 535 +++++++++--------- .../domain/model/GraduationResultTest.java | 24 +- ...ommonCultureDetailCategoryManagerTest.java | 56 +- .../CoreCultureDetailCategoryManagerTest.java | 50 +- .../major/DataTechnologyMajorTest.java | 22 +- .../SubMajorGraduationManagerTest.java | 14 +- ...ademicalCulturePersistenceAdapterTest.java | 8 +- ...ndCommonCulturePersistenceAdapterTest.java | 8 +- ...FindCoreCulturePersistenceAdapterTest.java | 2 +- .../FindMajorPersistenceAdapterTest.java | 2 +- .../service/ParsingAnonymousServiceTest.java | 3 + .../support/WebAdaptorTestSupport.java | 40 +- .../user/domain/model/UserTest.java | 11 +- 35 files changed, 1331 insertions(+), 587 deletions(-) create mode 100644 src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/KoreanLevel.java diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CheckGraduationRequirementController.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CheckGraduationRequirementController.java index fca7e701..b4499fdd 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CheckGraduationRequirementController.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/CheckGraduationRequirementController.java @@ -29,6 +29,7 @@ public CheckGraduationRequirementResponse checkGraduationRequirement( ) { ParsingAnonymousDto parsingAnonymousDto = parsingAnonymousUseCase.parseAnonymous( checkGraduationRequirementRequest.getEngLv(), + checkGraduationRequirementRequest.getKorLv(), checkGraduationRequirementRequest.getParsingText() ); User anonymous = parsingAnonymousDto.getAnonymous(); diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/request/CheckGraduationRequirementRequest.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/request/CheckGraduationRequirementRequest.java index 69b0b975..44827bdc 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/request/CheckGraduationRequirementRequest.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/api/dto/request/CheckGraduationRequirementRequest.java @@ -1,6 +1,7 @@ package com.plzgraduate.myongjigraduatebe.graduation.api.dto.request; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; +import com.plzgraduate.myongjigraduatebe.user.domain.model.KoreanLevel; import io.swagger.v3.oas.annotations.media.Schema; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -13,20 +14,32 @@ public class CheckGraduationRequirementRequest { @NotBlank(message = "영어 레벨을 입력해 주세요.") - @Schema(name = "engLv", example = "ENG34") + @Schema(name = "engLv", example = "ENG12") private String engLv; + @NotBlank(message = "한국어 레벨을 입력해 주세요.") + @Schema(name = "korLv", example = "FREE") + private String korLv; + @NotNull(message = "parsingText는 null 값이 될 수 없습니다.") - @Schema(name = "parsingText", example = "2023/12/08|1/1|ICT융합대학 융합소프트웨어학부 데이터테크놀로지전공, 나경호(60202455), 현학적 - 재학, 이수 - 3, 입학 - 신입학(2020/03/02)|토익 - 715, 영어교과목면제 - 면제없음, 최종학적변동 - 2/1전과(2023/01/27), 전과내역 - 기계공학과|편입생 인정학점 - 교양 0, 전공 0, 자유선택 0, 성경과인간이해 0|교환학생 인정학점 - 학문기초교양 0, 일반교양 0, 전공 0, 복수전공학문기초교양 0, 복수전공 0, 연계전공 0, 부전공 0, 자유선택 0|공통교양 16.5, 핵심교양 6, 학문기초교양 6, 일반교양 12, 전공 9, 복수전공 0, 연계전공 0, 부전공 0, 교직 0, 자유선택 7|총 취득학점 - 56.5, 총점 - 230.5, 평균평점 - 4.43|이수구분|수강년도/학기|한글코드|과목코드|과목명|학점|등급|중복|공통교양|2020년 2학기|교필141|KMA02141|4차산업혁명과미래사회진로선택|2|P|공통교양|2020년 2학기|교필122|KMA02122|기독교와문화|2|A+|공통교양|2023년 1학기|교필105|KMA02105|발표와토의|3|A0|공통교양|2020년 1학기|교필127|KMA00101|성서와인간이해|2|A+|공통교양|2020년 1학기|교필123|KMA02123|영어3|2|A+|공통교양|2020년 2학기|교필124|KMA02124|영어4|2|A+|공통교양|2020년 1학기|교필125|KMA02125|영어회화3|1|A0|공통교양|2020년 2학기|교필126|KMA02126|영어회화4|1|A+|공통교양|2020년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2020년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2023년 1학기|교필101|KMA02101|채플|0.5|P|핵심교양|2023년 1학기|교선128|KMA02128|글로벌문화|3|A0|핵심교양|2023년 1학기|교선114|KMA02114|민주주의와현대사회|3|A+|학문기초교양|2020년 1학기|기자111|KME02111|물리학1|3|A+|학문기초교양|2020년 1학기|기자101|KME02101|미적분학1|3|A+|일반교양|2020년 2학기|기자112|KME02112|물리학2|3|A+|일반교양|2020년 1학기|기자113|KME02113|물리학실험1|1|A+|일반교양|2020년 2학기|기자114|KME02114|물리학실험2|1|A+|일반교양|2020년 2학기|기자102|KME02102|미적분학2|3|A+|일반교양|2020년 1학기|기자121|KME02121|일반화학|3|A+|일반교양|2020년 1학기|기자122|KME02122|일반화학실험|1|A+|전공1단계|2023년 1학기|데테202|HED01202|R통계분석|3|A+|전공1단계|2023년 1학기|융소102|HEB01102|기초프로그래밍|3|A+|전공1단계|2023년 1학기|데테201|HED01201|자료구조|3|A+|자유선택|2020년 2학기|공과100|JEA00100|공학입문설계|3|A+|자유선택|2020년 1학기|기계207|JEP01207|기계신입생세미나|1|P|자유선택|2020년 2학기|기계209|JEP02209|정역학|3|A+|") + @Schema( + name = "parsingText", + example = "출력일자 : 2024/11/20|1/1|ICT융합대학 융합소프트웨어학부 데이터테크놀로지전공, 김보겸(60211648), 현학적 - 재학, 이수 - 6, 입학 - 신입학(2021/03/02)|토익 - 535, 영어교과목면제 - 면제없음, 최종학적변동 - 불일치복학(2023/01/09)|편입생 인정학점 - 교양 0, 전공 0, 자유선택 0, 성경과인간이해 0|교환학생 인정학점 - 학문기초교양 0, 일반교양 0, 전공 0, 복수전공학문기초교양 0, 복수전공 0, 융합전공 0, 부전공 0, 자유선택 0|공통교양 17, 핵심교양 12, 학문기초교양 15, 일반교양 14, 전공 50, 복수전공 0, 연계전공 0, 부전공 0, 교직 0, 자유선택 0|총 취득학점 - 108, 총점 - 441.5, 평균평점 - 4.33|이수구분|수강년도/학기|한글코드|과목코드|과목명|학점|등급|중복|공통교양|2023년 2학기|교필141|KMA02141|4차산업혁명과미래사회진로선택|2|P|공통교양|2021년 2학기|교필105|KMA02105|발표와토의|3|A0|공통교양|2021년 2학기|교필127|KMA00101|성서와인간이해|2|A0|공통교양|2021년 1학기|교필106|KMA02106|영어1|2|A+|공통교양|2021년 2학기|교필107|KMA02107|영어2|2|A+|공통교양|2021년 1학기|교필108|KMA02108|영어회화1|1|A+|공통교양|2021년 2학기|교필109|KMA02109|영어회화2|1|A0|공통교양|2021년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2021년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2022년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2023년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2021년 2학기|교필102|KMA02102|현대사회와기독교윤리|2|A0|핵심교양|2022년 1학기|교선128|KMA02128|글로벌문화|3|A+|핵심교양|2021년 1학기|교선114|KMA02114|민주주의와현대사회|3|A+|핵심교양|2021년 2학기|교선112|KMA02112|역사와문명|3|A0|핵심교양|2021년 1학기|교선135|KMA02135|우주,생명,마음|3|B+|학문기초교양|2023년 1학기|기사133|KMD02133|ICT비즈니스와경영|3|A0|학문기초교양|2023년 1학기|기사134|KMD02134|마케팅과ICT융합기술|3|A0|학문기초교양|2021년 1학기|기인107|KMB02107|인간심리의이해|3|A+|학문기초교양|2021년 2학기|기사135|KMD02135|저작권과소프트웨어|3|A+|학문기초교양|2022년 1학기|기컴112|KMI02112|컴퓨터논리의이해|3|B+|일반교양|2022년 1학기|균인131|KMK02131|사랑의인문학(KCU)|3|A0|일반교양|2021년 1학기|기컴125|KMI02125|생활속의스마트IT(KCU)|3|A+|일반교양|2024년 1학기|기문227|KMC02227|인류문명과기록문화로의여행|3|A+|일반교양|2024년 1학기|균사181|KMM02181|자기경영과실전취업준비|2|A+|일반교양|2024년 1학기|기컴126|KMI02126|파이썬프로그래밍입문|3|A+|전공1단계|2022년 1학기|데테202|HED01202|R통계분석|3|A+|전공1단계|2022년 1학기|데테316|HED01316|고급웹프로그래밍|3|A+|전공1단계|2023년 2학기|데테206|HED01206|기초웹프로그래밍|3|A+|전공1단계|2021년 1학기|융소102|HEB01102|기초프로그래밍|3|A+|전공1단계|2021년 2학기|융소105|HEB01105|기초프로그래밍2|3|A+|전공1단계|2023년 1학기|데테318|HED01203|데이터베이스|3|A+|전공1단계|2024년 1학기|데테319|HED01318|모바일컴퓨팅|3|A+|전공1단계|2023년 2학기|데테403|HED01403|블록체인기초|3|A+|전공1단계|2024년 1학기|데테404|HED01404|빅데이터기술특론1|3|A+|전공1단계|2023년 1학기|데테301|HED01301|소프트웨어공학|3|A+|전공1단계|2023년 2학기|데테209|HED01307|알고리즘|3|A+|전공1단계|2023년 2학기|데테303|HED01303|운영체제|3|A+|전공1단계|2023년 2학기|데테311|HED01311|자기주도학습|2|P|전공1단계|2022년 1학기|데테201|HED01201|자료구조|3|A+|전공1단계|2024년 1학기|데테413|HED01413|캡스톤디자인|3|A+|전공1단계|2023년 1학기|데테309|HED01309|컴퓨터아키텍쳐|3|A0|전공1단계|2023년 2학기|데테313|HED01313|컴퓨터통신|3|A+|" + ) private String parsingText; @Builder - public CheckGraduationRequirementRequest(String engLv, String parsingText) { + public CheckGraduationRequirementRequest(String engLv, String korLv, String parsingText) { this.engLv = engLv; + this.korLv = korLv; this.parsingText = parsingText; } public EnglishLevel getEngLv() { return EnglishLevel.valueOf(engLv); } + + public KoreanLevel getKorLv() { + return KoreanLevel.valueOf(korLv); + } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java index af467d27..a895d479 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateGraduationService.java @@ -2,7 +2,13 @@ import com.plzgraduate.myongjigraduatebe.core.meta.UseCase; import com.plzgraduate.myongjigraduatebe.graduation.application.usecase.CalculateGraduationUseCase; -import com.plzgraduate.myongjigraduatebe.graduation.domain.model.*; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.ChapelResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DefaultGraduationRequirementType; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailGraduationResult; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationCategory; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationRequirement; +import com.plzgraduate.myongjigraduatebe.graduation.domain.model.GraduationResult; import com.plzgraduate.myongjigraduatebe.lecture.application.port.FindBasicAcademicalCulturePort; import com.plzgraduate.myongjigraduatebe.takenlecture.application.usecase.find.FindTakenLectureUseCase; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; @@ -31,19 +37,20 @@ class CalculateGraduationService implements CalculateGraduationUseCase { @Override - public GraduationResult calculateGraduation(User user) { + public GraduationResult calculateGraduation(User user) { GraduationRequirement graduationRequirement = determineGraduationRequirement(user); TakenLectureInventory takenLectureInventory = findTakenLectureUseCase.findTakenLectures( user.getId() ); - ChapelResult chapelResult = generateChapelResult(takenLectureInventory); List detailGraduationResults = generateDetailGraduationResults( user, takenLectureInventory, graduationRequirement ); + ChapelResult chapelResult = generateChapelResult(user, takenLectureInventory); + GraduationResult graduationResult = generateGraduationResult( chapelResult, detailGraduationResults, @@ -80,22 +87,31 @@ DetailGraduationResult generateTransferChristianDetailGraduationResult( ); } - private double calculateChristianTakenCredits(User user, TakenLectureInventory takenLectureInventory) { - if (!user.getAuthId().equals("anonymous")) { + private double calculateChristianTakenCredits( + User user, + TakenLectureInventory takenLectureInventory + ) { + if (!user.isAnonymous()) { takenLectureInventory = findTakenLectureUseCase.findTakenLectures(user.getId()); } return takenLectureInventory.calculateChristianCredits(); } - GraduationRequirement determineGraduationRequirement(User user) { + public GraduationRequirement determineGraduationRequirement(User user) { College userCollage = College.findBelongingCollege(user.getPrimaryMajor()); DefaultGraduationRequirementType defaultGraduationRequirement = DefaultGraduationRequirementType.determineGraduationRequirement(userCollage, user); return defaultGraduationRequirement.convertToProfitGraduationRequirement(user); } - ChapelResult generateChapelResult(TakenLectureInventory takenLectureInventory) { + public ChapelResult generateChapelResult( + User user, + TakenLectureInventory takenLectureInventory + ) { + if (user.isChapleReplaced()) { + return ChapelResult.replaced(); + } ChapelResult chapelResult = ChapelResult.create(takenLectureInventory); chapelResult.checkCompleted(); return chapelResult; @@ -109,7 +125,11 @@ List generateDetailGraduationResults( List detailGraduationResults = new ArrayList<>(); if (user.getStudentCategory() == StudentCategory.TRANSFER) { detailGraduationResults.add( - generateTransferChristianDetailGraduationResult(user, graduationRequirement, takenLectureInventory) + generateTransferChristianDetailGraduationResult( + user, + graduationRequirement, + takenLectureInventory + ) ); } else { detailGraduationResults.addAll(List.of( @@ -188,7 +208,11 @@ GraduationResult generateGraduationResult( chapelResult, detailGraduationResults ); - graduationResult.handleLeftTakenLectures(takenLectureInventory, graduationRequirement, user); + graduationResult.handleLeftTakenLectures( + takenLectureInventory, + graduationRequirement, + user + ); graduationResult.checkGraduated(graduationRequirement, user); return graduationResult; } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CheckGraduationRequirementService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CheckGraduationRequirementService.java index c0f9d922..171501e8 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CheckGraduationRequirementService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CheckGraduationRequirementService.java @@ -28,33 +28,32 @@ public GraduationResult checkGraduationRequirement( User anonymous, TakenLectureInventory takenLectureInventory ) { - Set takenLectureWithDuplicateCode = takenLectureInventory.getTakenLectures() - .stream() - .map(takenLecture -> TakenLecture.of( - anonymous, - findLecturePort.findLectureById(takenLecture.getLecture().getId()), - takenLecture.getYear(), - takenLecture.getSemester() - ) - ).collect(Collectors.toSet()); + Set takenLectureWithDuplicateCode = getTakenLectureWithDuplicateCode( + anonymous, + takenLectureInventory + ); - TakenLectureInventory takenLectureInventoryWithDuplicateCode = TakenLectureInventory.from( - takenLectureWithDuplicateCode); + TakenLectureInventory takenLectureInventoryWithDuplicateCode = + TakenLectureInventory.from(takenLectureWithDuplicateCode); GraduationRequirement graduationRequirement = calculateGraduationService.determineGraduationRequirement(anonymous); - ChapelResult chapelResult = - calculateGraduationService.generateChapelResult(takenLectureInventoryWithDuplicateCode); - if (anonymous.getStudentCategory() == StudentCategory.TRANSFER) { - chapelResult.checkAnonymousTransferUserChapelCount(); - } - List detailGraduationResults = calculateGraduationService.generateDetailGraduationResults( anonymous, takenLectureInventoryWithDuplicateCode, graduationRequirement ); + + ChapelResult chapelResult = calculateGraduationService.generateChapelResult( + anonymous, + takenLectureInventoryWithDuplicateCode + ); + + if (anonymous.getStudentCategory() == StudentCategory.TRANSFER) { + chapelResult.checkAnonymousTransferUserChapelCount(); + } + GraduationResult graduationResult = calculateGraduationService.generateGraduationResult( chapelResult, detailGraduationResults, @@ -63,6 +62,22 @@ public GraduationResult checkGraduationRequirement( anonymous ); calculateGraduationService.handleDuplicatedTakenCredit(anonymous, graduationResult); + return graduationResult; } + + private Set getTakenLectureWithDuplicateCode( + User anonymous, + TakenLectureInventory takenLectureInventory + ) { + return takenLectureInventory.getTakenLectures() + .stream() + .map(takenLecture -> TakenLecture.of( + anonymous, + findLecturePort.findLectureById(takenLecture.getLecture().getId()), + takenLecture.getYear(), + takenLecture.getSemester() + ) + ).collect(Collectors.toSet()); + } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/ChapelResult.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/ChapelResult.java index a3ee3c78..64972ce6 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/ChapelResult.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/ChapelResult.java @@ -28,6 +28,12 @@ public static ChapelResult create(TakenLectureInventory takenLectureInventory) { .build(); } + public static ChapelResult replaced() { + return ChapelResult.builder() + .isCompleted(true) + .build(); + } + private static int countTakenChapel(TakenLectureInventory takenLectureInventory) { return (int) takenLectureInventory.getTakenLectures() .stream() diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailCategoryResult.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailCategoryResult.java index cc1f7453..8ff54398 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailCategoryResult.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/DetailCategoryResult.java @@ -7,7 +7,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; - import lombok.Builder; import lombok.Getter; @@ -15,9 +14,9 @@ public class DetailCategoryResult { private final boolean isSatisfiedMandatory; - private final int totalCredits; private final List takenLectures = new ArrayList<>(); private final List haveToLectures = new ArrayList<>(); + private int totalCredits; private String detailCategoryName; private boolean isCompleted; private int takenCredits; @@ -116,16 +115,19 @@ private void addMandatoryLectures(Set taken, Set graduationLec graduationLectures.stream() .filter(graduationLecture -> graduationLecture.getIsRevoked() == 0) .forEach(haveToLectures::add); - } private boolean checkCompleted() { isCompleted = totalCredits <= takenCredits && isSatisfiedMandatory; return isCompleted; } + public void addTakenCredits(int credits) { this.takenCredits += credits; checkCompleted(); } + public void addChapleCreditToChritain() { + this.totalCredits += (int) (ChapelResult.CHAPEL_CREDIT * ChapelResult.GRADUATION_COUNT); + } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java index 3c76c60c..4670452a 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManager.java @@ -1,11 +1,9 @@ package com.plzgraduate.myongjigraduatebe.graduation.domain.service.commonculture; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.CHRISTIAN_A; +import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.CHRISTIAN_B; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.ENGLISH; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel.BASIC; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel.ENG12; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel.ENG34; -import static com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel.FREE; +import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.KOREAN; import com.plzgraduate.myongjigraduatebe.graduation.domain.model.DetailCategoryResult; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; @@ -13,6 +11,8 @@ import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; +import com.plzgraduate.myongjigraduatebe.user.domain.model.KoreanLevel; import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import java.util.HashSet; @@ -24,78 +24,132 @@ @Component class CommonCultureDetailCategoryManager { - private static final List CHRISTAIN_MANDATORY_LECTURE_CODE_LIST = - List.of("KMA02100", "KMA00100", "KMA00101"); // 성경개론, 성서의이해, 성서와인간이해 - private static final String BASIC_ENGLISH_LECTURE_CODE = "KMP02126"; - private static final List ENGLISH_12_MANDATORY_LECTURE_CODE_LIST = - List.of("KMA02106", "KMA02107", "KMA02108", "KMA02109"); // 영어1, 영어2, 영어회화1, 영어회화2 - private static final List ENGLISH_34_MANDATORY_LECTURE_CODE_LIST = - List.of("KMA02123", "KMA02124", "KMA02125", "KMA02126"); // 영어3, 영어4, 영어회화3, 영어회화4 - - public DetailCategoryResult generate(User user, TakenLectureInventory takenLectureInventory, - Set graduationLectures, CommonCultureCategory category) { + private static final List CHRISTAIN_MANDATORY_LECTURE_CODE_LIST = List.of( + "KMA02100", + "KMA00100", + "KMA00101" + ); // 성경개론, 성서의이해, 성서와인간이해 + private static final String BASIC_ENGLISH_LECTURE_CODE = "KMP02126"; // 기초영어 + private static final List ENGLISH_12_MANDATORY_LECTURE_CODE_LIST = List.of( + "KMA02106", + "KMA02107", + "KMA02108", + "KMA02109" + ); // 영어1, 영어2, 영어회화1, 영어회화2 + private static final List ENGLISH_34_MANDATORY_LECTURE_CODE_LIST = List.of( + "KMA02123", + "KMA02124", + "KMA02125", + "KMA02126" + ); // 영어3, 영어4, 영어회화3, 영어회화4 + private static final List KOREAN_12_MANDATORY_LECTURE_CODE_LIST = List.of( + "KMA02147", + "KMA02148", + "KMA02143", + "KMA02144" + ); // 한국어1, 한국어2, 한국어연습1, 한국어연습2 + private static final List KOREAN_34_MANDATORY_LECTURE_CODE_LIST = List.of( + "KMA02149", + "KMA02150", + "KMA02145", + "KMA02146" + ); // 한국어3, 한국어4, 한국어연습3, 한국어연습4 + public DetailCategoryResult generate( + User user, + TakenLectureInventory takenLectureInventory, + Set graduationLectures, + CommonCultureCategory category + ) { if (user.getStudentCategory() == StudentCategory.TRANSFER) { - return DetailCategoryResult.create( - category.getName(), true, 0 - ); + return DetailCategoryResult.create(category.getName(), true, 0); } - Set graduationCommonCultureLectures = categorizeCommonCultures(graduationLectures, - category); + Set graduationCommonCultureLectures = categorizeCommonCultures( + graduationLectures, + category + ); Set finishedTakenLecture = new HashSet<>(); Set taken = new HashSet<>(); takenLectureInventory.getTakenLectures() .stream() - .filter( - takenLecture -> graduationCommonCultureLectures.contains(takenLecture.getLecture())) + .filter(takenLecture -> graduationCommonCultureLectures.contains(takenLecture.getLecture())) .forEach(takenLecture -> { finishedTakenLecture.add(takenLecture); taken.add(takenLecture.getLecture()); }); - boolean isSatisfiedMandatory = checkMandatorySatisfaction(user, takenLectureInventory, - category); + boolean isSatisfiedMandatory = checkMandatorySatisfaction( + user, + takenLectureInventory, + category + ); takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture); DetailCategoryResult commonCultureDetailCategoryResult = DetailCategoryResult.create( - category.getName(), isSatisfiedMandatory, checkCategoryTotalCredit(user, category)); + category.getName(), + isSatisfiedMandatory, + checkCategoryTotalCredit(user, category) + ); + checkForignerStudentChristian(user, taken, category, commonCultureDetailCategoryResult); commonCultureDetailCategoryResult.calculate(taken, graduationCommonCultureLectures); return commonCultureDetailCategoryResult; } + private void checkForignerStudentChristian( + User user, + Set taken, + CommonCultureCategory category, + DetailCategoryResult commonCultureDetailCategoryResult + ) { + if (user.isForeignerStudent() && (category == CHRISTIAN_A || category == CHRISTIAN_B)) { + if (taken.size() == 3) { + user.replaceChaple(); + commonCultureDetailCategoryResult.addChapleCreditToChritain(); + } + } + } + private int checkCategoryTotalCredit(User user, CommonCultureCategory commonCultureCategory) { - if (user.getEnglishLevel() == FREE && commonCultureCategory == ENGLISH) { + if (user.getEnglishLevel() == EnglishLevel.FREE && commonCultureCategory == ENGLISH || + user.getKoreanLevel() == KoreanLevel.FREE && commonCultureCategory == KOREAN) { return 0; } return commonCultureCategory.getTotalCredit(); } - private Set categorizeCommonCultures(Set graduationLectures, - CommonCultureCategory category) { + private Set categorizeCommonCultures( + Set graduationLectures, CommonCultureCategory category + ) { return graduationLectures.stream() .filter(commonCulture -> commonCulture.getCommonCultureCategory() == category) .map(CommonCulture::getLecture) .collect(Collectors.toSet()); } - private boolean checkMandatorySatisfaction(User user, - TakenLectureInventory takenLectureInventory, - CommonCultureCategory category) { + private boolean checkMandatorySatisfaction( + User user, TakenLectureInventory takenLectureInventory, CommonCultureCategory category + ) { if (category == CHRISTIAN_A) { return takenLectureInventory.getTakenLectures() .stream() - .anyMatch( - takenLecture -> CHRISTAIN_MANDATORY_LECTURE_CODE_LIST - .contains(takenLecture.getLecture().getId())); + .anyMatch(takenLecture -> CHRISTAIN_MANDATORY_LECTURE_CODE_LIST.contains( + takenLecture.getLecture().getId())); } - if (user.getEnglishLevel() == BASIC && category == ENGLISH) { - return isTakenBasicEnglish(takenLectureInventory) && checkEnglish12Satisfaction( - takenLectureInventory); + if (user.getEnglishLevel() == EnglishLevel.BASIC && category == ENGLISH) { + return isTakenBasicEnglish(takenLectureInventory) && + checkEnglish12Satisfaction(takenLectureInventory); } - if (user.getEnglishLevel() == ENG12 && category == ENGLISH) { + if (user.getEnglishLevel() == EnglishLevel.ENG12 && category == ENGLISH) { return checkEnglish12Satisfaction(takenLectureInventory); } - if (user.getEnglishLevel() == ENG34 && category == ENGLISH) { + if (user.getEnglishLevel() == EnglishLevel.ENG34 && category == ENGLISH) { return checkEnglish34Satisfaction(takenLectureInventory); } + if (user.getKoreanLevel() == KoreanLevel.KOR12 && category == KOREAN) { + return checkKorean12Satisfaction(takenLectureInventory); + } + if (user.getKoreanLevel() == KoreanLevel.KOR34 && category == KOREAN) { + return checkKorean34Satisfaction(takenLectureInventory); + } + return true; } @@ -132,4 +186,30 @@ private boolean checkEnglish34Satisfaction(TakenLectureInventory takenLectureInv } return true; } + + private boolean checkKorean12Satisfaction(TakenLectureInventory takenLectureInventory) { + for (String lectureCode : KOREAN_12_MANDATORY_LECTURE_CODE_LIST) { + if (!takenLectureInventory.getCultureLectures() + .stream() + .map(takenLecture -> takenLecture.getLecture().getId()) + .collect(Collectors.toList()) + .contains(lectureCode)) { + return false; + } + } + return true; + } + + private boolean checkKorean34Satisfaction(TakenLectureInventory takenLectureInventory) { + for (String lectureCode : KOREAN_34_MANDATORY_LECTURE_CODE_LIST) { + if (!takenLectureInventory.getCultureLectures() + .stream() + .map(takenLecture -> takenLecture.getLecture().getId()) + .collect(Collectors.toList()) + .contains(lectureCode)) { + return false; + } + } + return true; + } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonGraduationManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonGraduationManager.java index 090e2a6a..4e032dc4 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonGraduationManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonGraduationManager.java @@ -28,16 +28,16 @@ public DetailGraduationResult createDetailGraduationResult( int commonCultureGraduationTotalCredit ) { CommonCultureDetailCategoryManager commonCultureDetailCategoryManager = new CommonCultureDetailCategoryManager(); - List commonCultureDetailCategoryResults = Arrays.stream( - CommonCultureCategory.values()) - .filter(commonCultureCategory -> commonCultureCategory.isContainsEntryYear(user.getEntryYear())) - .map(commonCultureCategory -> commonCultureDetailCategoryManager.generate( - user, - takenLectureInventory, - graduationLectures, - commonCultureCategory - )) - .collect(Collectors.toList()); + List commonCultureDetailCategoryResults = + Arrays.stream(CommonCultureCategory.values()) + .filter(commonCultureCategory -> commonCultureCategory.isContainsEntryYear(user.getEntryYear())) + .map(commonCultureCategory -> commonCultureDetailCategoryManager.generate( + user, + takenLectureInventory, + graduationLectures, + commonCultureCategory + )) + .collect(Collectors.toList()); DetailGraduationResult detailGraduationResult = DetailGraduationResult.create( COMMON_CULTURE, diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManager.java index 3dd71582..d8d901a7 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManager.java @@ -22,23 +22,26 @@ public class CoreCultureDetailCategoryManager { private static final List ICT_DEPARTMENTS = List.of( "응용소프트웨어", "데이터테크놀로지", - "디지털콘텐츠디자인"); + "디지털콘텐츠디자인" + ); private static final Lecture 과학과기술_예외_과목 = Lecture.from("KMA02136"); private static final Set 문화와예술_예외_과목 = Set.of( Lecture.from("KMA02155"), - Lecture.from("KMA02156")); - - public DetailCategoryResult generate(User user, TakenLectureInventory takenLectureInventory, - Set graduationLectures, CoreCultureCategory category) { + Lecture.from("KMA02156") + ); + public DetailCategoryResult generate( + User user, TakenLectureInventory takenLectureInventory, + Set graduationLectures, CoreCultureCategory category + ) { if (user.getStudentCategory() == StudentCategory.TRANSFER) { - return DetailCategoryResult.create( - category.getName(), true, 0 - ); + return DetailCategoryResult.create(category.getName(), true, 0); } - Set graduationCoreCultureLectures = categorizeCoreCultures(graduationLectures, - category); + Set graduationCoreCultureLectures = categorizeCoreCultures( + graduationLectures, + category + ); Set finishedTakenLecture = new HashSet<>(); Set taken = new HashSet<>(); takenLectureInventory.getTakenLectures() @@ -60,16 +63,20 @@ public DetailCategoryResult generate(User user, TakenLectureInventory takenLectu return commonCultureDetailCategoryResult; } - private Set categorizeCoreCultures(Set graduationLectures, - CoreCultureCategory category) { + private Set categorizeCoreCultures( + Set graduationLectures, + CoreCultureCategory category + ) { return graduationLectures.stream() .filter(coreCulture -> coreCulture.getCoreCultureCategory() == category) .map(CoreCulture::getLecture) .collect(Collectors.toSet()); } - private void calculateFreeElectiveLeftCredit(User user, Set taken, - DetailCategoryResult commonCultureDetailCategoryResult) { + private void calculateFreeElectiveLeftCredit( + User user, Set taken, + DetailCategoryResult commonCultureDetailCategoryResult + ) { if (ICT_DEPARTMENTS.contains(user.getPrimaryMajor()) && (taken.contains(과학과기술_예외_과목))) { taken.remove(과학과기술_예외_과목); int exceptionLectureCredit = 3; @@ -77,9 +84,11 @@ private void calculateFreeElectiveLeftCredit(User user, Set taken, } } - private void calculateNormalLeftCredit(Set taken, + private void calculateNormalLeftCredit( + Set taken, Set finishedTakenLecture, - DetailCategoryResult commonCultureDetailCategoryResult) { + DetailCategoryResult commonCultureDetailCategoryResult + ) { List cultureAndArtExceptionLectures = finishedTakenLecture.stream() .filter(takenLecture -> 문화와예술_예외_과목.contains(takenLecture.getLecture()) && takenLecture.getYear() == 2022 diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationManager.java index 47b13d2a..43a5fa56 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MajorGraduationManager.java @@ -8,6 +8,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; +import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -18,6 +19,9 @@ @RequiredArgsConstructor public class MajorGraduationManager { + private static final int 경영학과_외국인학생_전공필수_학번 = 22; + private static final List 국제학생을위한경영학개론_과목코드 = Arrays.asList("HCA02507", "HCA02508"); + private final MandatoryMajorManager mandatoryMajorManager; private final ElectiveMajorManager electiveMajorManager; @@ -29,9 +33,11 @@ public class MajorGraduationManager { * @param graduationResultTotalCredit 해당 사용자의 전공 졸업 학점 * @return 전공 카테고리에 대한 졸업 결과 반환 */ - public DetailGraduationResult createDetailGraduationResult(User user, MajorType majorType, + public DetailGraduationResult createDetailGraduationResult( + User user, MajorType majorType, TakenLectureInventory takenLectureInventory, Set majorLectures, - int graduationResultTotalCredit) { + int graduationResultTotalCredit + ) { removeDuplicateLectureIfTaken(takenLectureInventory, majorLectures); changeMandatoryToElectiveByMajorRange(user, majorLectures); @@ -39,6 +45,16 @@ public DetailGraduationResult createDetailGraduationResult(User user, MajorType Set mandatoryLectures = filterMandatoryLectures(majorLectures); Set electiveLectures = filterElectiveLectures(majorLectures); + if (user.isForeignerStudent() + && user.isAnyMajorMatched("경영학과") + && user.checkAfterEntryYear(경영학과_외국인학생_전공필수_학번)) { + Set 국제학생을위한경영학개론 = electiveLectures.stream() + .filter(lecture -> 국제학생을위한경영학개론_과목코드.contains(lecture.getId())) + .collect(Collectors.toSet()); + mandatoryLectures.addAll(국제학생을위한경영학개론); + electiveLectures.removeAll(국제학생을위한경영학개론); + } + DetailCategoryResult mandantoryDetailCategoryResult = mandatoryMajorManager.createDetailCategoryResult( user, takenLectureInventory, mandatoryLectures, electiveLectures, majorType); @@ -49,7 +65,8 @@ public DetailGraduationResult createDetailGraduationResult(User user, MajorType return DetailGraduationResult.createNonCategorizedGraduationResult( graduationResultTotalCredit, - List.of(mandantoryDetailCategoryResult, electiveDetailCategoryResult)); + List.of(mandantoryDetailCategoryResult, electiveDetailCategoryResult) + ); } /** @@ -77,8 +94,10 @@ private Set filterElectiveLectures(Set majorLectures) { * 사용자가 B과목을 들었다면 A,C는 전공과목에서 삭제한다. 사용자가 B과목을 들었다면 A,C는 전공과목에서 삭제한다. B과목만 takenLectures(수강했던 * 전공과목)에 넣어주면 되고 A,C 과목은 haveToTLectures(들어야하는 전공과목)에 넣어주면 안되기 떄문이다. */ - private void removeDuplicateLectureIfTaken(TakenLectureInventory takenLectureInventory, - Set graduationLectures) { + private void removeDuplicateLectureIfTaken( + TakenLectureInventory takenLectureInventory, + Set graduationLectures + ) { Set duplicatedTakenLectures = findDuplicatedTakenLecture(takenLectureInventory); graduationLectures.removeIf(graduationLecture -> duplicatedTakenLectures.stream() @@ -102,8 +121,10 @@ private Set findDuplicatedTakenLecture(TakenLectureInventory takenLectu .collect(Collectors.toSet()); } - private void changeMandatoryToElectiveByMajorRange(User user, - Set majorsLectures) { + private void changeMandatoryToElectiveByMajorRange( + User user, + Set majorsLectures + ) { majorsLectures.forEach(major -> major.changeMandatoryToElectiveByEntryYearRange(user.getEntryYear())); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java index da777878..a729bcae 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/MandatoryMajorManager.java @@ -20,9 +20,11 @@ public class MandatoryMajorManager { private final List mandatoryMajorSpecialCaseHandlers; - public DetailCategoryResult createDetailCategoryResult(User user, + public DetailCategoryResult createDetailCategoryResult( + User user, TakenLectureInventory takenLectureInventory, - Set mandatoryLectures, Set electiveLectures, MajorType majorType) { + Set mandatoryLectures, Set electiveLectures, MajorType majorType + ) { Set takenMandatory = new HashSet<>(); Set finishedTakenLecture = new HashSet<>(); boolean isSatisfiedMandatory = true; @@ -46,14 +48,17 @@ public DetailCategoryResult createDetailCategoryResult(User user, }); DetailCategoryResult majorMandatoryResult = DetailCategoryResult.create( MANDATORY_MAJOR_NAME, isSatisfiedMandatory, - calculateTotalCredit(takenMandatory, mandatoryLectures, removeMandatoryTotalCredit)); + calculateTotalCredit(takenMandatory, mandatoryLectures, removeMandatoryTotalCredit) + ); majorMandatoryResult.calculate(takenMandatory, mandatoryLectures); takenLectureInventory.handleFinishedTakenLectures(finishedTakenLecture); return majorMandatoryResult; } - private int calculateTotalCredit(Set taken, Set mandatoryLectures, - int removedCredit) { + private int calculateTotalCredit( + Set taken, Set mandatoryLectures, + int removedCredit + ) { int totalCredit = 0; for (Lecture lecture : mandatoryLectures) { if (!taken.contains(lecture) && lecture.getIsRevoked() == 1) { @@ -63,5 +68,4 @@ private int calculateTotalCredit(Set taken, Set mandatoryLectu } return totalCredit - removedCredit; } - } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/domain/model/CommonCultureCategory.java b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/domain/model/CommonCultureCategory.java index fffd407f..17f45d53 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/domain/model/CommonCultureCategory.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/lecture/domain/model/CommonCultureCategory.java @@ -8,11 +8,12 @@ @RequiredArgsConstructor public enum CommonCultureCategory { CHRISTIAN_A("기독교", 4, List.of(16, 17, 18, 19)), - CHRISTIAN_B("기독교", 4, List.of(20, 21, 22, 23)), - EXPRESSION("사고와 표현", 3, List.of(16, 17, 18, 19, 20, 21, 22, 23)), - ENGLISH("영어", 6, List.of(16, 17, 18, 19, 20, 21, 22, 23)), + CHRISTIAN_B("기독교", 4, List.of(20, 21, 22, 23, 24)), + EXPRESSION("사고와 표현", 3, List.of(16, 17, 18, 19, 20, 21, 22, 23, 24)), + ENGLISH("영어", 6, List.of(16, 17, 18, 19, 20, 21, 22, 23, 24)), CAREER("진로", 2, List.of(18, 19, 20, 21, 22)), - DIGITAL_LITERACY("진로와디지털리터러시", 2, List.of(23)); + DIGITAL_LITERACY("진로와디지털리터러시", 2, List.of(23, 24)), + KOREAN("한국어", 6, List.of(16, 17, 18, 19, 20, 21, 22, 23, 24)); private final String name; private final int totalCredit; diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingAnonymousService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingAnonymousService.java index 94d2cbd2..9d4136cd 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingAnonymousService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingAnonymousService.java @@ -13,6 +13,7 @@ import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLecture; import com.plzgraduate.myongjigraduatebe.takenlecture.domain.model.TakenLectureInventory; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; +import com.plzgraduate.myongjigraduatebe.user.domain.model.KoreanLevel; import com.plzgraduate.myongjigraduatebe.user.domain.model.User; import java.util.List; import java.util.Set; @@ -24,28 +25,32 @@ public class ParsingAnonymousService implements ParsingAnonymousUseCase { @Override - public ParsingAnonymousDto parseAnonymous(EnglishLevel englishLevel, String parsingText) { + public ParsingAnonymousDto parseAnonymous( + EnglishLevel englishLevel, + KoreanLevel koreanLevel, + String parsingText + ) { validateParsingText(parsingText); ParsingInformation parsingInformation = ParsingInformation.parsing(parsingText); checkUnSupportedUser(parsingInformation); - User anonymous = User.createAnonymous( - englishLevel, - parsingInformation.getStudentName(), - parsingInformation.getStudentNumber(), - parsingInformation.getMajor(), - parsingInformation.getSubMajor(), - parsingInformation.getDualMajor(), - parsingInformation.getAssociatedMajor(), - parsingInformation.getStudentCategory(), - parsingInformation.getTransferCredit(), - parsingInformation.getExchangeCredit() + englishLevel, + koreanLevel, + parsingInformation.getStudentName(), + parsingInformation.getStudentNumber(), + parsingInformation.getMajor(), + parsingInformation.getSubMajor(), + parsingInformation.getDualMajor(), + parsingInformation.getAssociatedMajor(), + parsingInformation.getStudentCategory(), + parsingInformation.getTransferCredit(), + parsingInformation.getExchangeCredit() ); TakenLectureInventory takenLectureInventory = getTakenLectureInventory( - anonymous, - parsingInformation.getTakenLectureInformation() + anonymous, + parsingInformation.getTakenLectureInformation() ); return new ParsingAnonymousDto(anonymous, takenLectureInventory); @@ -64,18 +69,18 @@ private void checkUnSupportedUser(ParsingInformation parsingInformation) { } private TakenLectureInventory getTakenLectureInventory( - User anonymous, - List parsingTakenLectureDtoList + User anonymous, + List parsingTakenLectureDtoList ) { Set takenLectures = parsingTakenLectureDtoList.stream() - .map(parsingTakenLectureDto -> TakenLecture.of( - anonymous, - Lecture.from(parsingTakenLectureDto.getLectureCode()), - parsingTakenLectureDto.getYear(), - parsingTakenLectureDto.getSemester() - ) + .map(parsingTakenLectureDto -> TakenLecture.of( + anonymous, + Lecture.from(parsingTakenLectureDto.getLectureCode()), + parsingTakenLectureDto.getYear(), + parsingTakenLectureDto.getSemester() ) - .collect(Collectors.toSet()); + ) + .collect(Collectors.toSet()); return TakenLectureInventory.from(takenLectures); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingAnonymousUseCase.java b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingAnonymousUseCase.java index 0f74db16..f33e9c1d 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingAnonymousUseCase.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/parsing/application/usecase/ParsingAnonymousUseCase.java @@ -2,8 +2,13 @@ import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.dto.ParsingAnonymousDto; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; +import com.plzgraduate.myongjigraduatebe.user.domain.model.KoreanLevel; public interface ParsingAnonymousUseCase { - ParsingAnonymousDto parseAnonymous(EnglishLevel englishLevel, String parsingText); + ParsingAnonymousDto parseAnonymous( + EnglishLevel englishLevel, + KoreanLevel koreanLevel, + String parsingText + ); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java index 4953ec8c..e32b8c87 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/signup/SignUpService.java @@ -29,9 +29,13 @@ class SignUpService implements SignUpUseCase { public void signUp(SignUpCommand signUpCommand) { checkDuplicateUser(signUpCommand); String encodedPassword = passwordEncoder.encode(signUpCommand.getPassword()); - User newUser = User.create(signUpCommand.getAuthId(), encodedPassword, + User newUser = User.create( + signUpCommand.getAuthId(), + encodedPassword, signUpCommand.getEngLv(), - signUpCommand.getStudentNumber()); + signUpCommand.getKorLv(), + signUpCommand.getStudentNumber() + ); checkStudentNumberOver16(newUser); saveUserPort.saveUser(newUser); } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationService.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationService.java index abed2f8a..04bae0b4 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationService.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/service/update/UpdateStudentInformationService.java @@ -18,7 +18,8 @@ class UpdateStudentInformationService implements UpdateStudentInformationUseCase @Override public User updateUser(UpdateStudentInformationCommand updateStudentInformationCommand) { User user = updateStudentInformationCommand.getUser(); - user.updateStudentInformation(updateStudentInformationCommand.getName(), + user.updateStudentInformation( + updateStudentInformationCommand.getName(), updateStudentInformationCommand.getMajor(), updateStudentInformationCommand.getDualMajor(), updateStudentInformationCommand.getSubMajor(), diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/signup/SignUpCommand.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/signup/SignUpCommand.java index c3a69380..b0154f45 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/signup/SignUpCommand.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/application/usecase/signup/SignUpCommand.java @@ -1,6 +1,7 @@ package com.plzgraduate.myongjigraduatebe.user.application.usecase.signup; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; +import com.plzgraduate.myongjigraduatebe.user.domain.model.KoreanLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -10,19 +11,23 @@ public class SignUpCommand { private String authId; - private String password; - private String studentNumber; - private EnglishLevel engLv; + private KoreanLevel korLv; @Builder - private SignUpCommand(String authId, String password, String studentNumber, - EnglishLevel engLv) { + private SignUpCommand( + String authId, + String password, + String studentNumber, + EnglishLevel engLv, + KoreanLevel korLv + ) { this.authId = authId; this.password = password; this.studentNumber = studentNumber; this.engLv = engLv; + this.korLv = korLv; } } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/College.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/College.java index 40430cfd..da7ca78e 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/College.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/College.java @@ -9,9 +9,21 @@ @RequiredArgsConstructor public enum College { - HUMANITIES("인문대", - List.of("국어국문학과", "문예창작학과", "영어영문학과", "중어중문학과", "일어일문학과", "문헌정보학과", "미술사학과", "아랍지역학과", - "사학과", "철학과")), + HUMANITIES( + "인문대", + List.of( + "국어국문학과", + "문예창작학과", + "영어영문학과", + "중어중문학과", + "일어일문학과", + "문헌정보학과", + "미술사학과", + "아랍지역학과", + "사학과", + "철학과" + ) + ), SOCIAL_SCIENCE("사회과학대", List.of("행정학과", "경제학과", "정치외교학과", "디지털미디어학과", "아동학과", "청소년지도학과")), BUSINESS("경영대", List.of("경영학과", "경영정보학과", "국제통상학과")), LAW("법대", List.of("법학과")), @@ -27,5 +39,4 @@ public static College findBelongingCollege(String major) { .findFirst() .orElseThrow(() -> new IllegalArgumentException("소속 단과대가 존재하지 않습니다.")); } - } diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/KoreanLevel.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/KoreanLevel.java new file mode 100644 index 00000000..a2d55f89 --- /dev/null +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/KoreanLevel.java @@ -0,0 +1,11 @@ +package com.plzgraduate.myongjigraduatebe.user.domain.model; + + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum KoreanLevel { + KOR12, KOR34, FREE +} diff --git a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java index 08b170b3..c3a8ae17 100644 --- a/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java +++ b/src/main/java/com/plzgraduate/myongjigraduatebe/user/domain/model/User.java @@ -17,10 +17,12 @@ public class User { private final Long id; private final String authId; private final EnglishLevel englishLevel; + private final KoreanLevel koreanLevel; private final String studentNumber; private final int entryYear; private final Instant createdAt; private final Instant updatedAt; + private boolean isChapleReplaced; private TransferCredit transferCredit; private ExchangeCredit exchangeCredit; private String password; @@ -36,28 +38,31 @@ public class User { @Builder private User( - Long id, - String authId, - String password, - EnglishLevel englishLevel, - String name, - String studentNumber, - int entryYear, - String primaryMajor, - String subMajor, - String dualMajor, - String associatedMajor, - TransferCredit transferCredit, - ExchangeCredit exchangeCredit, - StudentCategory studentCategory, - int totalCredit, - double takenCredit, - boolean graduated, - Instant createdAt, - Instant updatedAt - ) { + Long id, + String authId, + String password, + EnglishLevel englishLevel, + KoreanLevel koreanLevel, + String name, + String studentNumber, + int entryYear, + String primaryMajor, + String subMajor, + String dualMajor, + String associatedMajor, + TransferCredit transferCredit, + ExchangeCredit exchangeCredit, + StudentCategory studentCategory, + boolean isChapleReplaced, + int totalCredit, + double takenCredit, + boolean graduated, + Instant createdAt, + Instant updatedAt + ) { this.id = id; this.authId = authId; + this.koreanLevel = koreanLevel; this.password = password; this.englishLevel = englishLevel; this.name = name; @@ -70,27 +75,38 @@ private User( this.studentCategory = studentCategory; this.transferCredit = transferCredit != null ? transferCredit : TransferCredit.empty(); this.exchangeCredit = exchangeCredit != null ? exchangeCredit : ExchangeCredit.empty(); + this.isChapleReplaced = isChapleReplaced; this.totalCredit = totalCredit; this.takenCredit = takenCredit; this.graduated = graduated; this.createdAt = createdAt; this.updatedAt = updatedAt; - } + } public static User create( String authId, String password, EnglishLevel englishLevel, + KoreanLevel koreanLevel, String studentNumber ) { return User.builder() - .authId(authId).password(password).englishLevel(englishLevel) - .studentNumber(studentNumber).entryYear(parseEntryYearInStudentNumber(studentNumber)) - .totalCredit(0).takenCredit(0).graduated(false).build(); + .authId(authId) + .password(password) + .englishLevel(englishLevel) + .koreanLevel(koreanLevel) + .studentNumber(studentNumber) + .entryYear(parseEntryYearInStudentNumber(studentNumber)) + .totalCredit(0) + .takenCredit(0) + .graduated(false) + .isChapleReplaced(false) + .build(); } public static User createAnonymous( EnglishLevel englishLevel, + KoreanLevel koreanLevel, String name, String studentNumber, String primaryMajor, @@ -98,13 +114,14 @@ public static User createAnonymous( String dualMajor, String associatedMajor, StudentCategory studentCategory, - TransferCredit transferCredit, - ExchangeCredit exchangeCredit) { - + TransferCredit transferCredit, + ExchangeCredit exchangeCredit + ) { return User.builder() .authId("anonymous") .name(name) .englishLevel(englishLevel) + .koreanLevel(koreanLevel) .studentNumber(studentNumber) .entryYear(parseEntryYearInStudentNumber(studentNumber)) .primaryMajor(primaryMajor) @@ -130,6 +147,7 @@ public String toString() { "id=" + id + ", authId='" + authId + '\'' + ", englishLevel=" + englishLevel + + ", koreanLevel=" + koreanLevel + ", studentNumber='" + studentNumber + '\'' + ", entryYear=" + entryYear + ", createdAt=" + createdAt + @@ -150,9 +168,17 @@ public String toString() { } public void updateStudentInformation( - String name, String major, String dualMajor, - String subMajor, String associatedMajor, - StudentCategory studentCategory, TransferCredit transferCredit, ExchangeCredit exchangeCredit, int totalCredit, double takenCredit, boolean graduate + String name, + String major, + String dualMajor, + String subMajor, + String associatedMajor, + StudentCategory studentCategory, + TransferCredit transferCredit, + ExchangeCredit exchangeCredit, + int totalCredit, + double takenCredit, + boolean graduate ) { this.name = name; this.primaryMajor = major; @@ -172,15 +198,21 @@ private void updateTransferCredit(TransferCredit transferCredit) { this.transferCredit = transferCredit; } } + private void updateExchangeCredit(ExchangeCredit exchangeCredit) { if (exchangeCredit != null) { this.exchangeCredit = exchangeCredit; } } + public boolean checkBeforeEntryYear(int entryYear) { return this.entryYear < entryYear; } + public boolean checkAfterEntryYear(int entryYear) { + return entryYear <= this.entryYear; + } + public boolean checkMajor(String major) { return this.primaryMajor.equals(major); } @@ -205,6 +237,18 @@ public boolean isMyAuthId(String authId) { return this.authId.equals(authId); } + public boolean isAnonymous() { + return this.authId.equals("anonymous"); + } + + public boolean isForeignerStudent() { + return this.koreanLevel != KoreanLevel.FREE; + } + + public void replaceChaple() { + this.isChapleReplaced = true; + } + public String getMajorByMajorType(MajorType majorType) { if (majorType == PRIMARY) { return primaryMajor; @@ -214,6 +258,12 @@ public String getMajorByMajorType(MajorType majorType) { return subMajor; } + public boolean isAnyMajorMatched(String major) { + return (this.primaryMajor.equals(major)) + || (this.dualMajor != null && this.dualMajor.equals(major)) + || (this.subMajor != null && this.subMajor.equals(major)); + } + @Override public boolean equals(Object o) { if (this == o) { @@ -243,5 +293,4 @@ public void setStudentCategory(StudentCategory studentCategory) { public void setTransferCredit(TransferCredit transferCredit) { this.transferCredit = transferCredit; } - } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureFixture.java b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureFixture.java index 21d48b9d..084ba964 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureFixture.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/CommonCultureFixture.java @@ -10,6 +10,7 @@ import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.DIGITAL_LITERACY; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.ENGLISH; import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.EXPRESSION; +import static com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCultureCategory.KOREAN; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture; import com.plzgraduate.myongjigraduatebe.lecture.domain.model.Lecture; @@ -121,6 +122,24 @@ public class CommonCultureFixture implements ArgumentsProvider { return lectureSet; } + public static Set 한국어레벨_12() { + Set lectureSet = new HashSet<>(); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02143"), KOREAN)); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02144"), KOREAN)); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02147"), KOREAN)); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02148"), KOREAN)); + return lectureSet; + } + + public static Set 한국어레벨_34() { + Set lectureSet = new HashSet<>(); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02145"), KOREAN)); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02146"), KOREAN)); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02149"), KOREAN)); + lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02150"), KOREAN)); + return lectureSet; + } + @Override public Stream provideArguments(ExtensionContext context) throws Exception { return Stream.of( diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java index b2fd0330..bccd0980 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/fixture/UserFixture.java @@ -1,153 +1,522 @@ package com.plzgraduate.myongjigraduatebe.fixture; -import com.plzgraduate.myongjigraduatebe.user.domain.model.*; +import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; +import com.plzgraduate.myongjigraduatebe.user.domain.model.ExchangeCredit; +import com.plzgraduate.myongjigraduatebe.user.domain.model.KoreanLevel; +import com.plzgraduate.myongjigraduatebe.user.domain.model.StudentCategory; +import com.plzgraduate.myongjigraduatebe.user.domain.model.TransferCredit; +import com.plzgraduate.myongjigraduatebe.user.domain.model.User; public class UserFixture { + public static User 영문학과_16학번() { - return createUser("mj01", "1234", EnglishLevel.ENG12, "김영문", "60161001", 16, "영어영문학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj01", + "1234", + EnglishLevel.ENG12, + KoreanLevel.FREE, + "김영문", + "60161001", + 16, + "영어영문학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 영문학과_18학번() { - return createUser("mj01", "1234", EnglishLevel.ENG12, "김영문", "60181001", 18, "영어영문학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj01", + "1234", + EnglishLevel.ENG12, + KoreanLevel.FREE, + "김영문", + "60181001", + 18, + "영어영문학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 철학과_20학번() { - return createUser("mj51", "1234", EnglishLevel.ENG34, "김철학", "60201011", 20, "철학학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj51", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김철학", + "60201011", + 20, + "철학학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 행정학과_21학번() { - return createUser("mj12", "1234", EnglishLevel.ENG34, "김행정", "60211012", 21, "행정학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj12", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김행정", + "60211012", + 21, + "행정학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 경영학과_19학번_ENG12() { - return createUser("mj21", "1234", EnglishLevel.ENG12, "김경영", "60191021", 19, "경영학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj21", + "1234", + EnglishLevel.ENG12, + KoreanLevel.FREE, + "김경영", + "60191021", + 19, + "경영학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 경영학과_19학번_ENG34() { - return createUser("mj21", "1234", EnglishLevel.ENG34, "김경영", "60191021", 19, "경영학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj21", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김경영", + "60191021", + 19, + "경영학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 경영학과_19학번_영어_면제() { - return createUser("mj21", "1234", EnglishLevel.FREE, "김경영", "60191021", 19, "경영학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj21", + "1234", + EnglishLevel.FREE, + KoreanLevel.FREE, + "김경영", + "60191021", + 19, + "경영학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 경영학과_22학번() { - return createUser("mj22", "1234", EnglishLevel.ENG34, "김경영", "60221022", 22, "경영학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj22", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김경영", + "60221022", + 22, + "경영학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 경영학과_23학번() { - return createUser("mj22", "1234", EnglishLevel.ENG34, "김경영", "60231022", 23, "경영학과", null, null, - StudentCategory.NORMAL,"0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj22", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김경영", + "60231022", + 23, + "경영학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 경영학과_23학번_국제통상학과_부전공() { - return createUser("mj22", "1234", EnglishLevel.ENG34, "김경영", "60231022", 23, "경영학과", null, + return createUser( + "mj22", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김경영", + "60231022", + 23, + "경영학과", "국제통상학과", - StudentCategory.SUB_MAJOR, "0/0/0/0", "0/0/0/0/0/0/0/0"); + null, + StudentCategory.SUB_MAJOR, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 국제통상학과_19학번() { - return createUser("mj31", "1234", EnglishLevel.ENG34, "김국통", "60192021", 19, "국제통상학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj31", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김국통", + "60192021", + 19, + "국제통상학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } - public static User 데이테크놀로지학과_16학번() { - return createUser("mj1001", "1234", EnglishLevel.ENG12, "정데테", "60161666", 16, "데이터테크놀로지전공", null, + public static User 데이테크놀로지전공_16학번() { + return createUser( + "mj1001", + "1234", + EnglishLevel.ENG12, + KoreanLevel.FREE, + "정데테", + "60161666", + 16, + "데이터테크놀로지전공", + null, null, - StudentCategory.NORMAL,"0/0/0/0", "0/0/0/0/0/0/0/0"); + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } - public static User 데이테크놀로지학과_16학번_Eng34() { - return createUser("mj1001", "1234", EnglishLevel.ENG34, "정데테", "60161666", 16, "데이터테크놀로지전공", null, + public static User 데이테크놀로지전공_16학번_Eng34() { + return createUser( + "mj1001", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "정데테", + "60161666", + 16, + "데이터테크놀로지전공", null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } - public static User 데이테크놀로지학과_18학번_Basic_Eng() { - return createUser("mj1001", "1234", EnglishLevel.BASIC, "정데테", "60181666", 18, "데이터테크놀로지전공", null, + public static User 데이테크놀로지전공_18학번_Basic_Eng() { + return createUser( + "mj1001", + "1234", + EnglishLevel.BASIC, + KoreanLevel.FREE, + "정데테", + "60181666", + 18, + "데이터테크놀로지전공", + null, null, - StudentCategory.NORMAL,"0/0/0/0", "0/0/0/0/0/0/0/0"); + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } - public static User 데이테크놀로지학과_18학번() { - return createUser("mj1003", "1234", EnglishLevel.ENG12, "정데테", "60181666", 18, "데이터테크놀로지전공", null, + public static User 데이테크놀로지전공_18학번() { + return createUser( + "mj1003", + "1234", + EnglishLevel.ENG12, + KoreanLevel.FREE, + "정데테", + "60181666", + 18, + "데이터테크놀로지전공", + null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } + public static User 경제학과_20학번_편입() { - return createUser("mj1003", "1234", EnglishLevel.FREE, "최편입", "60191666", 20, "경제학과", null, - null, - StudentCategory.TRANSFER, "0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj1003", + "1234", + EnglishLevel.FREE, + KoreanLevel.FREE, + "최편입", + "60191666", + 20, + "경제학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } - public static User 응용소프트웨어학과_17학번() { - return createUser("mj22", "1234", EnglishLevel.ENG34, "김응용", "60171022", 17, "응용소프트웨어전공", null, + public static User 응용소프트웨어전공_17학번() { + return createUser( + "mj22", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김응용", + "60171022", + 17, + "응용소프트웨어전공", + null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } - public static User 응용소프트웨어학과_19학번() { - return createUser("mj22", "1234", EnglishLevel.ENG34, "김응용", "60191022", 19, "응용소프트웨어전공", null, + public static User 응용소프트웨어전공_19학번() { + return createUser( + "mj22", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김응용", + "60191022", + 19, + "응용소프트웨어전공", null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } - public static User 응용소프트웨어학과_19학번_영어_면제() { - return createUser("mj22", "1234", EnglishLevel.FREE, "김응용", "60191022", 19, "응용소프트웨어전공", null,null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + public static User 응용소프트웨어전공_19학번_영어_면제() { + return createUser( + "mj22", + "1234", + EnglishLevel.FREE, + KoreanLevel.FREE, + "김응용", + "60191022", + 19, + "응용소프트웨어전공", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } - public static User 데이터테크놀로지학과_19학번() { - return createUser("mj22", "1234", EnglishLevel.ENG34, "김응용", "60191022", 19, "데이터테크놀로지전공", null, + public static User 데이터테크놀로지전공_19학번() { + return createUser( + "mj22", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김응용", + "60191022", + 19, + "데이터테크놀로지전공", null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 디지털콘텐츠디자인학과_19학번() { - return createUser("mj22", "1234", EnglishLevel.ENG34, "김응용", "60191022", 19, "디지털콘텐츠디자인학과", null, + return createUser( + "mj22", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김응용", + "60191022", + 19, + "디지털콘텐츠디자인학과", + null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } public static User 디지털콘텐츠디자인학과_23학번() { - return createUser("mj22", "1234", EnglishLevel.ENG34, "김응용", "60231022", 23, "디지털콘텐츠디자인학과", null, + return createUser( + "mj22", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김응용", + "60231022", + 23, + "디지털콘텐츠디자인학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); + } + + public static User 데이터테크놀로지전공_21학번_외국인학생() { + return createUser( + "fs20", + "1234", + EnglishLevel.FREE, + KoreanLevel.KOR12, + "김외국", + "60211022", + 23, + "데이터테크놀로지전공", null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } + public static User 영문학과_18학번_교환_학문기초3학점() { - return createUser("mj01", "1234", EnglishLevel.ENG12, "김영문", "60181001", 18, "영어영문학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "3/0/0/0/0/0/0/0"); + return createUser( + "mj01", + "1234", + EnglishLevel.ENG12, + KoreanLevel.FREE, + "김영문", + "60181001", + 18, + "영어영문학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "3/0/0/0/0/0/0/0" + ); } + public static User 경제학과_18학번_교환_자율학점3학점() { - return createUser("mj01", "1234", EnglishLevel.ENG12, "김경제", "60181001", 18, "경제학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/0/0/0/0/0/0/0"); + return createUser( + "mj01", + "1234", + EnglishLevel.ENG12, + KoreanLevel.FREE, + "김경제", + "60181001", + 18, + "경제학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/0/0/0/0/0/0/0" + ); } + public static User 경영학과_19학번_ENG34_교환학생_일반학점_3() { - return createUser("mj21", "1234", EnglishLevel.ENG34, "김경영", "60191021", 19, "경영학과", null, null, - StudentCategory.NORMAL, "0/0/0/0", "0/3/0/0/0/0/0/0"); + return createUser( + "mj21", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김경영", + "60191021", + 19, + "경영학과", + null, + null, + StudentCategory.NORMAL, + "0/0/0/0", + "0/3/0/0/0/0/0/0" + ); } + public static User 응용_경영_복전_19학번_교환학생() { - return createUser("mj21", "1234", EnglishLevel.ENG34, "김융경", "60191021", 19, "응용소프트웨어전공", null, "경영학과", - StudentCategory.DUAL_MAJOR, "0/0/0/0", "0/0/0/0/15/0/0/0"); + return createUser( + "mj21", + "1234", + EnglishLevel.ENG34, + KoreanLevel.FREE, + "김융경", + "60191021", + 19, + "응용소프트웨어전공", + null, + "경영학과", + StudentCategory.DUAL_MAJOR, + "0/0/0/0", + "0/0/0/0/15/0/0/0" + ); } - public static User createUser(String authId, String password, EnglishLevel englishLevel, + + public static User createUser( + String authId, + String password, + EnglishLevel englishLevel, + KoreanLevel koreanLevel, String name, String studentNumber, - int entryYear, String major, String dualMajor, String subMajor, StudentCategory studentCategory, String transferCredit, String exchangeCredit) { + int entryYear, + String major, + String dualMajor, + String subMajor, + StudentCategory studentCategory, + String transferCredit, + String exchangeCredit + ) { return User.builder() .id(1L) .authId(authId) .password(password) .englishLevel(englishLevel) + .koreanLevel(koreanLevel) .name(name) .studentNumber(studentNumber) .entryYear(entryYear) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationServiceTest.java index 6f18a0e9..c9099906 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/application/service/CalculateMajorGraduationServiceTest.java @@ -53,13 +53,14 @@ class CalculateMajorGraduationServiceTest { @BeforeEach void setUp() { MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager( - List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); + List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); SubMajorGraduationManager subMajorGraduationManager = new SubMajorGraduationManager(); MajorGraduationManager majorGraduationManager = new MajorGraduationManager( - mandatoryMajorManager, electiveMajorManager); + mandatoryMajorManager, electiveMajorManager); calculateMajorGraduationService = new CalculateMajorGraduationService(findMajorPort, - majorGraduationManager, subMajorGraduationManager); + majorGraduationManager, subMajorGraduationManager + ); } @DisplayName("MAJOR 관련 카테고리 일때만 MajorGraduationService를 호출한다.") @@ -81,50 +82,52 @@ void shouldSupportMajorCategory() { void shouldCalculateSingleDetailGraduationIfPrimaryMandatory() { //given User user = User.builder() - .id(1L) - .primaryMajor("응용소프트웨어전공") - .entryYear(19) - .build(); + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19) + .build(); HashSet graduationMajorLectures = new HashSet<>( - Set.of( - MajorLecture.of(Lecture.builder() - .id("HEC01211") - .credit(3) - .build(), "응용소프트웨어전공", 1, 16, 23), - MajorLecture.of(Lecture.builder() - .id("HEC01204") - .credit(3) - .build(), "응용소프트웨어전공", 1, 16, 23))); + Set.of( + MajorLecture.of(Lecture.builder() + .id("HEC01211") + .credit(3) + .build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder() + .id("HEC01204") + .credit(3) + .build(), "응용소프트웨어전공", 1, 16, 23) + )); given(findMajorPort.findMajor(user.getPrimaryMajor())).willReturn(graduationMajorLectures); HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01211") //전공 필수 - .credit(3) - .build()) - .build(), - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01305") //전공 선택 - .credit(3) - .build()) - .build())); + Set.of( + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01211") //전공 필수 + .credit(3) + .build()) + .build(), + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01305") //전공 선택 + .credit(3) + .build()) + .build() + )); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .primaryMajorCredit(70) - .build(); + .primaryMajorCredit(70) + .build(); //when DetailGraduationResult detailPrimaryMandatoryMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( - user, PRIMARY_MANDATORY_MAJOR, takenLectureInventory, graduationRequirement); + user, PRIMARY_MANDATORY_MAJOR, takenLectureInventory, graduationRequirement); //then assertThat(detailPrimaryMandatoryMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(PRIMARY_MANDATORY_MAJOR, false, 6, 3.0); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_MANDATORY_MAJOR, false, 6, 3.0); } @DisplayName("유저의 주전공선택 상세 졸업결과를 계산한다.") @@ -132,57 +135,59 @@ void shouldCalculateSingleDetailGraduationIfPrimaryMandatory() { void calculateSingleDetailGraduationIfPrimaryElective() { //given User user = User.builder() - .id(1L) - .primaryMajor("응용소프트웨어전공") - .entryYear(19) - .build(); + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19) + .build(); HashSet graduationMajorLectures = new HashSet<>( - Set.of( - // 전공 필수 - MajorLecture.of(Lecture.builder() - .id("HEC01211") - .credit(3) - .build(), "응용소프트웨어전공", 1, 16, 23), - // 전공 선택 - MajorLecture.of(Lecture.builder() - .id("HEC01305") - .credit(3) - .build(), "응용소프트웨어전공", 0, 16, 23), - // 전공 선택 - MajorLecture.of(Lecture.builder() - .id("HEC01318") - .credit(3) - .build(), "응용소프트웨어전공", 0, 16, 23))); + Set.of( + // 전공 필수 + MajorLecture.of(Lecture.builder() + .id("HEC01211") + .credit(3) + .build(), "응용소프트웨어전공", 1, 16, 23), + // 전공 선택 + MajorLecture.of(Lecture.builder() + .id("HEC01305") + .credit(3) + .build(), "응용소프트웨어전공", 0, 16, 23), + // 전공 선택 + MajorLecture.of(Lecture.builder() + .id("HEC01318") + .credit(3) + .build(), "응용소프트웨어전공", 0, 16, 23) + )); given(findMajorPort.findMajor(user.getPrimaryMajor())).willReturn(graduationMajorLectures); HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01211") //전공 필수 - .credit(3) - .build()) - .build(), - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01305") //전공 선택 - .credit(3) - .build()) - .build())); + Set.of( + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01211") //전공 필수 + .credit(3) + .build()) + .build(), + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01305") //전공 선택 + .credit(3) + .build()) + .build() + )); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .primaryMajorCredit(70) - .build(); + .primaryMajorCredit(70) + .build(); //when DetailGraduationResult detailPrimaryElectiveMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( - user, PRIMARY_ELECTIVE_MAJOR, takenLectureInventory, graduationRequirement); + user, PRIMARY_ELECTIVE_MAJOR, takenLectureInventory, graduationRequirement); //then assertThat(detailPrimaryElectiveMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(PRIMARY_ELECTIVE_MAJOR, false, 67, 3.0); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_ELECTIVE_MAJOR, false, 67, 3.0); } @DisplayName("유저의 복수전공필수 졸업결과를 계산한다.") @@ -190,50 +195,53 @@ void calculateSingleDetailGraduationIfPrimaryElective() { void calculateSingleDetailGraduationIfDualMandatory() { //given User user = User.builder() - .id(1L) - .dualMajor("응용소프트웨어전공") - .entryYear(19) - .build(); + .id(1L) + .primaryMajor("") + .dualMajor("응용소프트웨어전공") + .entryYear(19) + .build(); HashSet graduationMajorLectures = new HashSet<>( - Set.of( - MajorLecture.of(Lecture.builder() - .id("HEC01211") - .credit(3) - .build(), "응용소프트웨어전공", 1, 16, 23), - MajorLecture.of(Lecture.builder() - .id("HEC01204") - .credit(3) - .build(), "응용소프트웨어전공", 1, 16, 23))); + Set.of( + MajorLecture.of(Lecture.builder() + .id("HEC01211") + .credit(3) + .build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder() + .id("HEC01204") + .credit(3) + .build(), "응용소프트웨어전공", 1, 16, 23) + )); given(findMajorPort.findMajor(user.getDualMajor())).willReturn(graduationMajorLectures); HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01211") //전공 필수 - .credit(3) - .build()) - .build(), - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01305") //전공 선택 - .credit(3) - .build()) - .build())); + Set.of( + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01211") //전공 필수 + .credit(3) + .build()) + .build(), + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01305") //전공 선택 + .credit(3) + .build()) + .build() + )); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .dualMajorCredit(70) - .build(); + .dualMajorCredit(70) + .build(); //when DetailGraduationResult detailDualMandatoryMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( - user, DUAL_MANDATORY_MAJOR, takenLectureInventory, graduationRequirement); + user, DUAL_MANDATORY_MAJOR, takenLectureInventory, graduationRequirement); //then assertThat(detailDualMandatoryMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(DUAL_MANDATORY_MAJOR, false, 6, 3.0); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(DUAL_MANDATORY_MAJOR, false, 6, 3.0); } @DisplayName("유저의 복수전공선택 졸업결과를 계산한다.") @@ -241,50 +249,53 @@ void calculateSingleDetailGraduationIfDualMandatory() { void calculateCoreCulture() { //given User user = User.builder() - .id(1L) - .dualMajor("응용소프트웨어전공") - .entryYear(19) - .build(); + .id(1L) + .primaryMajor("") + .dualMajor("응용소프트웨어전공") + .entryYear(19) + .build(); HashSet graduationMajorLectures = new HashSet<>( - Set.of( - MajorLecture.of(Lecture.builder() - .id("HEC01211") - .credit(3) - .build(), "응용소프트웨어전공", 1, 16, 23), - MajorLecture.of(Lecture.builder() - .id("HEC01304") - .credit(3) - .build(), "응용소프트웨어전공", 0, 16, 23))); + Set.of( + MajorLecture.of(Lecture.builder() + .id("HEC01211") + .credit(3) + .build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder() + .id("HEC01304") + .credit(3) + .build(), "응용소프트웨어전공", 0, 16, 23) + )); given(findMajorPort.findMajor(user.getDualMajor())).willReturn(graduationMajorLectures); HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01211") //전공 필수 - .credit(3) - .build()) - .build(), - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01304") //전공 선택 - .credit(3) - .build()) - .build())); + Set.of( + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01211") //전공 필수 + .credit(3) + .build()) + .build(), + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01304") //전공 선택 + .credit(3) + .build()) + .build() + )); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .dualMajorCredit(70) - .build(); + .dualMajorCredit(70) + .build(); //when DetailGraduationResult detailDualMandatoryMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( - user, DUAL_ELECTIVE_MAJOR, takenLectureInventory, graduationRequirement); + user, DUAL_ELECTIVE_MAJOR, takenLectureInventory, graduationRequirement); //then assertThat(detailDualMandatoryMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(DUAL_ELECTIVE_MAJOR, false, 67, 3.0); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(DUAL_ELECTIVE_MAJOR, false, 67, 3.0); } @DisplayName("편입생 주전공필수 졸업결과를 계산한다.") @@ -292,212 +303,222 @@ void calculateCoreCulture() { void calculateSingleDetailGraduationForTransferPrimaryMandatory() { // given User user = User.builder() - .id(1L) - .primaryMajor("응용소프트웨어전공") - .entryYear(19) - .studentCategory(StudentCategory.TRANSFER) - .transferCredit(TransferCredit.from("0/15/0/0")) - .build(); + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19) + .studentCategory(StudentCategory.TRANSFER) + .transferCredit(TransferCredit.from("0/15/0/0")) + .build(); HashSet graduationMajorLectures = new HashSet<>( - Set.of( - MajorLecture.of(Lecture.builder() - .id("HEC01211") - .credit(3) - .build(), "응용소프트웨어전공", 1, 16, 23), - MajorLecture.of(Lecture.builder() - .id("HEC01204") - .credit(3) - .build(), "응용소프트웨어전공", 1, 16, 23) - ) + Set.of( + MajorLecture.of(Lecture.builder() + .id("HEC01211") + .credit(3) + .build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder() + .id("HEC01204") + .credit(3) + .build(), "응용소프트웨어전공", 1, 16, 23) + ) ); given(findMajorPort.findMajor(user.getPrimaryMajor())).willReturn(graduationMajorLectures); HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01211") // 전공 필수 - .credit(3) - .build()) - .build() - ) + Set.of( + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01211") // 전공 필수 + .credit(3) + .build()) + .build() + ) ); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .primaryMajorCredit(70) - .build(); + .primaryMajorCredit(70) + .build(); // when DetailGraduationResult detailPrimaryMandatoryMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( - user, PRIMARY_MANDATORY_MAJOR, takenLectureInventory, graduationRequirement); + user, PRIMARY_MANDATORY_MAJOR, takenLectureInventory, graduationRequirement); // then assertThat(detailPrimaryMandatoryMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(PRIMARY_MANDATORY_MAJOR, false, 6, 3.0); + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_MANDATORY_MAJOR, false, 6, 3.0); } + @DisplayName("편입생 주전공선택 졸업결과를 계산한다.") @Test void calculateSingleDetailGraduationForTransferPrimaryElective() { // given User user = User.builder() - .id(1L) - .primaryMajor("응용소프트웨어전공") - .entryYear(19) - .studentCategory(StudentCategory.TRANSFER) - .transferCredit(TransferCredit.from("0/15/0/0")) // 15 전공 선택 학점 - .build(); + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19) + .studentCategory(StudentCategory.TRANSFER) + .transferCredit(TransferCredit.from("0/15/0/0")) // 15 전공 선택 학점 + .build(); HashSet graduationMajorLectures = new HashSet<>( - Set.of( - // 전공 필수 - MajorLecture.of(Lecture.builder() - .id("HEC01211") - .credit(3) - .build(), "응용소프트웨어전공", 1, 16, 23), - // 전공 선택 - MajorLecture.of(Lecture.builder() - .id("HEC01305") - .credit(3) - .build(), "응용소프트웨어전공", 0, 16, 23) - ) + Set.of( + // 전공 필수 + MajorLecture.of(Lecture.builder() + .id("HEC01211") + .credit(3) + .build(), "응용소프트웨어전공", 1, 16, 23), + // 전공 선택 + MajorLecture.of(Lecture.builder() + .id("HEC01305") + .credit(3) + .build(), "응용소프트웨어전공", 0, 16, 23) + ) ); given(findMajorPort.findMajor(user.getPrimaryMajor())).willReturn(graduationMajorLectures); HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01305") // 전공 선택 - .credit(3) - .build()) - .build() - ) + Set.of( + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01305") // 전공 선택 + .credit(3) + .build()) + .build() + ) ); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .primaryMajorCredit(70) // 전공 학점 총합 - .build(); + .primaryMajorCredit(70) // 전공 학점 총합 + .build(); // when DetailGraduationResult detailPrimaryElectiveMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( - user, PRIMARY_ELECTIVE_MAJOR, takenLectureInventory, graduationRequirement); + user, PRIMARY_ELECTIVE_MAJOR, takenLectureInventory, graduationRequirement); // then assertThat(detailPrimaryElectiveMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(PRIMARY_ELECTIVE_MAJOR, 18.0); // 15 (편입 학점) + 3 (수강 학점) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_ELECTIVE_MAJOR, 18.0); // 15 (편입 학점) + 3 (수강 학점) } + @DisplayName("교환학생 전공선택 학점 졸업 결과를 계산한다.") @Test void calculateSingleDetailGraduationForExchangePrimaryElective() { // given User user = User.builder() - .id(1L) - .primaryMajor("응용소프트웨어전공") - .entryYear(19) - .studentCategory(StudentCategory.NORMAL) - .exchangeCredit(ExchangeCredit.from("0/0/3/0/0/0/0/0")) // 3 전공 선택 학점 - .build(); + .id(1L) + .primaryMajor("응용소프트웨어전공") + .entryYear(19) + .studentCategory(StudentCategory.NORMAL) + .exchangeCredit(ExchangeCredit.from("0/0/3/0/0/0/0/0")) // 3 전공 선택 학점 + .build(); HashSet graduationMajorLectures = new HashSet<>( - Set.of( - MajorLecture.of(Lecture.builder() - .id("HEC01211") - .credit(3) - .build(), "응용소프트웨어전공", 1, 16, 23), - MajorLecture.of(Lecture.builder() - .id("HEC01305") - .credit(3) - .build(), "응용소프트웨어전공", 0, 16, 23) - ) + Set.of( + MajorLecture.of(Lecture.builder() + .id("HEC01211") + .credit(3) + .build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder() + .id("HEC01305") + .credit(3) + .build(), "응용소프트웨어전공", 0, 16, 23) + ) ); given(findMajorPort.findMajor(user.getPrimaryMajor())).willReturn(graduationMajorLectures); HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01305") // 전공 선택 - .credit(3) - .build()) - .build() - ) + Set.of( + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01305") // 전공 선택 + .credit(3) + .build()) + .build() + ) ); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .primaryMajorCredit(70) // 전공 학점 총합 - .build(); + .primaryMajorCredit(70) // 전공 학점 총합 + .build(); // when DetailGraduationResult detailPrimaryElectiveMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( - user, PRIMARY_ELECTIVE_MAJOR, takenLectureInventory, graduationRequirement); + user, PRIMARY_ELECTIVE_MAJOR, takenLectureInventory, graduationRequirement); // then assertThat(detailPrimaryElectiveMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(PRIMARY_ELECTIVE_MAJOR, false, 67, 6.0); // 3 (교환 학점) + 3 (교환학생 인정 학점) + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(PRIMARY_ELECTIVE_MAJOR, false, 67, 6.0); // 3 (교환 학점) + 3 (교환학생 인정 학점) } + @DisplayName("교환 학생 유저의 복수전공선택 졸업결과를 계산한다.") @Test void calculateDualMajorWithExchangeCredits() { //given User user = User.builder() - .id(1L) - .studentCategory(StudentCategory.DUAL_MAJOR) - .dualMajor("응용소프트웨어전공") - .entryYear(19) - .exchangeCredit(ExchangeCredit.from("0/0/0/0/15/0/0/0")) // 교환 학점 15 설정 - .build(); + .id(1L) + .studentCategory(StudentCategory.DUAL_MAJOR) + .primaryMajor("") + .dualMajor("응용소프트웨어전공") + .entryYear(19) + .exchangeCredit(ExchangeCredit.from("0/0/0/0/15/0/0/0")) // 교환 학점 15 설정 + .build(); HashSet graduationMajorLectures = new HashSet<>( - Set.of( - MajorLecture.of(Lecture.builder() - .id("HEC01211") - .credit(3) - .build(), "응용소프트웨어전공", 1, 16, 23), - MajorLecture.of(Lecture.builder() - .id("HEC01304") - .credit(3) - .build(), "응용소프트웨어전공", 0, 16, 23))); + Set.of( + MajorLecture.of(Lecture.builder() + .id("HEC01211") + .credit(3) + .build(), "응용소프트웨어전공", 1, 16, 23), + MajorLecture.of(Lecture.builder() + .id("HEC01304") + .credit(3) + .build(), "응용소프트웨어전공", 0, 16, 23) + )); given(findMajorPort.findMajor(user.getDualMajor())).willReturn(graduationMajorLectures); HashSet takenLectures = new HashSet<>( - Set.of( - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01211") // 전공 필수 - .credit(3) - .build()) - .build(), - TakenLecture.builder() - .lecture(Lecture.builder() - .id("HEC01304") // 전공 선택 - .credit(3) - .build()) - .build())); + Set.of( + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01211") // 전공 필수 + .credit(3) + .build()) + .build(), + TakenLecture.builder() + .lecture(Lecture.builder() + .id("HEC01304") // 전공 선택 + .credit(3) + .build()) + .build() + )); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures); GraduationRequirement graduationRequirement = GraduationRequirement.builder() - .dualMajorCredit(70) - .build(); + .dualMajorCredit(70) + .build(); //when DetailGraduationResult detailDualElectiveMajorGraduationResult = calculateMajorGraduationService.calculateSingleDetailGraduation( - user, DUAL_ELECTIVE_MAJOR, takenLectureInventory, graduationRequirement); + user, + DUAL_ELECTIVE_MAJOR, + takenLectureInventory, + graduationRequirement + ); int additionalCredits = user.getExchangeCredit().getDualMajor(); detailDualElectiveMajorGraduationResult.addCredit(additionalCredits); //then assertThat(detailDualElectiveMajorGraduationResult) - .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") - .contains(DUAL_ELECTIVE_MAJOR, false, 67, 18.0); // 교환학생 인점 학점 15 + 전공 선택 수강 학점 3 = 18 + .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") + .contains(DUAL_ELECTIVE_MAJOR, false, 67, 18.0); // 교환학생 인점 학점 15 + 전공 선택 수강 학점 3 = 18 } -} \ No newline at end of file +} diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResultTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResultTest.java index cb357f0f..32be293f 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResultTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/model/GraduationResultTest.java @@ -96,7 +96,7 @@ static Stream graduationResultFields() { @Test void handleLeftTakenLectures() { //given - User user = UserFixture.데이터테크놀로지학과_19학번(); + User user = UserFixture.데이터테크놀로지전공_19학번(); Set takenLectures = new HashSet<>((Set.of( TakenLecture.of(user, mockLectureMap.get("KMA02110"), 2020, Semester.FIRST), //철학과인간 TakenLecture.of(user, mockLectureMap.get("KMA02111"), 2020, Semester.FIRST), //한국근현대사의이해 @@ -124,25 +124,31 @@ void handleLeftTakenLectures() { .build(); //when - graduationResult.handleLeftTakenLectures(takenLectureInventory, graduationRequirement, user); + graduationResult.handleLeftTakenLectures( + takenLectureInventory, + graduationRequirement, + user + ); //then assertThat(graduationResult.getNormalCultureGraduationResult()) .extracting("categoryName", "totalCredit", "takenCredit") .contains(NORMAL_CULTURE.getName(), graduationRequirement.getNormalCultureCredit(), takenNormalCultureCredit - (takenNormalCultureCredit - - graduationRequirement.getNormalCultureCredit())); + - graduationRequirement.getNormalCultureCredit()) + ); assertThat(graduationResult.getFreeElectiveGraduationResult()) .extracting("categoryName", "totalCredit", "takenCredit") .contains(FREE_ELECTIVE.getName(), graduationRequirement.getFreeElectiveCredit(), takenNormalCultureCredit - graduationRequirement.getNormalCultureCredit() - + takenFreeElectiveCredit); + + takenFreeElectiveCredit + ); } @DisplayName("채플 졸업 결과, 모든 세부 졸업 결과, 일반교양 졸업 결과, 자유선택 졸업 결과가 이수 완료일 시 전체 졸업 결과가 이수 완료이다.") @Test void checkCompletedGraduated() { - User user = UserFixture.데이터테크놀로지학과_19학번(); + User user = UserFixture.데이터테크놀로지전공_19학번(); //given int detailCategoryTotalCredit = 10; int detailCategoryTakenCredit = 10; @@ -195,12 +201,14 @@ void checkCompletedGraduated() { @DisplayName("채플 졸업 결과, 모든 세부 졸업 결과, 일반교양 졸업 결과, 자유선택 졸업 결과 중 하나라도 미이수일 시 전체 졸업 결과가 미이수이다.") @ParameterizedTest @MethodSource("graduationResultFields") - void checkUnCompletedGraduated(ChapelResult chapelResult, + void checkUnCompletedGraduated( + ChapelResult chapelResult, List detailGraduationResults, NormalCultureGraduationResult normalCultureGraduationResult, - FreeElectiveGraduationResult freeElectiveGraduationResult) { + FreeElectiveGraduationResult freeElectiveGraduationResult + ) { //given - User user = UserFixture.데이터테크놀로지학과_19학번(); + User user = UserFixture.데이터테크놀로지전공_19학번(); GraduationResult graduationResult = GraduationResult.builder() .chapelResult(chapelResult) .detailGraduationResults(detailGraduationResults) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManagerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManagerTest.java index 73c44bf7..353f5bf4 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManagerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/commonculture/CommonCultureDetailCategoryManagerTest.java @@ -35,9 +35,10 @@ class CommonCultureDetailCategoryManagerTest { @ArgumentsSource(CommonCultureCategoryFixture.class) void generateEngBasicCompletedCommonCultureDetailCategory( CommonCultureCategory commonCultureCategory, - Set graduationLectures) { + Set graduationLectures + ) { //given - User user = UserFixture.데이테크놀로지학과_18학번_Basic_Eng(); + User user = UserFixture.데이테크놀로지전공_18학번_Basic_Eng(); Set takenLectures = new HashSet<>((Set.of( TakenLecture.of(user, mockLectureMap.get("KMP02126"), 2019, Semester.FIRST), TakenLecture.of(user, mockLectureMap.get("KMA00101"), 2019, Semester.FIRST), @@ -61,7 +62,8 @@ void generateEngBasicCompletedCommonCultureDetailCategory( //when DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures, - commonCultureCategory); + commonCultureCategory + ); //then assertThat(detailCategoryResult) @@ -74,7 +76,8 @@ void generateEngBasicCompletedCommonCultureDetailCategory( @ArgumentsSource(CommonCultureCategoryFixture.class) void generateEng12CompletedCommonCultureDetailCategory( CommonCultureCategory commonCultureCategory, - Set graduationLectures) { + Set graduationLectures + ) { //given User user = UserFixture.경영학과_19학번_ENG12(); Set takenLectures = new HashSet<>((Set.of( @@ -99,7 +102,8 @@ void generateEng12CompletedCommonCultureDetailCategory( //when DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures, - commonCultureCategory); + commonCultureCategory + ); //then assertThat(detailCategoryResult) @@ -112,7 +116,8 @@ void generateEng12CompletedCommonCultureDetailCategory( @ArgumentsSource(CommonCultureCategoryFixture.class) void generateEng34CompletedCommonCultureDetailCategory( CommonCultureCategory commonCultureCategory, - Set graduationLectures) { + Set graduationLectures + ) { //given User user = UserFixture.경영학과_19학번_ENG34(); Set takenLectures = new HashSet<>((Set.of( @@ -136,7 +141,8 @@ void generateEng34CompletedCommonCultureDetailCategory( //when DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures, - commonCultureCategory); + commonCultureCategory + ); //then assertThat(detailCategoryResult) @@ -149,7 +155,8 @@ void generateEng34CompletedCommonCultureDetailCategory( @ArgumentsSource(CommonCultureCategoryFixture.class) void generateEngFreeCompletedCommonCultureDetailCategory( CommonCultureCategory commonCultureCategory, - Set graduationLectures) { + Set graduationLectures + ) { //given User user = UserFixture.경영학과_19학번_영어_면제(); Set takenLectures = new HashSet<>((Set.of( @@ -165,7 +172,8 @@ void generateEngFreeCompletedCommonCultureDetailCategory( //when DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures, - commonCultureCategory); + commonCultureCategory + ); //then assertThat(detailCategoryResult) @@ -173,11 +181,13 @@ void generateEngFreeCompletedCommonCultureDetailCategory( .contains(commonCultureCategoryName, true); } - @DisplayName("영어 레벨 기초: 각 카테고리의 해당하는 과목의 이수 학점을 만족하지 못한 경우(기초영어 미수강) 이수 미 완료의 카테고리 졸업 결과를 생성한다.") + @DisplayName( + "영어 레벨 기초: 각 카테고리의 해당하는 과목의 이수 학점을 만족하지 못한 경우(기초영어 미수강) 이수 미 완료의 카테고리 졸업 결과를 생성한다." + ) @Test void generateEngBasicUnCompletedCommonCultureDetailCategory() { //given - User user = UserFixture.데이테크놀로지학과_18학번_Basic_Eng(); + User user = UserFixture.데이테크놀로지전공_18학번_Basic_Eng(); Set takenLectures = new HashSet<>((Set.of( TakenLecture.of(user, mockLectureMap.get("KMA00101"), 2019, Semester.FIRST), TakenLecture.of(user, mockLectureMap.get("KMA02106"), 2023, Semester.FIRST), @@ -192,14 +202,16 @@ void generateEngBasicUnCompletedCommonCultureDetailCategory() { CommonCulture.of(mockLectureMap.get("KMA02106"), commonCultureCategory), CommonCulture.of(mockLectureMap.get("KMA02107"), commonCultureCategory), CommonCulture.of(mockLectureMap.get("KMA02108"), commonCultureCategory), - CommonCulture.of(mockLectureMap.get("KMA02109"), commonCultureCategory))); + CommonCulture.of(mockLectureMap.get("KMA02109"), commonCultureCategory) + )); String commonCultureCategoryName = commonCultureCategory.getName(); int categoryTotalCredit = commonCultureCategory.getTotalCredit(); //when DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures, - commonCultureCategory); + commonCultureCategory + ); //then assertThat(detailCategoryResult) @@ -212,7 +224,8 @@ void generateEngBasicUnCompletedCommonCultureDetailCategory() { @ArgumentsSource(CommonCultureCategoryFixture.class) void generateEng12UnCompletedCommonCultureDetailCategory( CommonCultureCategory commonCultureCategory, - Set graduationLectures) { + Set graduationLectures + ) { //given User user = UserFixture.경영학과_19학번_ENG12(); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(new HashSet<>()); @@ -222,7 +235,8 @@ void generateEng12UnCompletedCommonCultureDetailCategory( //when DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures, - commonCultureCategory); + commonCultureCategory + ); //then assertThat(detailCategoryResult) @@ -235,7 +249,8 @@ void generateEng12UnCompletedCommonCultureDetailCategory( @ArgumentsSource(CommonCultureCategoryFixture.class) void generateEng34UnCompletedCommonCultureDetailCategory( CommonCultureCategory commonCultureCategory, - Set graduationLectures) { + Set graduationLectures + ) { //given User user = UserFixture.경영학과_19학번_ENG34(); TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(new HashSet<>()); @@ -245,7 +260,8 @@ void generateEng34UnCompletedCommonCultureDetailCategory( //when DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures, - commonCultureCategory); + commonCultureCategory + ); //then assertThat(detailCategoryResult) @@ -276,7 +292,8 @@ void generateMandatorySatisfactionCommonCultureDetailCategory() { //when DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures, - CHRISTIAN_A); + CHRISTIAN_A + ); //then assertThat(detailCategoryResult) @@ -300,7 +317,8 @@ void generateMandatoryUnSatisfactionCommonCultureDetailCategory() { //when DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures, - CHRISTIAN_A); + CHRISTIAN_A + ); //then assertThat(detailCategoryResult) diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManagerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManagerTest.java index 2a28fb7e..f31dba58 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManagerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/coreculture/CoreCultureDetailCategoryManagerTest.java @@ -36,8 +36,8 @@ class CoreCultureDetailCategoryManagerTest { static Stream ictUsers() { return Stream.of( - Arguments.arguments(UserFixture.응용소프트웨어학과_19학번()), - Arguments.arguments(UserFixture.데이터테크놀로지학과_19학번()), + Arguments.arguments(UserFixture.응용소프트웨어전공_19학번()), + Arguments.arguments(UserFixture.데이터테크놀로지전공_19학번()), Arguments.arguments(UserFixture.디지털콘텐츠디자인학과_19학번()) ); } @@ -45,8 +45,10 @@ static Stream ictUsers() { @DisplayName("각 카테고리의 해당하는 과목의 이수 학점을 만족한 경우 이수 완료의 카테고리 졸업 결과를 생성한다.") @ParameterizedTest @ArgumentsSource(CoreCultureCategoryFixture.class) - void generateCompletedCoreCultureDetailCategoryResult(CoreCultureCategory coreCultureCategory, - Set graduationLectures) { + void generateCompletedCoreCultureDetailCategoryResult( + CoreCultureCategory coreCultureCategory, + Set graduationLectures + ) { //given User user = UserFixture.경영학과_19학번_ENG34(); @@ -81,7 +83,8 @@ void generateCompletedCoreCultureDetailCategoryResult(CoreCultureCategory coreCu //when DetailCategoryResult detailCategoryResult = manager.generate(user, - takenLectureInventory, graduationLectures, coreCultureCategory); + takenLectureInventory, graduationLectures, coreCultureCategory + ); //then assertThat(detailCategoryResult) @@ -92,8 +95,10 @@ void generateCompletedCoreCultureDetailCategoryResult(CoreCultureCategory coreCu @DisplayName("각 카테고리의 해당하는 과목의 이수 학점을 만족하지 못한 경우 이수 미 완료의 카테고리 졸업 결과를 생성한다.") @ParameterizedTest @ArgumentsSource(CoreCultureCategoryFixture.class) - void generateUnCompletedCoreCultureDetailCategoryResult(CoreCultureCategory coreCultureCategory, - Set graduationLectures) { + void generateUnCompletedCoreCultureDetailCategoryResult( + CoreCultureCategory coreCultureCategory, + Set graduationLectures + ) { //given User user = UserFixture.경영학과_19학번_ENG34(); @@ -103,7 +108,8 @@ void generateUnCompletedCoreCultureDetailCategoryResult(CoreCultureCategory core //when DetailCategoryResult detailCategoryResult = manager.generate(user, - takenLectureInventory, graduationLectures, coreCultureCategory); + takenLectureInventory, graduationLectures, coreCultureCategory + ); //then assertThat(detailCategoryResult) @@ -111,7 +117,9 @@ void generateUnCompletedCoreCultureDetailCategoryResult(CoreCultureCategory core .contains(coreCultureCategoryName, false, categoryTotalCredit); } - @DisplayName("ICT학부 전공 학생은 핵심교양 세부 카테고리 '과학과기술' 중 SW프로그래밍입문을 수강했을 경우 카테고리 수강 학점이 아닌 자유학점으로 인정된다.") + @DisplayName( + "ICT학부 전공 학생은 핵심교양 세부 카테고리 '과학과기술' 중 SW프로그래밍입문을 수강했을 경우 카테고리 수강 학점이 아닌 자유학점으로 인정된다." + ) @ParameterizedTest @MethodSource("ictUsers") void generateUnCompletedScienceTechnologyDetailCategoryResultWithICT(User user) { @@ -129,12 +137,14 @@ void generateUnCompletedScienceTechnologyDetailCategoryResultWithICT(User user) //when DetailCategoryResult detailCategoryResult = manager.generate(user, - takenLectureInventory, graduationLectures, coreCultureCategory); + takenLectureInventory, graduationLectures, coreCultureCategory + ); //then assertThat(detailCategoryResult) .extracting("detailCategoryName", "isCompleted", "totalCredits", "normalLeftCredit", - "freeElectiveLeftCredit") + "freeElectiveLeftCredit" + ) .contains(coreCultureCategory.getName(), true, categoryTotalCredit, 3, 3); } @@ -154,12 +164,14 @@ void generateCompletedCultureArtDetailCategoryResult_Case_A() { //when DetailCategoryResult detailCategoryResult = manager.generate(user, - takenLectureInventory, graduationLectures, coreCultureCategory); + takenLectureInventory, graduationLectures, coreCultureCategory + ); //then assertThat(detailCategoryResult) .extracting("detailCategoryName", "isCompleted", "totalCredits", "normalLeftCredit", - "freeElectiveLeftCredit") + "freeElectiveLeftCredit" + ) .contains(coreCultureCategory.getName(), true, categoryTotalCredit, 0, 0); assertThat(detailCategoryResult.getTakenLectures()).contains( mockLectureMap.get("KMA02155")); @@ -181,12 +193,14 @@ void generateCompletedCultureArtDetailCategoryResult_Case_B() { //when DetailCategoryResult detailCategoryResult = manager.generate(user, - takenLectureInventory, graduationLectures, coreCultureCategory); + takenLectureInventory, graduationLectures, coreCultureCategory + ); //then assertThat(detailCategoryResult) .extracting("detailCategoryName", "isCompleted", "totalCredits", "normalLeftCredit", - "freeElectiveLeftCredit") + "freeElectiveLeftCredit" + ) .contains(coreCultureCategory.getName(), true, categoryTotalCredit, 0, 0); assertThat(detailCategoryResult.getTakenLectures()).contains( mockLectureMap.get("KMA02156")); @@ -209,12 +223,14 @@ void generateUnCompletedCultureArtDetailCategoryResultWith_2022_First() { //when DetailCategoryResult detailCategoryResult = manager.generate(user, - takenLectureInventory, graduationLectures, coreCultureCategory); + takenLectureInventory, graduationLectures, coreCultureCategory + ); //then assertThat(detailCategoryResult) .extracting("detailCategoryName", "isCompleted", "totalCredits", "normalLeftCredit", - "freeElectiveLeftCredit") + "freeElectiveLeftCredit" + ) .contains(coreCultureCategory.getName(), false, categoryTotalCredit, 6, 0); } } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/DataTechnologyMajorTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/DataTechnologyMajorTest.java index 0a39022d..a8d78acf 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/DataTechnologyMajorTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/major/DataTechnologyMajorTest.java @@ -31,7 +31,7 @@ class DataTechnologyMajorTest { void 전공필수_기준학점_충족() { //given - User user = UserFixture.데이테크놀로지학과_16학번(); + User user = UserFixture.데이테크놀로지전공_16학번(); Set takenLectures = new HashSet<>((Set.of( TakenLecture.of(user, mockLectureMap.get("HEB01102"), 2016, Semester.FIRST), //기초프로그래밍 TakenLecture.of(user, mockLectureMap.get("HEB01103"), 2016, Semester.SECOND), @@ -72,13 +72,16 @@ class DataTechnologyMajorTest { MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager( List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); - MajorGraduationManager manager = new MajorGraduationManager(mandatoryMajorManager, - electiveMajorManager); + MajorGraduationManager manager = new MajorGraduationManager( + mandatoryMajorManager, + electiveMajorManager + ); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, PRIMARY, - takenLectureInventory, 데이터테크놀로지_전공, 70); + takenLectureInventory, 데이터테크놀로지_전공, 70 + ); List detailCategory = detailGraduationResult.getDetailCategory(); DetailCategoryResult mandatoryDetailCategory = detailCategory.get(0); DetailCategoryResult electiveDetailCategory = detailCategory.get(1); @@ -104,7 +107,7 @@ class DataTechnologyMajorTest { void 전공필수_기준학점_미충족() { //given - User user = UserFixture.데이테크놀로지학과_18학번(); + User user = UserFixture.데이테크놀로지전공_18학번(); Set takenLectures = new HashSet<>((Set.of( TakenLecture.of(user, mockLectureMap.get("HEB01102"), 2018, Semester.FIRST), //기초프로그래밍 TakenLecture.of(user, mockLectureMap.get("HEB01104"), 2018, Semester.SECOND), @@ -138,13 +141,16 @@ class DataTechnologyMajorTest { MandatoryMajorManager mandatoryMajorManager = new MandatoryMajorManager( List.of(new OptionalMandatoryMajorHandler(), new ReplaceMandatoryMajorHandler())); ElectiveMajorManager electiveMajorManager = new ElectiveMajorManager(); - MajorGraduationManager manager = new MajorGraduationManager(mandatoryMajorManager, - electiveMajorManager); + MajorGraduationManager manager = new MajorGraduationManager( + mandatoryMajorManager, + electiveMajorManager + ); //when DetailGraduationResult detailGraduationResult = manager.createDetailGraduationResult(user, PRIMARY, - takenLectureInventory, 데이터테크놀로지_전공, 70); + takenLectureInventory, 데이터테크놀로지_전공, 70 + ); List detailCategory = detailGraduationResult.getDetailCategory(); DetailCategoryResult mandatoryDetailCategory = detailCategory.get(0); DetailCategoryResult electiveDetailCategory = detailCategory.get(1); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorGraduationManagerTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorGraduationManagerTest.java index 20b49df3..99e4f437 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorGraduationManagerTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/graduation/domain/service/submajor/SubMajorGraduationManagerTest.java @@ -24,7 +24,7 @@ class SubMajorGraduationManagerTest { @Test void createDetailGraduationResult() { //given - User user = UserFixture.응용소프트웨어학과_19학번(); + User user = UserFixture.응용소프트웨어전공_19학번(); Set takenLectures = new HashSet<>((Set.of( TakenLecture.of(user, Lecture.builder() .id("HEC01313") @@ -65,20 +65,24 @@ void createDetailGraduationResult() { //when DetailGraduationResult detailGraduationResult = subMajorManager.createDetailGraduationResult( user, - takenLectureInventory, graduationLectures, subMajorGraduationCredit); + takenLectureInventory, graduationLectures, subMajorGraduationCredit + ); //then int majorCredit = 3; assertThat(detailGraduationResult.getDetailCategory()).hasSize(1) .extracting("detailCategoryName", "isCompleted", "isSatisfiedMandatory", "totalCredits", - "takenCredits") + "takenCredits" + ) .contains( tuple("전공선택", true, true, subMajorGraduationCredit, - majorCredit * takenLecturesCount)); + majorCredit * takenLecturesCount + )); assertThat(detailGraduationResult) .extracting("graduationCategory", "isCompleted", "totalCredit", "takenCredit") .contains(SUB_MAJOR, true, subMajorGraduationCredit, - (double) majorCredit * takenLecturesCount); + (double) majorCredit * takenLecturesCount + ); } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java index d246b9be..2444a354 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindBasicAcademicalCulturePersistenceAdapterTest.java @@ -31,7 +31,7 @@ class FindBasicAcademicalCulturePersistenceAdapterTest extends PersistenceTestSu @Test void findBasicAcademicalCulture() { //given - User user = UserFixture.응용소프트웨어학과_19학번(); + User user = UserFixture.응용소프트웨어전공_19학번(); LectureJpaEntity lectureJpaEntityA = LectureJpaEntity.builder() .id("testA") .build(); @@ -50,8 +50,10 @@ void findBasicAcademicalCulture() { .college(BUSINESS.getName()) .build(); basicAcademicalCultureRepository.saveAll( - List.of(basicAcademicalCultureLectureJpaEntityA, - basicAcademicalCultureLectureJpaEntityB)); + List.of( + basicAcademicalCultureLectureJpaEntityA, + basicAcademicalCultureLectureJpaEntityB + )); //when Set basicAcademicalCulture = basicAcademicalCulturePersistenceAdapter.findBasicAcademicalCulture( diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapterTest.java index 24a6719f..fbebd434 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCommonCulturePersistenceAdapterTest.java @@ -34,7 +34,7 @@ class FindCommonCulturePersistenceAdapterTest extends PersistenceTestSupport { @Test void findBasicEngCommonCulture() { //given - User basicEngUser = UserFixture.데이테크놀로지학과_18학번_Basic_Eng(); + User basicEngUser = UserFixture.데이테크놀로지전공_18학번_Basic_Eng(); createCommonCultures(); //when @@ -51,7 +51,7 @@ void findBasicEngCommonCulture() { @Test void findEng12CommonCulture() { //given - User eng12User = UserFixture.데이테크놀로지학과_18학번(); + User eng12User = UserFixture.데이테크놀로지전공_18학번(); createCommonCultures(); //when @@ -68,7 +68,7 @@ void findEng12CommonCulture() { @Test void findEng34CommonCulture() { //given - User eng34User = UserFixture.데이테크놀로지학과_16학번_Eng34(); + User eng34User = UserFixture.데이테크놀로지전공_16학번_Eng34(); createCommonCultures(); //when @@ -85,7 +85,7 @@ void findEng34CommonCulture() { @Test void findEngFreeCommonCulture() { //given - User engFreeUser = UserFixture.응용소프트웨어학과_19학번_영어_면제(); + User engFreeUser = UserFixture.응용소프트웨어전공_19학번_영어_면제(); createCommonCultures(); //when diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCoreCulturePersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCoreCulturePersistenceAdapterTest.java index e28a7cef..802464ce 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCoreCulturePersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindCoreCulturePersistenceAdapterTest.java @@ -32,7 +32,7 @@ class FindCoreCulturePersistenceAdapterTest extends PersistenceTestSupport { @Test void findCoreCulture() { //given - User user = UserFixture.응용소프트웨어학과_19학번(); + User user = UserFixture.응용소프트웨어전공_19학번(); LectureJpaEntity lectureJpaEntityA = LectureJpaEntity.builder() .id("testA") .build(); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java index fd88c640..43f90914 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/lecture/infrastructure/adapter/persistence/FindMajorPersistenceAdapterTest.java @@ -29,7 +29,7 @@ class FindMajorPersistenceAdapterTest extends PersistenceTestSupport { @Test void findMajor() { //given - User user = UserFixture.응용소프트웨어학과_19학번(); + User user = UserFixture.응용소프트웨어전공_19학번(); LectureJpaEntity lectureJpaEntityA = LectureJpaEntity.builder() .id("testA") .build(); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingAnonymousServiceTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingAnonymousServiceTest.java index a51ee6a8..294554fb 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingAnonymousServiceTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/parsing/application/service/ParsingAnonymousServiceTest.java @@ -4,6 +4,7 @@ import com.plzgraduate.myongjigraduatebe.parsing.application.usecase.dto.ParsingAnonymousDto; import com.plzgraduate.myongjigraduatebe.user.domain.model.EnglishLevel; +import com.plzgraduate.myongjigraduatebe.user.domain.model.KoreanLevel; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -21,11 +22,13 @@ class ParsingAnonymousServiceTest { void parseAnonymous() { // given EnglishLevel englishLevel = EnglishLevel.ENG12; + KoreanLevel koreanLevel = KoreanLevel.FREE; String parsingText = "출력일자 : 2024/11/20|1/1|ICT융합대학 융합소프트웨어학부 데이터테크놀로지전공, 김보겸(60211648), 현학적 - 재학, 이수 - 6, 입학 - 신입학(2021/03/02)|토익 - 535, 영어교과목면제 - 면제없음, 최종학적변동 - 불일치복학(2023/01/09)|편입생 인정학점 - 교양 0, 전공 0, 자유선택 0, 성경과인간이해 0|교환학생 인정학점 - 학문기초교양 0, 일반교양 0, 전공 0, 복수전공학문기초교양 0, 복수전공 0, 융합전공 0, 부전공 0, 자유선택 0|공통교양 17, 핵심교양 12, 학문기초교양 15, 일반교양 14, 전공 50, 복수전공 0, 연계전공 0, 부전공 0, 교직 0, 자유선택 0|총 취득학점 - 108, 총점 - 441.5, 평균평점 - 4.33|이수구분|수강년도/학기|한글코드|과목코드|과목명|학점|등급|중복|공통교양|2023년 2학기|교필141|KMA02141|4차산업혁명과미래사회진로선택|2|P|공통교양|2021년 2학기|교필105|KMA02105|발표와토의|3|A0|공통교양|2021년 2학기|교필127|KMA00101|성서와인간이해|2|A0|공통교양|2021년 1학기|교필106|KMA02106|영어1|2|A+|공통교양|2021년 2학기|교필107|KMA02107|영어2|2|A+|공통교양|2021년 1학기|교필108|KMA02108|영어회화1|1|A+|공통교양|2021년 2학기|교필109|KMA02109|영어회화2|1|A0|공통교양|2021년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2021년 2학기|교필101|KMA02101|채플|0.5|P|공통교양|2022년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2023년 1학기|교필101|KMA02101|채플|0.5|P|공통교양|2021년 2학기|교필102|KMA02102|현대사회와기독교윤리|2|A0|핵심교양|2022년 1학기|교선128|KMA02128|글로벌문화|3|A+|핵심교양|2021년 1학기|교선114|KMA02114|민주주의와현대사회|3|A+|핵심교양|2021년 2학기|교선112|KMA02112|역사와문명|3|A0|핵심교양|2021년 1학기|교선135|KMA02135|우주,생명,마음|3|B+|학문기초교양|2023년 1학기|기사133|KMD02133|ICT비즈니스와경영|3|A0|학문기초교양|2023년 1학기|기사134|KMD02134|마케팅과ICT융합기술|3|A0|학문기초교양|2021년 1학기|기인107|KMB02107|인간심리의이해|3|A+|학문기초교양|2021년 2학기|기사135|KMD02135|저작권과소프트웨어|3|A+|학문기초교양|2022년 1학기|기컴112|KMI02112|컴퓨터논리의이해|3|B+|일반교양|2022년 1학기|균인131|KMK02131|사랑의인문학(KCU)|3|A0|일반교양|2021년 1학기|기컴125|KMI02125|생활속의스마트IT(KCU)|3|A+|일반교양|2024년 1학기|기문227|KMC02227|인류문명과기록문화로의여행|3|A+|일반교양|2024년 1학기|균사181|KMM02181|자기경영과실전취업준비|2|A+|일반교양|2024년 1학기|기컴126|KMI02126|파이썬프로그래밍입문|3|A+|전공1단계|2022년 1학기|데테202|HED01202|R통계분석|3|A+|전공1단계|2022년 1학기|데테316|HED01316|고급웹프로그래밍|3|A+|전공1단계|2023년 2학기|데테206|HED01206|기초웹프로그래밍|3|A+|전공1단계|2021년 1학기|융소102|HEB01102|기초프로그래밍|3|A+|전공1단계|2021년 2학기|융소105|HEB01105|기초프로그래밍2|3|A+|전공1단계|2023년 1학기|데테318|HED01203|데이터베이스|3|A+|전공1단계|2024년 1학기|데테319|HED01318|모바일컴퓨팅|3|A+|전공1단계|2023년 2학기|데테403|HED01403|블록체인기초|3|A+|전공1단계|2024년 1학기|데테404|HED01404|빅데이터기술특론1|3|A+|전공1단계|2023년 1학기|데테301|HED01301|소프트웨어공학|3|A+|전공1단계|2023년 2학기|데테209|HED01307|알고리즘|3|A+|전공1단계|2023년 2학기|데테303|HED01303|운영체제|3|A+|전공1단계|2023년 2학기|데테311|HED01311|자기주도학습|2|P|전공1단계|2022년 1학기|데테201|HED01201|자료구조|3|A+|전공1단계|2024년 1학기|데테413|HED01413|캡스톤디자인|3|A+|전공1단계|2023년 1학기|데테309|HED01309|컴퓨터아키텍쳐|3|A0|전공1단계|2023년 2학기|데테313|HED01313|컴퓨터통신|3|A+|"; // when ParsingAnonymousDto parsingAnonymousDto = parsingAnonymousService.parseAnonymous( englishLevel, + koreanLevel, parsingText ); diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java index b842e590..609aa251 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/support/WebAdaptorTestSupport.java @@ -54,25 +54,30 @@ @ActiveProfiles("test") @ComponentScan( basePackageClasses = {SecurityConfig.class, TokenProvider.class}, - excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = { + excludeFilters = @ComponentScan.Filter( + type = FilterType.ASSIGNABLE_TYPE, classes = { QuerydslConfig.class, - JpaAuditingConfig.class}) + JpaAuditingConfig.class + } + ) +) +@WebMvcTest( + controllers = { + SignInController.class, + TokenController.class, + SearchLectureController.class, + FindUserInformationController.class, + UpdateTakenLectureController.class, + ParsingTextController.class, + WithDrawController.class, + FindTakenLectureController.class, + ResetPasswordController.class, + SignUpController.class, + FindAuthIdController.class, + FindCompletedCreditsController.class, + FindDetailGraduationController.class + } ) -@WebMvcTest(controllers = { - SignInController.class, - TokenController.class, - SearchLectureController.class, - FindUserInformationController.class, - UpdateTakenLectureController.class, - ParsingTextController.class, - WithDrawController.class, - FindTakenLectureController.class, - ResetPasswordController.class, - SignUpController.class, - FindAuthIdController.class, - FindCompletedCreditsController.class, - FindDetailGraduationController.class -}) public abstract class WebAdaptorTestSupport { @Autowired @@ -128,5 +133,4 @@ void setUp() { .apply(springSecurity()) .build(); } - } diff --git a/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/UserTest.java b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/UserTest.java index cd849c9a..8c8f9df4 100644 --- a/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/UserTest.java +++ b/src/test/java/com/plzgraduate/myongjigraduatebe/user/domain/model/UserTest.java @@ -39,7 +39,13 @@ void setUp() { @Test void create() { //when - User newUser = User.create("tester00", "tester00!", EnglishLevel.ENG12, "60201000"); + User newUser = User.create( + "tester00", + "tester00!", + EnglishLevel.ENG12, + KoreanLevel.FREE, + "60201000" + ); //then assertThat(newUser) @@ -56,7 +62,8 @@ void updateStudentInformation() { //then assertThat(user) .extracting("name", "primaryMajor", "subMajor", "dualMajor", "studentCategory", - "totalCredit", "takenCredit", "graduated") + "totalCredit", "takenCredit", "graduated" + ) .contains("테스터2", "경영학과", null, null, StudentCategory.CHANGE_MAJOR, 134, 120.5, true); }