Skip to content

Commit

Permalink
feat: CommonCultureDetailCategoryManager - 기초영어 계산 로직 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
5uhwann committed Jul 12, 2024
1 parent 6dda2cc commit e585bd2
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class CommonCultureDetailCategoryManager {

private static final List<String> CHRISTAIN_MANDATORY_LECTURE_CODE_LIST =
List.of("KMA02100", "KMA00100", "KMA00101"); // 성경개론, 성서의이해, 성서와인간이해
private static final String BASIC_ENGLISH_LECTURE_CODE = "KMP02126";
private static final List<String> ENGLISH_12_MANDATORY_LECTURE_CODE_LIST =
List.of("KMA02106", "KMA02107", "KMA02108", "KMA02109"); // 영어1, 영어2, 영어회화1, 영어회화2
private static final List<String> ENGLISH_34_MANDATORY_LECTURE_CODE_LIST =
Expand Down Expand Up @@ -70,6 +71,9 @@ private boolean checkMandatorySatisfaction(User user, TakenLectureInventory take
takenLecture -> CHRISTAIN_MANDATORY_LECTURE_CODE_LIST
.contains(takenLecture.getLecture().getLectureCode()));
}
if(user.getEnglishLevel() == BASIC && category == ENGLISH) {
return isTakenBasicEnglish(takenLectureInventory) && checkEnglish12Satisfaction(takenLectureInventory);
}
if (user.getEnglishLevel() == ENG12 && category == ENGLISH) {
return checkEnglish12Satisfaction(takenLectureInventory);
}
Expand All @@ -79,6 +83,13 @@ private boolean checkMandatorySatisfaction(User user, TakenLectureInventory take
return true;
}

private boolean isTakenBasicEnglish(TakenLectureInventory takenLectureInventory) {
return takenLectureInventory.getCultureLectures().stream()
.map(takenLecture -> takenLecture.getLecture().getLectureCode())
.collect(Collectors.toList())
.contains(BASIC_ENGLISH_LECTURE_CODE);
}

private boolean checkEnglish12Satisfaction(TakenLectureInventory takenLectureInventory) {
for (String lectureCode : ENGLISH_12_MANDATORY_LECTURE_CODE_LIST) {
if (!takenLectureInventory.getCultureLectures().stream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ public Stream<? extends Arguments> provideArguments(ExtensionContext context) th
Arguments.arguments(CAREER, 공통교양_18_19()),
Arguments.arguments(CAREER, 공통교양_20_21_22()),
Arguments.arguments(DIGITAL_LITERACY, 공통교양_23()),
Arguments.arguments(ENGLISH, 영어레벨_Basic()),
Arguments.arguments(ENGLISH, 영어레벨_12()),
Arguments.arguments(ENGLISH, 영어레벨_34())

);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,16 @@ public Stream<? extends Arguments> provideArguments(ExtensionContext context) th
return lectureSet;
}

public static Set<CommonCulture> 영어레벨_Basic() {
Set<CommonCulture> lectureSet = new HashSet<>();
lectureSet.add(CommonCulture.of(mockLectureMap.get("KMP02126"), ENGLISH));
lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02106"), ENGLISH));
lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02107"), ENGLISH));
lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02108"), ENGLISH));
lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02109"), ENGLISH));
return lectureSet;
}

public static Set<CommonCulture> 영어레벨_12() {
Set<CommonCulture> lectureSet = new HashSet<>();
lectureSet.add(CommonCulture.of(mockLectureMap.get("KMA02106"), ENGLISH));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,43 @@ class CommonCultureDetailCategoryManagerTest {
Map<String, Lecture> mockLectureMap = LectureFixture.getMockLectureMap();
CommonCultureDetailCategoryManager manager = new CommonCultureDetailCategoryManager();

@DisplayName("영어 레벨 기초: 각 카테고리의 해당하는 과목의 이수 학점을 만족한 경우 이수 완료의 카테고리 졸업 결과를 생성한다.")
@ParameterizedTest
@ArgumentsSource(CommonCultureCategoryFixture.class)
void generateEngBasicCompletedCommonCultureDetailCategory(CommonCultureCategory commonCultureCategory,
Set<CommonCulture> graduationLectures) {
//given
User user = UserFixture.데이테크놀로지학과_18학번_Basic_Eng();
Set<TakenLecture> takenLectures = new HashSet<>((Set.of(
TakenLecture.of(user, mockLectureMap.get("KMP02126"), 2019, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA00101"), 2019, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02102"), 2019, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02122"), 2019, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02104"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02141"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02106"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02107"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02123"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02124"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02108"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02109"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02125"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02126"), 2023, Semester.FIRST)
)));
TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures);
String commonCultureCategoryName = commonCultureCategory.getName();
int categoryTotalCredit = commonCultureCategory.getTotalCredit();

//when
DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures,
commonCultureCategory);

//then
assertThat(detailCategoryResult)
.extracting("detailCategoryName", "isCompleted", "totalCredits")
.contains(commonCultureCategoryName, true, categoryTotalCredit);
}

@DisplayName("영어 레벨 12: 각 카테고리의 해당하는 과목의 이수 학점을 만족한 경우 이수 완료의 카테고리 졸업 결과를 생성한다.")
@ParameterizedTest
@ArgumentsSource(CommonCultureCategoryFixture.class)
Expand Down Expand Up @@ -129,6 +166,39 @@ void generateEngFreeCompletedCommonCultureDetailCategory(CommonCultureCategory c
.contains(commonCultureCategoryName, true);
}

@DisplayName("영어 레벨 기초: 각 카테고리의 해당하는 과목의 이수 학점을 만족하지 못한 경우(기초영어 미수강) 이수 미 완료의 카테고리 졸업 결과를 생성한다.")
@Test
void generateEngBasicUnCompletedCommonCultureDetailCategory() {
//given
User user = UserFixture.데이테크놀로지학과_18학번_Basic_Eng();
Set<TakenLecture> takenLectures = new HashSet<>((Set.of(
TakenLecture.of(user, mockLectureMap.get("KMA00101"), 2019, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02106"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02107"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02108"), 2023, Semester.FIRST),
TakenLecture.of(user, mockLectureMap.get("KMA02109"), 2023, Semester.FIRST)
)));
TakenLectureInventory takenLectureInventory = TakenLectureInventory.from(takenLectures);
CommonCultureCategory commonCultureCategory = ENGLISH;
Set<CommonCulture> graduationLectures = new HashSet<>(Set.of(
CommonCulture.of(mockLectureMap.get("KMP02126"), commonCultureCategory),
CommonCulture.of(mockLectureMap.get("KMA02106"), commonCultureCategory),
CommonCulture.of(mockLectureMap.get("KMA02107"), commonCultureCategory),
CommonCulture.of(mockLectureMap.get("KMA02108"), commonCultureCategory),
CommonCulture.of(mockLectureMap.get("KMA02109"), commonCultureCategory)));
String commonCultureCategoryName = commonCultureCategory.getName();
int categoryTotalCredit = commonCultureCategory.getTotalCredit();

//when
DetailCategoryResult detailCategoryResult = manager.generate(user, takenLectureInventory, graduationLectures,
commonCultureCategory);

//then
assertThat(detailCategoryResult)
.extracting("detailCategoryName", "isCompleted", "totalCredits")
.contains(commonCultureCategoryName, false, categoryTotalCredit);
}

@DisplayName("영어 레벨 12: 각 카테고리의 해당하는 과목의 이수 학점을 만족하지 못한 경우 이수 미 완료의 카테고리 졸업 결과를 생성한다.")
@ParameterizedTest
@ArgumentsSource(CommonCultureCategoryFixture.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,14 @@
import org.springframework.beans.factory.annotation.Autowired;

import com.plzgraduate.myongjigraduatebe.fixture.UserFixture;
import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.FindCommonCulturePersistenceAdapter;
import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture;
import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.CommonCultureJpaEntity;
import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.entity.LectureJpaEntity;
import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.CommonCultureRepository;
import com.plzgraduate.myongjigraduatebe.lecture.infrastructure.adapter.persistence.repository.LectureRepository;
import com.plzgraduate.myongjigraduatebe.lecture.domain.model.CommonCulture;
import com.plzgraduate.myongjigraduatebe.support.PersistenceTestSupport;
import com.plzgraduate.myongjigraduatebe.user.domain.model.User;

import lombok.extern.slf4j.Slf4j;

class FindCommonCulturePersistenceAdapterTest extends PersistenceTestSupport {

private static final String BASIC_ENGLISH_CODE = "KMP02126";
Expand Down
1 change: 1 addition & 0 deletions src/test/resources/lecture.csv
Original file line number Diff line number Diff line change
Expand Up @@ -199,3 +199,4 @@ HAI01564, 동양철학개론, 3, 0, HAI01564
HAI01565, 철학적글쓰기, 3, 0, HAI01565
HAI01348, 신유학의이해, 3, 0, null
HAI01247, 유학사상의이해, 3, 0, null
KMP02126, 기초영어, 2, 0, null

0 comments on commit e585bd2

Please sign in to comment.