Skip to content

constant94-dev/woowa-precourse-javaChristmas

Repository files navigation

크리스마스 프로모션 미션 핵심: 12월 이벤트 계획에 포함된 할인 기능을 제공한다.

🎄 크리스마스 프로모션 기능 목록

  • 크리스마스 프로모션 기능 출발지 - ChristmasPromotion#run()
    • 프로모션 객체 준비 - ChristmasPromotion#ready()
    • 프로모션 기능 시작 - ChristmasPromotion#promotionPlay()
  • 크리스마스 디데이 할인
    • 디데이 할인 일자에 맞는 금액 할인 - DDay#discountOnTotalOrderAmount()
    • 디데이 할인 날짜 및 할인 금액 열거형 상수 - DDayEnum
  • 평일 할인
    • 디저트 메뉴 할인 - Weekday#discountOnDessertMenu()
    • 평일 날짜 확인 - Weekday#discountOnWeekday()
    • 평일 할인 결과 - Weekday#discountWeekdayResult()
    • 평일 할인 품목 확인 - Weekday#hasDiscountWeekday()
    • 평일 할인 품목 수 확인 - Weekday#isItem()
    • 평일 할인 날짜 및 할인 금액 열거형 상수 - WeekdayEnum
  • 주말 할인
    • 메인 메뉴 할인 - Weekend#discountOnMainMenu()
    • 주말 날짜 확인 - Weekend#discountOnWeekend()
    • 주말 할인 결과 - Weekend#discountWeekendResult()
    • 주말 할인 품목 확인- Weekend#hasDiscountWeekend()
    • 주말 할인 품목 수 확인- Weekend#isItem()
    • 주말 할인 날짜 및 할인 금액 열거형 상수 - WeekendEnum
  • 특별 할인
    • 이벤트 배지 있으면 1,000원 할인 - Special#discountOnStarBadge()
    • 특별 할인 날짜 및 할인 금액 열거형 상수 - SpecialEnum
  • 증정 이벤트
    • 할인 전 금액 12만원 이상일 때 샴페인 증정 - Gift#giftOnChampagne()
    • 증정 이벤트 금액 열거형 상수 - GiftEnum
  • 이벤트 배지 부여 - EventBadge#grantToBadge()
    • 총 혜택 금액이 5천원 미만일 때 검증 - EventBadge#validateNotBadge()
    • 총 혜택 금액이 5천원 이상일 때 배지 부여 - EventBadge#grantBadgeOn5000()
    • 총 혜택 금액이 5천원 이상 1만원 미만일 떼 검증 - EventBadge#validateStar()
    • 총 혜택 금액이 1만원 이상일 때 배지 부여 - EventBadge#grantBadgeOn10000()
    • 총 혜택 금액이 1만원 이상 2만원 미만일 때 검증 - EventBadge#validateTree()
    • 총 혜택 금액이 2만원 이상일 때 배지 부여 - EventBadge#grantBadgeOn20000()
    • 총 혜택 금액이 2만원 이상일 때 검증 - EventBadge#validateSanta()
    • 이벤트 배지 변경 - EventBadge#changeBadgeStatus()
    • 이벤트 배지 가져오기 - EventBadge#getBadgeStatus()
  • 이벤트 혜택
    • 전체 이벤트 혜택 생성 - Benefit#createEventBenefit()
    • 증정 이벤트 혜택 생성 - Benefit#createGiftDiscount()
    • 증정 이벤트 혜택 불가능 - Benefit#isGiftNotInBenefit()
    • 증정 이벤트 혜택 가능 - Benefit#isGiftInBenefit()
    • 특별 할인 혜택 생성 - Benefit#createSpecialDiscount()
    • 특별 할인 혜택 불가능 - Benefit#isSpecialNotInBenefit()
    • 특별 할인 혜택 가능 - Benefit#isSpecialInBenefit()
    • 주말 할인 혜택 생성 - Benefit#createWeekendDiscount()
    • 주말 할인 혜택 불가능 - Benefit#isWeekendNotInBenefit()
    • 주말 할인 혜택 가능 - Benefit#isWeekendInBenefit()
    • 평일 할인 혜택 생성 - Benefit#createWeekdayDiscount()
    • 평일 할인 혜택 불가능 - Benefit#isWeekdayNotInBenefit()
    • 평일 할인 혜택 가능 - Benefit#isWeekdayInBenefit()
    • 디데이 혜택 생성 - Benefit#createDdayDiscount()
    • 디데이 혜택 불가능 - Benefit#isDdayNotInBenefit()
    • 디데이 혜택 가능 - Benefit#isDdayInBenefit()
    • 할인 전 총 주문 금액 생성 - Benefit#createBeforeOfTotalDiscount()
    • 할인 후 총 주문 금액 생성 - Benefit#createDiscountTotalAmount()
    • 할인 후 샴페인 증정 계산 - Benefit#calculateEventToGift()
    • 고객 정보 샴페인 존재 여부 - Benefit#isChampagne()
    • 총 혜택 금액 생성 - Benefit#createTotalBenefitAmount()
    • 고객 헤택 내역 확인 - Benefit#hasTotalBenefitAmount()
    • 고객 혜택 금액 계산 - Benefit#totalBenefitAmountCalculate()
    • 이벤트 배지 생성 - Benefit#createEventBadge()
    • 총 혜택 금액 가져오기 - Benefit#getTotalOrderAmount()
    • 이벤트별 혜택 금액 확인 - Benefit#hasTotalOrderAmount()
    • 총 혜택 금액 계산 - Benefit#totalAmountCalculate()
  • 고객 주문
    • 이벤트 플래너 입장 - InputView#helloWooTeco()
    • 방문 날짜 입력 - InputView#visitToDate()
      • 방문 날짜 검증 - InputViewValidator#validateMore1AndLess31()
      • 1 이상 31 이하 검증 - InputViewValidator#validateMatchesVisitDate()
    • 주문할 메뉴와 개수 입력 - InputView#orderToMenuAndCount()
      • 주문 메뉴 검증 - InputViewValidator#validateMenuToExist()
      • 문자열 콤마(,) 기준 분할 - Ordered#splitOrderByComma()
      • 문자열 콤마(,) 존재 확인 - Ordered#isExistComma()
      • 문자열 대쉬(-) 기준 분할 - Ordered#splitOrderByDash()
      • 문자열 대쉬(-) 존재 확인 - Ordered#isExistDash()
      • 문자열 공백 제거 - Ordered#removeSpace()
      • 주문 메뉴 생성 - Ordered#createMenuOrders()
      • 메뉴 이름 확인 - Ordered#isName()
        • 주문 메뉴 이름 추가 - Ordered#addOrderMenuName()
        • 메뉴 이름 검증 - OrderValidator#validateMatchesOrderName()
        • 유효한 이름 확인 - OrderValidator#isValidToName()
        • 중복되는 메뉴 이름 검증 - OrderValidator#validateDuplicateName()
        • 음료만 주문했는지 검증 - OrderValidator#validateOnlyDrink()
      • 메뉴 개수 확인 - Ordered#isCount()
        • 주문 메뉴 개수 추가 - Ordered#addOrderMenuCount()
        • 메뉴 개수 검증 - OrderValidator#validateMatchesOrderCount()
        • 유효한 개수 확인 - OrderValidator#isValidCount
        • 주문한 총 수량이 20개가 넘는지 검증 - OrderValidator#validateMaxCount20()
      • 고객 주문 메뉴 이름 또는 개수 검증 - OrderValidator#validateCountOrName()
      • 고객 주문 정보 추가 - Ordered#addUserInfo()
    • 주문 반복을 위한 열거형 상수 - Flag
    • 음식 메뉴와 가격 열거형 상수 - Menu
    • 이벤트 플래너 열거형 상수 - EventPlanner
    • 주문 관련 예외 문구 열거형 상수 - ExceptionMessage
    • 최소, 최대 주문 수 열거형 상수 - Limit
    • 알 수 없는 주문 열거형 상수 - OrderAnomaly
  • 주문 내역
    • 우테코 식당 혜택 미리보기 - OutputView#printWooTecoEventPreview()
    • 주문 메뉴 출력 - OutputView#printOrderToMenu()
    • 할인 전 총주문 금액 출력 - OutputView#printTotalOrderAmountBeforeDiscount()
    • 증정 메뉴 출력 - OutputView#printGiftToMenu()
      • 증정 이벤트 검증 - OutputViewValidator#validateGift()
      • 증정 메뉴 존재 여부 - OutputViewValidator#isGift()
    • 혜택 내역 출력 - OutputView#printDiscountDetails()
      • 전체 혜택 내역 검증 - OutputViewValidator#validateDiscount()
      • 혜택 내역 존재 여부 - OutputViewValidator#notInBenefit()
      • 디데이 할인 여부 - OutputViewValidator#haveDiscountDDay()
      • 평일 할인 여부 - OutputViewValidator#haveDiscountWeekday()
      • 주말 할인 여부 - OutputViewValidator#haveDiscountWeekend()
      • 특별 할인 여부 - OutputViewValidator#haveDiscountSpecial()
      • 증정 이벤트 여부 - OutputViewValidator#haveDiscountGift()
    • 총 혜택 금액 출력 - OutputView#printTotalDiscount()
      • 총 혜택 금액 검증 - OutputViewValidator#validateTotalDiscount()
    • 할인 후 예상 결제 금액 출력 - OutputView#printEstimatedAmountAfterDiscount()
    • 12월 이벤트 배지 출력 - OutputView#printEventBadge()
  • 예외 메시지 핸들러
    • 1 이상 31 이하 숫자 아닐 때, 예외 발생 - MessageHandler#more1AndLess31()
    • 중복되는 메뉴일 때, 예외 발생 - MessageHandler#duplicateToMenu()
    • 콤마(,)가 존재하지 않을 때, 예외 발생 - MessageHandler#notExistComma()
    • 대쉬(-)가 존재하지 않을 때, 예외 발생 - MessageHandler#notExistDash()
    • 유효하지 않은 이름일 때, 예외 발생 - MessageHandler#invalidToName()
    • 유효하지 않은 개수일 때, 예외 발생 - MessageHandler#invalidToCount()
    • 음료만 주문했을 때, 예외 발생 - MessageHandler#notOnlyDrink()
    • 주문 가능한 최대 수를 초과할 때, 예외 발생 - MessageHandler#limitOfMenuCount()
    • 유효하지 않은 이름 또는 개수일 때, 예외 발생 - MessageHandler#invalidToValue()
  • 고객 주문 정보
    • 메뉴 이름 추가 - OrderInfo#addMenuName()
    • 메뉴 수 추가 - OrderInfo#addMenuCount()
    • 메뉴 이름과 개수 추가 - OrderInfo#addSplitMenus()
    • 메뉴 이름과 개수 가져오기 - OrderInfo#getSplitMenus()
    • 메뉴 이름 리스트 가져오기 - OrderInfo#getNames()
    • 메뉴 수 리스트 가져오기 - OrderInfo#getCounts()
    • 주문 메뉴 이름 크기 가져오기 - OrderInfo#getNameSize()
    • 주문 메뉴 중 음료 목록 제거 - OrderInfo#removeToDrink()
    • 주문 메뉴가 없는지 확인 - OrderInfo#isOrderEmpty()
    • 주문 메뉴 총합 - OrderInfo#maxToCount()
    • 주문 메뉴 이름 중복 수 - OrderInfo#duplicateName()
    • 고객 방문 일자 가져오기 - UserInfo#getVisitDate()
    • 모든 고객 주문 메뉴 가져오기 - UserInfo#getMenuOrders()
    • 모든 이벤트 혜택 가져오기 - UserInfo#getEventDetails()
    • 해당하는 이벤트 혜택 가져오기 - UserInfo#getEventDetail()
    • 고객 주문 추가 - UserInfo#addMenuOrder()
    • 해당하는 이벤트 추가 - UserInfo#addEventDetail()
    • 고객 방문 일자 변경 - UserInfo#changeVisitDate()

♻️ 크리스마스 프로모션 기능 테스트 목록

  • 크리스마스 디데이 할인
    • 크리스마스 디데이 이벤트 기간에 맞는 할인 금액 확인 - DDayTest#discountOnDDayInDate()
    • 크리스마스 디데이 이벤트 기간에 해당하지 않는 경우 할인 안됨 - DDayTest#discountOnDDayNotInDate()
  • 평일 할인
    • 평일 이벤트 기간에 맞는 할인 금액 확인 - WeekdayTest#discountOnWeekday()
    • 평일 이벤트 기간에 해당하지 않는 경우 할인 안됨 - WeekdayTest#discountOnOrderNotInWeekday()
    • 평일 이벤트 기간에 해당할 때 디저트 메뉴 할인 가격 확인 - WeekdayTest#discountOnDessertMenu()
  • 주말 할인
    • 주말 이벤트 기간에 맞는 할인 금액 확인 - WeekendTest#discountOnOrderInWeekend()
    • 주말 이벤트 기간에 해당하지 않는 경우 할인 안됨 - WeekendTest#discountOnOrderNotInWeekend()
    • 주말 이벤트 기간에 해당할 때 메인 메뉴 할인 개수 확인 - WeekendTest#discountOnMainMenu()
  • 특별 할인
    • 특별 이벤트 기간에 맞는 할인 금액 확인 - SpecialTest#discountOnStarBadge()
    • 특별 이벤트 기간에 해당하지 않는 경우 할인 안됨 - Special#discountOnCalendarNotHaveStar()
  • 증정 이벤트
    • 할인 전 총 주문 금액이 12만원 이상일 때, 샴페인 증정 확인 - GiftTest#giftOnChampagne()
    • 할인 전 총 주문 금액이 12만원 이하일 때, 샴페인 증정 안함 - GiftTest#giftNotHaveChampagne()
  • 이벤트 배지
    • 총 혜택 금액에 따라서 이벤트 배지 부여 - EventBadgeTest#grantToBadge()
  • 혜택 관련 처리
    • 이벤트 혜택을 생성할 때 할인 전 총주문 금액을 확인 - BenefitTest#createEventBenefit()
    • 이벤트로 발생한 총 혜택 금액을 확인 - BenefitTest#createTotalBenefitAmount()
    • 이벤트로 발생한 총 혜택 금액에 따라서 배지 부여 확인 - BenefitTest#createEventBadge()
    • 할인 전 총주문 금액에서 할인 금액을 제외한 할인 후 예상 결제 금액 확인 - BenefitTest#createDiscountTotalAmount()
  • 입력 기능 테스트
    • 우테코 식당 입장할 때 통과 문구 - InputViewTest#helloWooTecoSuccess()
    • 우테코 식당 입장할 때 실패 문구 - InputViewTest#helloWooTecoFailure()
  • 출력 기능 테스트
    • 고객이 입력한 예상 방문 날짜 출력 확인 - OutputView#printWooTecoEventPreview()
    • 고객이 주문한 메뉴 출력 확인 - OutputView#printOrderToMenu()
    • 할인 전 총주문 금액 출력 확인 - OutputView#printTotalOrderAmountBeforeDiscount()
    • 증정 메뉴 출력 확인 - OutputView#printGiftToMenu()
    • 혜택 내역 출력 확인 - OutputView#printDiscountDetails()
    • 총 혜택 내역 출력 확인- OutputView#printTotalDiscount()
    • 할인 후 예상 결제 금액 확인 - OutputView#printEstimatedAmountAfterDiscount()
    • 12월 이벤트 배지 확인 - OutputView#printEventBadge()
  • 입력 검증 유틸 테스트
    • 1 이상 31 이하의 숫자가 맞는 경우, 통과 - InputViewValidatorTest#validateMore1AndLess31Success()
    • 1 이상 31 이하의 숫자가 아닌 경우, 예외 발생 - InputViewValidatorTest#validateMore1AndLess31Failure()
    • 문자열 콤마(,)와 대쉬(-)를 기준으로 분할한 값을 확인 - InputViewValidatorTest#validateMenuToSplit()
    • 문자열 분할한 길이가 1보다 클때 콤마(,) 또는 대쉬(-)가 존재하지 않는 경우 예외 발생 - InputViewValidatorTest#validateMenuToNotSplit()
  • 출력 검증 유틸 테스트
    • 증정 메뉴가 있을 때와 없을 때 출력 확인 - OutputViewValidatorTest#validateGiftToExist()
    • 고객 혜택 전체 내역 출력 확인 - OutputViewValidatorTest#validateDiscountTotal()
    • 고객 혜택 없을 때 출력 확인 - OutputViewValidatorTest#validateNoDiscountTotal()
    • 총 혜택 금액에 따라서 달라지는 출력 확인 - OutputViewValidatorTest#validateTotalDiscountForm()
  • 주문 내역 유틸 테스트
    • 고객 주문 관련 검증이 성공했을 때 통과 - OrderedTest#createMenuOrdersSuccess()
    • 고객 주문 관련 검증이 실패했을 때 예외 발생 - OrderedTest#createMenuOrdersFailure()
    • 고객 주문 관련 검증 후 최종 내역 저장되면 통과 - OrderedTest#createUserInfoSuccess()
  • 주문 내역 검증 유틸 테스트
    • 주문한 메뉴 이름이 유효할 때 통과 - OrderedValidatorTest#validateMatchesOrderNameIsValidToName()
    • 주문한 메뉴 이름이 유효하지 않을 때 예외 발생 - OrderedValidatorTest#validateOrderNameIsInvalidToName()
    • 주문한 개수가 유효할 때 통과 - OrderedValidatorTest#validateMatchesOrderCountIsValidCount()
    • 주문한 개수가 유효하지 않을 때 예외 발생 - OrderedValidatorTest#validateMatchesOrderCountIsInvalidCount()
    • 음료만 주문하지 않았을 때 통과 - OrderedValidatorTest#validateOrderNotOnlyDrink()
    • 음료만 주문했을 때 예외 발생 - OrderedValidatorTest#validateOrderOnlyDrink()
    • 주문한 총 개수가 20개 이하일 때 통과 - OrderedValidatorTest#validateMaxCountLess20()
    • 주문한 총 개수가 20개 초과일 때 예외 발생 - OrderedValidatorTest#validateMaxCountMore20()
    • 주문 메뉴 이름 중 중복된 메뉴가 없을 때 통과 - OrderedValidatorTest#validateNotDuplicateName()
    • 주문 메뉴 이름 중 중복된 메뉴가 있을 때 예외 발생 - OrderedValidatorTest3validateDuplicateToName()
    • 주문 메뉴 이름과 개수 검증이 문제 없을 때 통과 - OrderedValidatorTest#validateCountOrNameSuccess()
    • 주문 메뉴 이름과 개수 검증이 문제 있을 때 실패 - OrderedValidatorTest#validateCountOrNameFailure()

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages