diff --git a/__tests__/Lotto.test.js b/__tests__/Lotto.test.js
index e34f651a43..4b338cc726 100644
--- a/__tests__/Lotto.test.js
+++ b/__tests__/Lotto.test.js
@@ -10,7 +10,7 @@ describe('Lotto 클래스 입니다.', () => {
[7, 6, 5, 3, 2, 1],
[1, 2, 3, 5, 6, 7],
],
- ])('로또 배열을 정렬한다.', (numbers, expected) => {
+ ])('생성할 때 인자로 받은 로또 배열을 정렬한다.', (numbers, expected) => {
const lotto = new Lotto(numbers);
expect(lotto.getNumbers()).toEqual(expected);
});
diff --git a/__tests__/LottoMachine.test.js b/__tests__/LottoMachine.test.js
new file mode 100644
index 0000000000..a826a5e69d
--- /dev/null
+++ b/__tests__/LottoMachine.test.js
@@ -0,0 +1,15 @@
+import LottoMachine from '../src/domain/LottoMachine';
+
+describe('LottoMachine 클래스입니다.', () => {
+ const lottoMachine = new LottoMachine(1000);
+ test.each([
+ [1000, 1],
+ [2000, 2],
+ [3000, 3],
+ ])('금액을 받으면 구매해야 할 올바른 수량 반환한다.', (money, expected) => {
+ expect(lottoMachine.calcLottoAmount(money)).toEqual(expected);
+ });
+ test.each([1001, 10015, 34678])('잘못된 금액을 받으면 에러를 반환한다.', (money) => {
+ expect(() => lottoMachine.calcLottoAmount(money)).toThrow();
+ });
+});
diff --git a/__tests__/LottoRank.test.js b/__tests__/LottoRank.test.js
new file mode 100644
index 0000000000..9f48153402
--- /dev/null
+++ b/__tests__/LottoRank.test.js
@@ -0,0 +1,42 @@
+/* eslint-disable max-params */
+import LottoRank from '../src/domain/LottoRank';
+
+describe('LottoRank 객체입니다.', () => {
+ const winRankByMatchCount = (matchCount, hasBonus, expected) => {
+ expect(LottoRank.getWinRank(matchCount, hasBonus)).toEqual(expected);
+ };
+
+ test.each([
+ [0, true, LottoRank.PRIZE.MISS.RANK],
+ [0, false, LottoRank.PRIZE.MISS.RANK],
+ [1, true, LottoRank.PRIZE.MISS.RANK],
+ [1, false, LottoRank.PRIZE.MISS.RANK],
+ [2, true, LottoRank.PRIZE.MISS.RANK],
+ [2, false, LottoRank.PRIZE.MISS.RANK],
+ ])('로또등수가 낙첨인지 판단', winRankByMatchCount);
+
+ test.each([
+ [3, true, LottoRank.PRIZE.FIFTH.RANK],
+ [3, false, LottoRank.PRIZE.FIFTH.RANK],
+ ])('로또 등수가 5등인지 판단(3개 일치)', winRankByMatchCount);
+
+ test.each([
+ [4, true, LottoRank.PRIZE.FOURTH.RANK],
+ [4, false, LottoRank.PRIZE.FOURTH.RANK],
+ ])('로또 등수가 4등인지 판단(4개 일치)', winRankByMatchCount);
+
+ test.each([[5, false, LottoRank.PRIZE.THIRD.RANK]])(
+ '로또 등수가 3등인지 판단(5개 일치)',
+ winRankByMatchCount,
+ );
+
+ test.each([[5, true, LottoRank.PRIZE.SECOND.RANK]])(
+ '로또 등수가 2등인지 판단(5개 일치 + 보너스볼 일치)',
+ winRankByMatchCount,
+ );
+
+ test.each([[6, false, LottoRank.PRIZE.FIRST.RANK]])(
+ '로또 등수가 1등인지 판단(6개 일치)',
+ winRankByMatchCount,
+ );
+});
diff --git a/__tests__/validation.test.js b/__tests__/validation.test.js
index 6858b06cc4..b00073098c 100644
--- a/__tests__/validation.test.js
+++ b/__tests__/validation.test.js
@@ -1,18 +1,42 @@
-import { isPositiveInteger, isValidRestartCommand } from '../src/validation';
+import {
+ isPositiveInteger,
+ isValidRestartCommand,
+ isValidLottoNumber,
+ isDuplicateNumbers,
+} from '../src/validation';
describe('유효성 검증 테스트입니다.', () => {
- test.each([1.11, null, undefined, 'string', {}])(
- '양의 정수가 아니면 false를 반환한다.',
- (value) => {
- expect(isPositiveInteger(Number(value))).toBeFalsy();
- },
- );
+ test.each([1.11, -1, 2.3, 3.1])('양의 정수가 아니면 false를 반환한다.', (value) => {
+ expect(isPositiveInteger(Number(value))).toBeFalsy();
+ });
test.each(['y', 'n'])('재시작 입력에서 y와 n를 받으면 true를 반환한다.', (input) => {
expect(isValidRestartCommand(input)).toBeTruthy();
});
- test.each([1, '1'])('재시작 입력에서 y와 n인 아닌 입력을 받으면 false를 반환한다.', (input) => {
- expect(isValidRestartCommand(input)).toBeFalsy();
+ test.each(['df', 's', 'w', 'a', 'gg'])(
+ '재시작 입력에서 y와 n인 아닌 입력을 받으면 false를 반환한다.',
+ (input) => {
+ expect(isValidRestartCommand(input)).toBeFalsy();
+ },
+ );
+
+ test.each([1, 2, 3, 4, 34, 44, 45])('유효한 로또 숫자이면 true를 반환한다.', (number) => {
+ expect(isValidLottoNumber(number)).toBeTruthy();
+ });
+
+ test.each([-1, 0, 46, 47])('유효한 로또 숫자가 아니면 false를 반환한다.', (number) => {
+ expect(isValidLottoNumber(number)).toBeFalsy();
+ });
+
+ test.each([
+ [[2, 1, 2, 3, 4, 5]],
+ [[1, 1, 2, 3, 4, 5, 6]],
+ [[5, 6, 7, 8, 44, 44]],
+ [[1, 44, 45, 42, 43, 44]],
+ [[1, 13, 8, 16, 4, 12, 15, 16]],
+ [[10, 11, 12, 13, 14]],
+ ])('로또 번호가 중복되었는지와 길이(갯수)가 유효한지 검사한다.', (numbers) => {
+ expect(isDuplicateNumbers(numbers)).toBeTruthy();
});
});
diff --git a/index.html b/index.html
index e083bc1cbb..3f6b03a0d7 100644
--- a/index.html
+++ b/index.html
@@ -1,16 +1,89 @@
+
🎱 행운의 로또
- Document
-
-
🎱 행운의 로또
+
+
+
+
+ 🏆 당첨 통계 🏆
+
+
+
+ 일치 갯수 |
+ 당첨금 |
+ 당첨 갯수 |
+
+
+
+
+ 3개 |
+ 5,000 |
+
+
+ 4개 |
+ 50,000 |
+
+
+ 5개 |
+ 1,500,000 |
+
+
+ 5개 + 보너스 볼 |
+ 30,000,000 |
+
+
+ 6개 |
+ 2,000,000,000 |
+
+
+
+
+
+
-
+
+
+
+ 🎱 내 번호 당첨 확인 🎱
+
+
+
+
+
-
+
+
+