diff --git a/README.md b/README.md index 43fae1f26..5a59608c7 100644 --- a/README.md +++ b/README.md @@ -70,3 +70,17 @@ - [x] 생성된 로또 번호와 입력받은 지난 주 당첨번호를 비교한다. - [x] 비교한 결과를 기반으로 통계를 출력한다. - [x] 총 수익률을 계산하고 출력한다. + +## 4단계 - 로또(2등) +### 기능 요구사항 +- 2등을 위해 추가 번호를 하나 더 추첨한다. +- 당첨 통계에 2등도 추가해야 한다. +### 기능 목록 도출 +#### 보너스 볼 입력 +- [x] 1 ~ 45 사이의 숫자인 보너스 볼을 입력받는다. + - [x] 보너스 볼은 입력 받은 지난 주 당첨번호 6개와 겹칠 수 없다. +#### 당첨 여부 판별시 2등 추가 +- [x] LottoPrize 에 2등이 추가되어야 한다. +- [x] 5개 일치 + 보너스 볼 일치의 경우에 2등으로 판별한다. +#### 통계 출력에 2등 추가 +- [x] 통계 출력시 2등을 추가하여 출력한다. diff --git a/src/main/java/lotto/constants/LottoGameConstant.java b/src/main/java/lotto/constants/LottoGameConstant.java index 403d5cbeb..8df8ab588 100644 --- a/src/main/java/lotto/constants/LottoGameConstant.java +++ b/src/main/java/lotto/constants/LottoGameConstant.java @@ -1,6 +1,8 @@ package lotto.constants; public class LottoGameConstant { + private LottoGameConstant() {} + public static final int LOTTO_TICKET_PRICE = 1_000; public static final double PROFIT_CRITERIA = 1.0; } diff --git a/src/main/java/lotto/constants/LottoGameErrorMessage.java b/src/main/java/lotto/constants/LottoGameErrorMessage.java index 0d475307c..a483083e8 100644 --- a/src/main/java/lotto/constants/LottoGameErrorMessage.java +++ b/src/main/java/lotto/constants/LottoGameErrorMessage.java @@ -1,8 +1,12 @@ package lotto.constants; public class LottoGameErrorMessage { + private LottoGameErrorMessage() {} + public static final String INVALID_LOTTO_NUMBER_RANGE = "[ERROR] 로또 숫자는 1부터 45 사이의 값이어야 합니다."; public static final String INVALID_LOTTO_NUMBER_NOT_UNIQUE = "[ERROR] 로또 숫자는 중복될 수 없습니다."; + public static final String INVALID_BONUS_LOTTO_NUMBER = "[ERROR] 보너스 볼 숫자는 지난 주 당첨번호와 같을 수 없습니다."; + public static final String INVALID_LOTTO_NUMBERS_SIZE = "[ERROR] 로또 숫자는 6개로 이루어져야 합니다."; public static final String INSUFFICIENT_MONEY = "[ERROR] 받은 금액으로 로또를 구매하기에 부족합니다."; public static final String INVALID_MONEY_LEFT = "[ERROR] 1000원 단위의 금액을 지불해주세요."; diff --git a/src/main/java/lotto/constants/LottoGameMessage.java b/src/main/java/lotto/constants/LottoGameMessage.java index a2fc5bb75..12ea4a5cf 100644 --- a/src/main/java/lotto/constants/LottoGameMessage.java +++ b/src/main/java/lotto/constants/LottoGameMessage.java @@ -1,12 +1,16 @@ package lotto.constants; public class LottoGameMessage { + private LottoGameMessage() {} + public static final String WAIT_FOR_USER_MONEY_INPUT = "구입금액을 입력해 주세요."; public static final String PURCHASED_LOTTO_COUNT_INFORMATION = "%s개를 구매했습니다."; public static final String WAIT_FOR_LATEST_LOTTO_RESULT_INPUT = "지난 주 당첨 번호를 입력해 주세요."; + public static final String WAIT_FOR_BONUS_LOTTO_NUMBER_INPUT = "보너스 볼을 입력해 주세요."; public static final String LOTTO_STATISTICS_INFORMATION_TITLE = "당첨 통계"; public static final String DIVIDER = "---------"; - public static final String STATISTICS_PER_NUMBER_OF_MATCH = "%s개 일치 (%s원)- %s개"; + public static final String STATISTICS_PER_NUMBER_OF_MATCH = "%s개 일치%s(%s원)- %s개"; + public static final String STATISTICS_PER_NUMBER_OF_MATCH_BONUS_MATCHED = ", 보너스 볼 일치"; public static final String TOTAL_PROFIT_RESULT = "총 수익률은 %2.2f입니다."; public static final String TOTAL_PROFIT_DESCRIPTION = "(기준이 1이기 때문에 결과적으로는 %s라는 의미임)"; diff --git a/src/main/java/lotto/constants/LottoNumberConstant.java b/src/main/java/lotto/constants/LottoNumberConstant.java index 7fcc4b9fe..3402c5914 100644 --- a/src/main/java/lotto/constants/LottoNumberConstant.java +++ b/src/main/java/lotto/constants/LottoNumberConstant.java @@ -1,6 +1,8 @@ package lotto.constants; public class LottoNumberConstant { + private LottoNumberConstant() {} + public static final Integer LOTTO_NUMBER_SIZE = 6; public static final Integer LOTTO_NUMBER_MINIMUM_VALUE = 1; public static final Integer LOTTO_NUMBER_MAXIMUM_VALUE = 45; diff --git a/src/main/java/lotto/domain/LottoGame.java b/src/main/java/lotto/domain/LottoGame.java index b083b9894..e9f38226a 100644 --- a/src/main/java/lotto/domain/LottoGame.java +++ b/src/main/java/lotto/domain/LottoGame.java @@ -1,5 +1,6 @@ package lotto.domain; +import lotto.view.InputView; import lotto.view.ResultView; import java.util.List; @@ -14,14 +15,18 @@ public LottoGame(LottoTickets lottoTickets, Money money) { } public void play() { - System.out.println("print"); ResultView.printCount(money.calculateLottoTicketCount()); ResultView.printLottoTickets(lottoTickets); - List lottoNumbers = LottoNumbers.getLottoNumbersFromInput(); + String receivedNumbers = InputView.inputLatestLottoResult(); + List numberList = LottoNumbers.getLottoNumbersFromInput(receivedNumbers); + LottoNumbers lastWinningLottoNumbers = LottoNumbers.generateLottoNumbers(numberList); - List matchResults = lottoTickets.matchResults( - new LottoTicket(LottoNumbers.generateLottoNumbers(lottoNumbers).getReadOnlyLottoNumbers()) + LottoNumber receivedBonusLottoNumber = InputView.inputBonusLottoNumber(lastWinningLottoNumbers); + + LottoPrizes matchResults = lottoTickets.matchResults( + new LottoTicket(lastWinningLottoNumbers.getReadOnlyLottoNumbers()), + receivedBonusLottoNumber ); ResultView.printStatistics(matchResults, money); } diff --git a/src/main/java/lotto/domain/LottoNumbers.java b/src/main/java/lotto/domain/LottoNumbers.java index b4b95524d..8cc4c3675 100644 --- a/src/main/java/lotto/domain/LottoNumbers.java +++ b/src/main/java/lotto/domain/LottoNumbers.java @@ -1,7 +1,6 @@ package lotto.domain; -import lotto.view.InputView; - +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -11,7 +10,7 @@ public class LottoNumbers { private List lottoNumbers; private LottoNumbers(List lottoNumbers) { - this.lottoNumbers = lottoNumbers; + this.lottoNumbers = new ArrayList<>(lottoNumbers); } public static LottoNumbers generateLottoNumbers(NumbersGenerator numbersGenerator) { @@ -33,10 +32,12 @@ public List getReadOnlyLottoNumbers() { return Collections.unmodifiableList(this.lottoNumbers); } - public static List getLottoNumbersFromInput() { - String lottoNumbers = InputView.inputLatestLottoResult(); + public boolean notContains(LottoNumber lottoNumber) { + return !this.lottoNumbers.contains(lottoNumber); + } - return LottoNumbersGenerator.generate(lottoNumbers); + public static List getLottoNumbersFromInput(String receivedLottoNumbers) { + return LottoNumbersGenerator.generate(receivedLottoNumbers); } private static List parseIntegerToLottoNumber(List generateNumbers) { diff --git a/src/main/java/lotto/domain/LottoPrize.java b/src/main/java/lotto/domain/LottoPrize.java index 95310d3f5..6c929f657 100644 --- a/src/main/java/lotto/domain/LottoPrize.java +++ b/src/main/java/lotto/domain/LottoPrize.java @@ -1,9 +1,14 @@ package lotto.domain; +import lotto.utils.StringUtil; + import java.util.Arrays; +import static lotto.constants.LottoGameMessage.STATISTICS_PER_NUMBER_OF_MATCH_BONUS_MATCHED; + public enum LottoPrize { WIN_WITH_FULL_MATCHES(6, 2_000_000_000), + WIN_WITH_5_MATCHES_AND_BONUS(5, 30_000_000), WIN_WITH_5_MATCHES(5, 1_500_000), WIN_WITH_4_MATCHES(4, 50_000), WIN_WITH_3_MATCHES(3, 5_000), @@ -25,10 +30,39 @@ public int getPrize() { return this.prize; } + private boolean isNormalPrize(LottoPrize lottoPrize) { + return !lottoPrize.equals(LottoPrize.WIN_WITH_5_MATCHES_AND_BONUS); + } + public static LottoPrize valueOf(int numberOfMatch) { return Arrays.stream(LottoPrize.values()) + .filter(prize -> prize.isNormalPrize(prize)) .filter(prize -> prize.getNumberOfMatch() == numberOfMatch) .findAny() .orElse(NONE); } + + public static LottoPrize valueOf(int numberOfMatch, boolean hasBonusBall) { + if (isSecondWinningRank(numberOfMatch, hasBonusBall)) { + return WIN_WITH_5_MATCHES_AND_BONUS; + } + + if (isThirdWinningRank(numberOfMatch, hasBonusBall)) { + return WIN_WITH_5_MATCHES; + } + + return valueOf(numberOfMatch); + } + + private static boolean isThirdWinningRank(int matchCount, boolean hasBonusBallNumber) { + return matchCount == WIN_WITH_5_MATCHES.getNumberOfMatch() && !hasBonusBallNumber; + } + + private static boolean isSecondWinningRank(int matchCount, boolean hasBonusBallNumber) { + return matchCount == WIN_WITH_5_MATCHES_AND_BONUS.getNumberOfMatch() && hasBonusBallNumber; + } + + public String additionalWinningStatistics() { + return this == WIN_WITH_5_MATCHES_AND_BONUS ? STATISTICS_PER_NUMBER_OF_MATCH_BONUS_MATCHED : StringUtil.EMPTY; + } } diff --git a/src/main/java/lotto/domain/LottoPrizes.java b/src/main/java/lotto/domain/LottoPrizes.java new file mode 100644 index 000000000..82775f8a4 --- /dev/null +++ b/src/main/java/lotto/domain/LottoPrizes.java @@ -0,0 +1,40 @@ +package lotto.domain; + +import java.util.List; +import java.util.Objects; + +public class LottoPrizes { + private final List lottoPrizes; + + public LottoPrizes(List lottoPrizes) { + this.lottoPrizes = lottoPrizes; + } + + public List getLottoPrizes() { + return this.lottoPrizes; + } + + public int size() { + return this.lottoPrizes.size(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + LottoPrizes that = (LottoPrizes) o; + return Objects.equals(lottoPrizes, that.lottoPrizes); + } + + @Override + public int hashCode() { + return Objects.hash(lottoPrizes); + } + + @Override + public String toString() { + return "LottoPrizes{" + + "lottoPrizes=" + lottoPrizes + + '}'; + } +} diff --git a/src/main/java/lotto/domain/LottoTicket.java b/src/main/java/lotto/domain/LottoTicket.java index 8e74b0e46..c85bd6ea4 100644 --- a/src/main/java/lotto/domain/LottoTicket.java +++ b/src/main/java/lotto/domain/LottoTicket.java @@ -1,6 +1,5 @@ package lotto.domain; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -39,12 +38,16 @@ public List getLottoNumbers() { return lottoNumbers; } - public LottoPrize match(LottoTicket lottoTicket) { + public boolean hasBonusBallNumber(LottoNumber bonusBallNumber) { + return this.lottoNumbers.contains(bonusBallNumber); + } + + public LottoPrize match(LottoTicket lastWinningLottoTicket, boolean hasBonusBallNumber) { int numberOfMatch = (int) lottoNumbers.stream() - .filter(number -> lottoTicket.getLottoNumbers().contains(number)) + .filter(number -> lastWinningLottoTicket.getLottoNumbers().contains(number)) .count(); - return LottoPrize.valueOf(numberOfMatch); + return LottoPrize.valueOf(numberOfMatch, hasBonusBallNumber); } @Override diff --git a/src/main/java/lotto/domain/LottoTickets.java b/src/main/java/lotto/domain/LottoTickets.java index f3fce0454..cd7f7b8b4 100644 --- a/src/main/java/lotto/domain/LottoTickets.java +++ b/src/main/java/lotto/domain/LottoTickets.java @@ -1,7 +1,6 @@ package lotto.domain; -import lotto.view.ResultView; - +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -11,7 +10,7 @@ public class LottoTickets { private final List lottoTickets; public LottoTickets(int count) { - this.lottoTickets = Collections.unmodifiableList(generateLottoTickets(count)); + this.lottoTickets = new ArrayList<>(generateLottoTickets(count)); } private List generateLottoTickets(int count) { @@ -24,15 +23,17 @@ public int size() { return lottoTickets.size(); } - public List matchResults(LottoTicket lottoTicket) { - return lottoTickets.stream() - .map(ticket -> ticket.match(lottoTicket)) - .collect(Collectors.toList()); + public LottoPrizes matchResults(LottoTicket lastWinningLottoTicket, LottoNumber bonusLottoNumber) { + return new LottoPrizes(lottoTickets.stream() + .map(ticket -> ticket.match(lastWinningLottoTicket, hasBonusBallNumber(ticket, bonusLottoNumber))) + .collect(Collectors.toList())); + } + + public boolean hasBonusBallNumber(LottoTicket generatedLottoTicket, LottoNumber bonusBallNumber) { + return generatedLottoTicket.hasBonusBallNumber(bonusBallNumber); } - public void printLottoTickets() { - for (LottoTicket lotto : lottoTickets) { - ResultView.printLottoTicket(lotto); - } + public List getLottoTickets() { + return Collections.unmodifiableList(lottoTickets); } } diff --git a/src/main/java/lotto/utils/StringUtil.java b/src/main/java/lotto/utils/StringUtil.java index d4f6a3573..0cc491557 100644 --- a/src/main/java/lotto/utils/StringUtil.java +++ b/src/main/java/lotto/utils/StringUtil.java @@ -3,6 +3,8 @@ public class StringUtil { private StringUtil() {} + public static final String EMPTY = ""; + public static boolean isNullOrEmpty(String string) { return string == null || string.length() == 0; } diff --git a/src/main/java/lotto/view/InputView.java b/src/main/java/lotto/view/InputView.java index 999255240..5b753e597 100644 --- a/src/main/java/lotto/view/InputView.java +++ b/src/main/java/lotto/view/InputView.java @@ -1,5 +1,10 @@ package lotto.view; +import lotto.domain.LottoNumber; +import lotto.domain.LottoNumbers; +import lotto.utils.StringParser; + +import static lotto.constants.LottoGameErrorMessage.INVALID_BONUS_LOTTO_NUMBER; import static lotto.constants.LottoGameMessage.*; import java.util.*; @@ -18,4 +23,19 @@ public static String inputLatestLottoResult() { System.out.println(WAIT_FOR_LATEST_LOTTO_RESULT_INPUT); return scanner.nextLine(); } + + public static LottoNumber inputBonusLottoNumber(LottoNumbers lastWinningLottoNumbers) { + System.out.println(WAIT_FOR_BONUS_LOTTO_NUMBER_INPUT); + LottoNumber receivedBonusLottoNumber = new LottoNumber(StringParser.parseAsInteger(scanner.nextLine())); + + if (!isValidBonusBall(lastWinningLottoNumbers, receivedBonusLottoNumber)) { + throw new IllegalArgumentException(INVALID_BONUS_LOTTO_NUMBER); + } + + return receivedBonusLottoNumber; + } + + private static boolean isValidBonusBall(LottoNumbers lastWinningLottoNumbers, LottoNumber bonusBall) { + return lastWinningLottoNumbers.notContains(bonusBall); + } } diff --git a/src/main/java/lotto/view/ResultView.java b/src/main/java/lotto/view/ResultView.java index 7037a7c35..42e3c175b 100644 --- a/src/main/java/lotto/view/ResultView.java +++ b/src/main/java/lotto/view/ResultView.java @@ -1,11 +1,6 @@ package lotto.view; -import lotto.domain.LottoPrize; -import lotto.domain.LottoTicket; -import lotto.domain.LottoTickets; -import lotto.domain.Money; - -import java.util.List; +import lotto.domain.*; import static lotto.constants.LottoGameConstant.PROFIT_CRITERIA; import static lotto.constants.LottoGameMessage.*; @@ -19,21 +14,22 @@ public static void printCount(int count) { } public static void printLottoTickets(LottoTickets lottoTickets) { - lottoTickets.printLottoTickets(); + lottoTickets.getLottoTickets().forEach(ResultView::printLottoTicket); System.out.println(); } - public static void printLottoTicket(LottoTicket lottoTicket) { + private static void printLottoTicket(LottoTicket lottoTicket) { System.out.println(lottoTicket.toString()); } - public static void printStatistics(List matchResults, Money money) { + public static void printStatistics(LottoPrizes lottoPrizes, Money money) { printStatisticsHeader(); - printMatchResult(matchResults, LottoPrize.WIN_WITH_3_MATCHES); - printMatchResult(matchResults, LottoPrize.WIN_WITH_4_MATCHES); - printMatchResult(matchResults, LottoPrize.WIN_WITH_5_MATCHES); - printMatchResult(matchResults, LottoPrize.WIN_WITH_FULL_MATCHES); - printProfitRate(matchResults, money); + printMatchResult(lottoPrizes, LottoPrize.WIN_WITH_3_MATCHES); + printMatchResult(lottoPrizes, LottoPrize.WIN_WITH_4_MATCHES); + printMatchResult(lottoPrizes, LottoPrize.WIN_WITH_5_MATCHES); + printMatchResult(lottoPrizes, LottoPrize.WIN_WITH_5_MATCHES_AND_BONUS); + printMatchResult(lottoPrizes, LottoPrize.WIN_WITH_FULL_MATCHES); + printProfitRate(lottoPrizes, money); } private static void printStatisticsHeader() { @@ -42,19 +38,19 @@ private static void printStatisticsHeader() { System.out.println(DIVIDER); } - private static void printMatchResult(List matchResults, LottoPrize rank) { - int count = calculateMatchCount(matchResults, rank); - String format = String.format(STATISTICS_PER_NUMBER_OF_MATCH, rank.getNumberOfMatch(), rank.getPrize(), count); + private static void printMatchResult(LottoPrizes lottoPrizes, LottoPrize rank) { + int count = calculateMatchCount(lottoPrizes, rank); + String format = String.format(STATISTICS_PER_NUMBER_OF_MATCH, rank.getNumberOfMatch(), rank.additionalWinningStatistics(), rank.getPrize(), count); System.out.println(format); } - private static int calculateMatchCount(List matchResults, LottoPrize rank) { - return (int) matchResults.stream() + private static int calculateMatchCount(LottoPrizes lottoPrizes, LottoPrize rank) { + return (int) lottoPrizes.getLottoPrizes().stream() .filter(result -> result.equals(rank)) .count(); } - private static void printProfitRate(List matchResults, Money money) { + private static void printProfitRate(LottoPrizes matchResults, Money money) { double profitRate = calculateProfitRate(matchResults, money); System.out.printf(TOTAL_PROFIT_RESULT, profitRate); if (profitRate < PROFIT_CRITERIA) { @@ -68,8 +64,8 @@ private static void printProfitRate(List matchResults, Money money) } } - private static double calculateProfitRate(List matchResults, Money money) { - int totalWinningPrize = matchResults.stream() + private static double calculateProfitRate(LottoPrizes lottoPrizes, Money money) { + int totalWinningPrize = lottoPrizes.getLottoPrizes().stream() .mapToInt(LottoPrize::getPrize).sum(); return (totalWinningPrize * 1.0) / (money.getMoney() * 1.0); diff --git a/src/test/java/lotto/domain/LottoPrizeTest.java b/src/test/java/lotto/domain/LottoPrizeTest.java new file mode 100644 index 000000000..76af09082 --- /dev/null +++ b/src/test/java/lotto/domain/LottoPrizeTest.java @@ -0,0 +1,45 @@ +package lotto.domain; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; + +class LottoPrizeTest { + @Test + @DisplayName("valueOf 메소드는 numberOfMatch에 맞는 LottoPrize Enum을 반환한다") + void value_of_with_number_of_match() { + assertAll( + () -> assertThat(LottoPrize.valueOf(0)).isEqualTo(LottoPrize.NONE), + () -> assertThat(LottoPrize.valueOf(1)).isEqualTo(LottoPrize.NONE), + () -> assertThat(LottoPrize.valueOf(2)).isEqualTo(LottoPrize.NONE), + () -> assertThat(LottoPrize.valueOf(3)).isEqualTo(LottoPrize.WIN_WITH_3_MATCHES), + () -> assertThat(LottoPrize.valueOf(4)).isEqualTo(LottoPrize.WIN_WITH_4_MATCHES), + () -> assertThat(LottoPrize.valueOf(5)).isEqualTo(LottoPrize.WIN_WITH_5_MATCHES), + () -> assertThat(LottoPrize.valueOf(6)).isEqualTo(LottoPrize.WIN_WITH_FULL_MATCHES) + ); + } + + @Test + @DisplayName("valueOf 메소드는 numberOfMatch와 맞는 보너스 볼을 가졌는지 여부에 따라 맞는 LottoPrize Enum을 반환한다.") + void value_of_with_number_of_match_and_has_bonus_ball() { + assertAll( + () -> assertThat(LottoPrize.valueOf(0, true)).isEqualTo(LottoPrize.NONE), + () -> assertThat(LottoPrize.valueOf(0, false)).isEqualTo(LottoPrize.NONE), + () -> assertThat(LottoPrize.valueOf(1, true)).isEqualTo(LottoPrize.NONE), + () -> assertThat(LottoPrize.valueOf(1, false)).isEqualTo(LottoPrize.NONE), + () -> assertThat(LottoPrize.valueOf(2, true)).isEqualTo(LottoPrize.NONE), + () -> assertThat(LottoPrize.valueOf(2, false)).isEqualTo(LottoPrize.NONE), + () -> assertThat(LottoPrize.valueOf(3, true)).isEqualTo(LottoPrize.WIN_WITH_3_MATCHES), + () -> assertThat(LottoPrize.valueOf(3, false)).isEqualTo(LottoPrize.WIN_WITH_3_MATCHES), + () -> assertThat(LottoPrize.valueOf(4, true)).isEqualTo(LottoPrize.WIN_WITH_4_MATCHES), + () -> assertThat(LottoPrize.valueOf(4, false)).isEqualTo(LottoPrize.WIN_WITH_4_MATCHES), + () -> assertThat(LottoPrize.valueOf(5, true)).isEqualTo(LottoPrize.WIN_WITH_5_MATCHES_AND_BONUS), + () -> assertThat(LottoPrize.valueOf(5, false)).isEqualTo(LottoPrize.WIN_WITH_5_MATCHES), + () -> assertThat(LottoPrize.valueOf(6, true)).isEqualTo(LottoPrize.WIN_WITH_FULL_MATCHES), + () -> assertThat(LottoPrize.valueOf(6, false)).isEqualTo(LottoPrize.WIN_WITH_FULL_MATCHES) + ); + } + +} diff --git a/src/test/java/lotto/domain/LottoPrizesTest.java b/src/test/java/lotto/domain/LottoPrizesTest.java new file mode 100644 index 000000000..3a332c345 --- /dev/null +++ b/src/test/java/lotto/domain/LottoPrizesTest.java @@ -0,0 +1,23 @@ +package lotto.domain; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class LottoPrizesTest { + @Test + @DisplayName("여러개의 LottoPrize을 생성한다") + void create_success() { + List lottoPrizeList = new ArrayList<>(); + lottoPrizeList.add(LottoPrize.WIN_WITH_3_MATCHES); + lottoPrizeList.add(LottoPrize.WIN_WITH_3_MATCHES); + + LottoPrizes lottoPrizes = new LottoPrizes(lottoPrizeList); + + assertThat(lottoPrizes.size()).isEqualTo(2); + } +} diff --git a/src/test/java/lotto/domain/LottoTicketsTest.java b/src/test/java/lotto/domain/LottoTicketsTest.java index 9e20a559f..401ebb62b 100644 --- a/src/test/java/lotto/domain/LottoTicketsTest.java +++ b/src/test/java/lotto/domain/LottoTicketsTest.java @@ -3,7 +3,11 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import java.util.ArrayList; +import java.util.List; + import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; class LottoTicketsTest { @Test @@ -12,4 +16,27 @@ void create_success() { LottoTickets lottoTickets = new LottoTickets(2); assertThat(lottoTickets.size()).isEqualTo(2); } + + @Test + @DisplayName("마지막 LottoTicket과 LottoNumber를 받고 현재의 LottoTickets를 돌면서 LottoPrize를 리턴한다") + void return_match_results() { + LottoTickets givenLottoTickets = new LottoTickets(3); + List lastWinningLottoNumbers = new ArrayList<>(); + lastWinningLottoNumbers.add(1); + lastWinningLottoNumbers.add(2); + lastWinningLottoNumbers.add(3); + lastWinningLottoNumbers.add(4); + lastWinningLottoNumbers.add(5); + lastWinningLottoNumbers.add(6); + + LottoPrizes lottoPrizes = givenLottoTickets.matchResults( + new LottoTicket(LottoNumbers.generateLottoNumbers(lastWinningLottoNumbers).getReadOnlyLottoNumbers()), + new LottoNumber(7) + ); + + assertAll( + () -> assertThat(lottoPrizes).isNotNull(), + () -> assertThat(lottoPrizes.getLottoPrizes()).hasSize(3) + ); + } }