Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions src/main/java/lotto/domain/LottoTickets.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package lotto.domain;

import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class LottoTickets {
private static final int MIN_LOTTO_COUNT = 1;

private final List<Lotto> lottos;

public LottoTickets(List<Lotto> lottos) {
if (Objects.isNull(lottos)) {
throw new IllegalArgumentException("[ERROR] 로또 목록이 없습니다.");
}

if (lottos.size() < MIN_LOTTO_COUNT) {
throw new IllegalArgumentException("[ERROR] 최소 1개 이상의 로또를 구매해야 합니다.");
}

this.lottos = lottos;
}

/**
* 구매한 로또의 개수를 반환합니다.
*/
public int getLottoCount() {
return lottos.size();
}

/**
* 모든 로또를 반환합니다.
*/
public List<Lotto> getLottos() {
return Collections.unmodifiableList(lottos);
}

// public LottoResult compareWithWinningLotto(WinningLotto winningLotto, int purchaseAmount) {
// // 모든 로또의 당첨 등수를 계산합니다.
// List<Rank> ranks = lottos.stream()
// .map(winningLotto::match)
// .collect(Collectors.toList());
//
// // LottoResult 객체를 생성하여 등수별 개수 및 수익률을 관리합니다.
// return new LottoResult(ranks, purchaseAmount);
// }
}
79 changes: 79 additions & 0 deletions src/test/java/lotto/domain/LottoTicketsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package lotto.domain;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.util.Collections;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;

class LottoTicketsTest {

private final Lotto lotto1 = new Lotto(List.of(1, 2, 3, 4, 5, 6));
private final Lotto lotto2 = new Lotto(List.of(7, 8, 9, 10, 11, 12));
private final List<Lotto> validLottoList = List.of(lotto1, lotto2);

@DisplayName("정상1: 여러 개의 로또를 관리하는 객체를 생성한다")
@Test
void test1() {
// When
LottoTickets lottoTickets = new LottoTickets(validLottoList);

// Then
assertThat(lottoTickets).isNotNull();
assertThat(lottoTickets.getLottoCount()).isEqualTo(2);
assertThat(lottoTickets.getLottos()).containsExactly(lotto1, lotto2);
}

@DisplayName("정상2: 구매한 로또 개수를 정확히 반환한다")
@Test
void test2() {
// When
LottoTickets lottoTickets = new LottoTickets(validLottoList);

// Then
assertThat(lottoTickets.getLottoCount()).isEqualTo(2);
}

// @DisplayName("정상3: 당첨 번호와 비교하여 각 로또의 등수를 판별하고 LottoResult를 반환한다")
// @Test
// void test3() {
// // Given
// // lotto1: 1, 2, 3, 4, 5, 6 (당첨 번호와 6개 일치 -> 1등)
// // lotto2: 7, 8, 9, 10, 11, 12 (당첨 번호와 0개 일치 -> 꽝)
// LottoTickets lottoTickets = new LottoTickets(validLottoList);
// WinningLotto winningLotto = new WinningLotto(lotto1, 7); // 1~6 당첨, 보너스 7
// int purchaseAmount = 2000;
//
// // When
// LottoResult result = lottoTickets.compareWithWinningLotto(winningLotto, purchaseAmount);
//
// // Then (LottoResult의 내부 구현에 따라 검증)
// // 1등 1개, 꽝 1개 예상
// assertThat(result.getPrizeCount(Rank.FIRST)).isEqualTo(1);
// assertThat(result.getPrizeCount(Rank.NONE)).isEqualTo(1);
//
// // 주의: LottoResult 클래스가 아직 구현되지 않았으므로,
// // 이 테스트는 LottoResult 구현 후 성공적으로 빌드될 수 있습니다.
// // 현재는 LottoResult 객체가 성공적으로 생성되는지만 확인합니다.
// assertThat(result).isInstanceOf(LottoResult.class);
// }

@DisplayName("예외1: 로또 리스트가 null이면 예외가 발생한다")
@Test
void test4() {
assertThatThrownBy(() -> new LottoTickets(null))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("[ERROR] 로또 목록이 없습니다.");
}

@DisplayName("예외2: 로또 리스트가 비어있으면 예외가 발생한다")
@Test
void test5() {
assertThatThrownBy(() -> new LottoTickets(Collections.emptyList()))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("[ERROR] 최소 1개 이상의 로또를 구매해야 합니다.");
}
}
4 changes: 2 additions & 2 deletions src/test/java/lotto/domain/WinningLottoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ void test1() {
// When
WinningLotto winningLotto = new WinningLotto(validWinningLottoNumbers, bonusNumber);

// Then (내부 필드에 대한 직접적인 getter는 없지만, 검증 로직 통과 여부로 확인)
// Then
assertThat(winningLotto).isNotNull();
}

Expand Down Expand Up @@ -108,7 +108,7 @@ void test7() {
@Test
void test8() {
// 당첨 번호: 1, 2, 3, 4, 5, 6
int bonusNumber = 6; // 중복
int bonusNumber = 6;
assertThatThrownBy(() -> new WinningLotto(validWinningLottoNumbers, bonusNumber))
.isInstanceOf(IllegalArgumentException.class)
.hasMessageContaining("[ERROR] 보너스 번호는 당첨 번호와 중복될 수 없습니다.");
Expand Down