console-blackjack 1.0.7 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,7 @@
2
2
 
3
3
  FactoryBot.define do
4
4
  factory :shoe do
5
+ blackjack { nil }
5
6
  num_decks { 1 }
6
7
  cards { [] }
7
8
 
@@ -9,6 +10,6 @@ FactoryBot.define do
9
10
  after(:build, &:new_regular)
10
11
  end
11
12
 
12
- initialize_with { new(num_decks) }
13
+ initialize_with { new(blackjack, num_decks) }
13
14
  end
14
15
  end
@@ -1,8 +1,8 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  RSpec.describe Card do
5
- let(:card) { build(:card) }
4
+ let(:blackjack) { build(:blackjack) }
5
+ let(:card) { build(:card, blackjack: blackjack) }
6
6
 
7
7
  describe '.new' do
8
8
  it 'creates a card' do
@@ -19,8 +19,20 @@ RSpec.describe Card do
19
19
  end
20
20
 
21
21
  describe '#to_s' do
22
- it 'returns a string value' do
23
- expect(card.to_s).to eq('🂡')
22
+ context 'with regular faces' do
23
+ it 'returns a string value' do
24
+ expect(card.to_s).to eq('🂡')
25
+ end
26
+ end
27
+
28
+ context 'with alternate faces' do
29
+ before do
30
+ blackjack.face_type = 2
31
+ end
32
+
33
+ it 'returns a string value' do
34
+ expect(card.to_s).to eq('A♠')
35
+ end
24
36
  end
25
37
  end
26
38
 
@@ -4,13 +4,8 @@ RSpec.describe DealerHand do
4
4
  let(:shoe) { build(:shoe, :new_regular) }
5
5
  let(:blackjack) { build(:blackjack) }
6
6
  let(:dealer_hand) { build(:dealer_hand, blackjack: blackjack) }
7
- let(:ace) { build(:card, :ace) }
8
- let(:five) { build(:card, :five) }
9
- let(:six) { build(:card, :six) }
10
- let(:seven) { build(:card, :seven) }
11
- let(:eight) { build(:card, :eight) }
12
- let(:nine) { build(:card, :nine) }
13
- let(:ten) { build(:card, :ten) }
7
+ let(:ace) { build(:card, :ace, blackjack: blackjack) }
8
+ let(:ten) { build(:card, :ten, blackjack: blackjack) }
14
9
 
15
10
  describe '.new' do
16
11
  it 'creates a dealer_hand' do
@@ -79,19 +74,19 @@ RSpec.describe DealerHand do
79
74
  end
80
75
 
81
76
  describe '#draw' do
82
- it 'returns " 🂪 🂠 10"' do
77
+ it 'returns " 🂪 🂠 10"' do
83
78
  dealer_hand.cards << ten << ace
84
79
  expected = ' 🂪 🂠 ⇒ 10'
85
80
  expect(dealer_hand.draw).to eq(expected)
86
81
  end
87
82
 
88
- it 'returns " 🂡 🂠 11"' do
83
+ it 'returns " 🂡 🂠 11"' do
89
84
  dealer_hand.cards << ace << ten
90
85
  expected = ' 🂡 🂠 ⇒ 11'
91
86
  expect(dealer_hand.draw).to eq(expected)
92
87
  end
93
88
 
94
- it 'returns " 🂡 🂪 21"' do
89
+ it 'returns " 🂡 🂪 21"' do
95
90
  dealer_hand.cards << ace << ten
96
91
  dealer_hand.hide_down_card = false
97
92
  expected = ' 🂡 🂪 ⇒ 21'
@@ -132,15 +127,13 @@ RSpec.describe DealerHand do
132
127
  end
133
128
 
134
129
  describe '#deal_required_cards' do
135
- let(:shoe) { build(:shoe, :new_regular) }
136
-
137
130
  before do
138
- blackjack.shoe = shoe
131
+ blackjack.shoe = build(:shoe, :new_regular)
139
132
  end
140
133
 
141
134
  context 'when soft is < 18' do
142
135
  it 'deals cards' do
143
- dealer_hand.cards << ace << seven
136
+ dealer_hand.cards << ace << build(:card, :seven)
144
137
  dealer_hand.deal_required_cards
145
138
  expect(dealer_hand.cards.size >= 3).to be_truthy
146
139
  end
@@ -148,7 +141,7 @@ RSpec.describe DealerHand do
148
141
 
149
142
  context 'when hard is < 17' do
150
143
  it 'deals cards' do
151
- dealer_hand.cards << ace << ten << five
144
+ dealer_hand.cards << ace << ten << build(:card, :five)
152
145
  dealer_hand.deal_required_cards
153
146
  expect(dealer_hand.cards.size >= 4).to be_truthy
154
147
  end
@@ -1,16 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe PlayerHand do
4
- let(:shoe) { build(:shoe, :new_regular) }
5
- let(:blackjack) { build(:blackjack, shoe: shoe) }
4
+ let(:blackjack) { build(:blackjack, shoe: build(:shoe, :new_regular)) }
6
5
  let(:player_hand) { build(:player_hand, blackjack: blackjack) }
7
6
  let(:dealer_hand) { build(:dealer_hand, blackjack: blackjack) }
8
- let(:ace) { build(:card, :ace) }
9
- let(:six) { build(:card, :six) }
10
- let(:seven) { build(:card, :seven) }
11
- let(:eight) { build(:card, :eight) }
12
- let(:nine) { build(:card, :nine) }
13
- let(:ten) { build(:card, :ten) }
7
+ let(:ace) { build(:card, :ace, blackjack: blackjack) }
8
+ let(:ten) { build(:card, :ten, blackjack: blackjack) }
14
9
 
15
10
  describe '.new' do
16
11
  it 'creates a player_hand' do
@@ -126,7 +121,7 @@ RSpec.describe PlayerHand do
126
121
 
127
122
  context 'when soft count of 21' do
128
123
  it 'returns true' do
129
- player_hand.cards << ace << ace << nine
124
+ player_hand.cards << ace << ace << build(:card, :nine)
130
125
  expect(player_hand).to be_done
131
126
  end
132
127
  end
@@ -140,7 +135,7 @@ RSpec.describe PlayerHand do
140
135
 
141
136
  context 'when pair of sevens' do
142
137
  it 'returns false' do
143
- player_hand.cards << seven << seven
138
+ player_hand.cards << build(:card, :seven) << build(:card, :seven)
144
139
  expect(player_hand).to_not be_done
145
140
  end
146
141
  end
@@ -163,7 +158,7 @@ RSpec.describe PlayerHand do
163
158
 
164
159
  context 'when not enough money' do
165
160
  it 'returns false' do
166
- blackjack.money = 9999
161
+ blackjack.money = 499
167
162
  expect(player_hand).to_not be_can_split
168
163
  end
169
164
  end
@@ -177,14 +172,14 @@ RSpec.describe PlayerHand do
177
172
 
178
173
  context 'when card values do not match' do
179
174
  it 'returns false' do
180
- player_hand.cards << seven << nine
175
+ player_hand.cards << build(:card, :seven) << build(:card, :nine)
181
176
  expect(player_hand).to_not be_can_split
182
177
  end
183
178
  end
184
179
 
185
180
  context 'when card values match' do
186
181
  it 'returns true' do
187
- player_hand.cards << seven << seven
182
+ player_hand.cards << build(:card, :seven) << build(:card, :seven)
188
183
  expect(player_hand).to be_can_split
189
184
  end
190
185
  end
@@ -193,7 +188,7 @@ RSpec.describe PlayerHand do
193
188
  describe '#can_dbl?' do
194
189
  context 'when not enough money' do
195
190
  it 'returns false' do
196
- blackjack.money = 9999
191
+ blackjack.money = 499
197
192
  expect(player_hand).to_not be_can_dbl
198
193
  end
199
194
  end
@@ -221,7 +216,7 @@ RSpec.describe PlayerHand do
221
216
 
222
217
  context 'when a pair of sixes' do
223
218
  it 'returns true' do
224
- player_hand.cards << six << six
219
+ player_hand.cards << build(:card, :six) << build(:card, :six)
225
220
  expect(player_hand).to be_can_dbl
226
221
  end
227
222
  end
@@ -244,14 +239,14 @@ RSpec.describe PlayerHand do
244
239
 
245
240
  context 'when busted' do
246
241
  it 'returns false' do
247
- player_hand.cards << eight << eight << eight
242
+ player_hand.cards << build(:card, :eight) << build(:card, :eight) << build(:card, :eight)
248
243
  expect(player_hand).to_not be_can_stand
249
244
  end
250
245
  end
251
246
 
252
247
  context 'when a pair of sixes' do
253
248
  it 'returns true' do
254
- player_hand.cards << six << six
249
+ player_hand.cards << build(:card, :six) << build(:card, :six)
255
250
  expect(player_hand).to be_can_stand
256
251
  end
257
252
  end
@@ -281,21 +276,21 @@ RSpec.describe PlayerHand do
281
276
 
282
277
  context 'when busted' do
283
278
  it 'returns false' do
284
- player_hand.cards << eight << eight << eight
279
+ player_hand.cards << build(:card, :eight) << build(:card, :eight) << build(:card, :eight)
285
280
  expect(player_hand).to_not be_can_hit
286
281
  end
287
282
  end
288
283
 
289
284
  context 'when a hard 21' do
290
285
  it 'returns false' do
291
- player_hand.cards << seven << seven << seven
286
+ player_hand.cards << build(:card, :seven) << build(:card, :seven) << build(:card, :seven)
292
287
  expect(player_hand).to_not be_can_hit
293
288
  end
294
289
  end
295
290
 
296
291
  context 'when a pair of sixes' do
297
292
  it 'returns true' do
298
- player_hand.cards << six << six
293
+ player_hand.cards << build(:card, :six) << build(:card, :six)
299
294
  expect(player_hand).to be_can_hit
300
295
  end
301
296
  end
@@ -494,6 +489,66 @@ RSpec.describe PlayerHand do
494
489
  end
495
490
  end
496
491
 
492
+ describe '#draw_actions' do
493
+ it 'can hit and stand' do
494
+ expect do
495
+ player_hand.draw_actions
496
+ end.to output(" (H) Hit (S) Stand\n").to_stdout
497
+ end
498
+
499
+ it 'cannot hit' do
500
+ allow(player_hand).to receive(:can_hit?).and_return(false)
501
+ expect do
502
+ player_hand.draw_actions
503
+ end.to output(" (S) Stand\n").to_stdout
504
+ end
505
+
506
+ it 'cannot stand' do
507
+ allow(player_hand).to receive(:can_stand?).and_return(false)
508
+ expect do
509
+ player_hand.draw_actions
510
+ end.to output(" (H) Hit\n").to_stdout
511
+ end
512
+
513
+ it 'can split' do
514
+ allow(player_hand).to receive(:can_split?).and_return(true)
515
+ expect do
516
+ player_hand.draw_actions
517
+ end.to output(" (H) Hit (S) Stand (P) Split\n").to_stdout
518
+ end
519
+
520
+ it 'can double' do
521
+ allow(player_hand).to receive(:can_dbl?).and_return(true)
522
+ expect do
523
+ player_hand.draw_actions
524
+ end.to output(" (H) Hit (S) Stand (D) Double\n").to_stdout
525
+ end
526
+ end
527
+
528
+ describe '#draw_lost_str' do
529
+ it 'returns Busted!' do
530
+ allow(player_hand).to receive(:busted?).and_return(true)
531
+ expect(player_hand.draw_lost_str).to eq('Busted!')
532
+ end
533
+
534
+ it 'returns Lose!' do
535
+ allow(player_hand).to receive(:busted?).and_return(false)
536
+ expect(player_hand.draw_lost_str).to eq('Lose!')
537
+ end
538
+ end
539
+
540
+ describe '#draw_won_str' do
541
+ it 'returns Blackjack!' do
542
+ allow(player_hand).to receive(:blackjack?).and_return(true)
543
+ expect(player_hand.draw_won_str).to eq('Blackjack!')
544
+ end
545
+
546
+ it 'returns Won!' do
547
+ allow(player_hand).to receive(:blackjack?).and_return(false)
548
+ expect(player_hand.draw_won_str).to eq('Won!')
549
+ end
550
+ end
551
+
497
552
  describe '#pay' do
498
553
  it 'returns if already payed' do
499
554
  player_hand.payed = true
@@ -535,25 +590,25 @@ RSpec.describe PlayerHand do
535
590
  end
536
591
 
537
592
  it 'hand is lost' do
538
- player_hand.cards << ten << seven
593
+ player_hand.cards << ten << build(:card, :seven)
539
594
  player_hand.pay(18, false)
540
595
  expect(player_hand.status).to eq(LOST)
541
596
  end
542
597
 
543
598
  it 'blackjack money is descreased by player hand bet' do
544
- player_hand.cards << ten << seven
599
+ player_hand.cards << ten << build(:card, :seven)
545
600
  player_hand.pay(18, false)
546
601
  expect(blackjack.money).to eq(9500)
547
602
  end
548
603
 
549
604
  it 'hand is push' do
550
- player_hand.cards << ten << seven
605
+ player_hand.cards << ten << build(:card, :seven)
551
606
  player_hand.pay(17, false)
552
607
  expect(player_hand.status).to eq(PUSH)
553
608
  end
554
609
 
555
610
  it 'blackjack money is unaltered' do
556
- player_hand.cards << ten << seven
611
+ player_hand.cards << ten << build(:card, :seven)
557
612
  player_hand.pay(17, false)
558
613
  expect(blackjack.money).to eq(10_000)
559
614
  end
@@ -1,7 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe Shoe do
4
- let(:shoe) { build(:shoe) }
4
+ let(:blackjack) { build(:blackjack) }
5
+ let(:shoe) { build(:shoe, blackjack: blackjack) }
6
+
7
+ describe 'CARDS_PER_DECK' do
8
+ it 'returns 52' do
9
+ expect(described_class::CARDS_PER_DECK).to eq(52)
10
+ end
11
+ end
5
12
 
6
13
  describe '.new' do
7
14
  it 'creates a shoe' do
@@ -21,7 +28,7 @@ RSpec.describe Shoe do
21
28
  end
22
29
 
23
30
  context 'with a new regular shoe' do
24
- let(:shoe) { build(:shoe, :new_regular) }
31
+ let(:shoe) { build(:shoe, :new_regular, blackjack: blackjack) }
25
32
 
26
33
  it 'returns false' do
27
34
  expect(shoe).to_not be_needs_to_shuffle
@@ -29,7 +36,7 @@ RSpec.describe Shoe do
29
36
  end
30
37
 
31
38
  context 'with 42 cards being dealt' do
32
- let(:shoe) { build(:shoe, :new_regular) }
39
+ let(:shoe) { build(:shoe, :new_regular, blackjack: blackjack) }
33
40
 
34
41
  before do
35
42
  42.times { shoe.next_card }
@@ -42,7 +49,7 @@ RSpec.describe Shoe do
42
49
  end
43
50
 
44
51
  describe '#shuffle' do
45
- let(:shoe) { build(:shoe) }
52
+ let(:shoe) { build(:shoe, blackjack: blackjack) }
46
53
 
47
54
  it 'calls shuffle' do
48
55
  cards = instance_double(Array)
@@ -54,11 +61,11 @@ RSpec.describe Shoe do
54
61
  end
55
62
 
56
63
  describe '#new_regular' do
57
- let(:shoe) { build(:shoe) }
64
+ let(:shoe) { build(:shoe, blackjack: blackjack) }
58
65
 
59
66
  it 'creates a shoe' do
60
67
  shoe.new_regular
61
- expect(shoe.cards.size).to eq(52)
68
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
62
69
  end
63
70
 
64
71
  it 'calls shuffle' do
@@ -69,11 +76,11 @@ RSpec.describe Shoe do
69
76
  end
70
77
 
71
78
  describe '#new_aces' do
72
- let(:shoe) { build(:shoe) }
79
+ let(:shoe) { build(:shoe, blackjack: blackjack) }
73
80
 
74
81
  it 'creates a shoe' do
75
82
  shoe.new_aces
76
- expect(shoe.cards.size).to eq(40)
83
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
77
84
  end
78
85
 
79
86
  it 'calls shuffle' do
@@ -84,11 +91,11 @@ RSpec.describe Shoe do
84
91
  end
85
92
 
86
93
  describe '#new_jacks' do
87
- let(:shoe) { build(:shoe) }
94
+ let(:shoe) { build(:shoe, blackjack: blackjack) }
88
95
 
89
96
  it 'creates a shoe' do
90
97
  shoe.new_jacks
91
- expect(shoe.cards.size).to eq(40)
98
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
92
99
  end
93
100
 
94
101
  it 'calls shuffle' do
@@ -99,11 +106,11 @@ RSpec.describe Shoe do
99
106
  end
100
107
 
101
108
  describe '#new_aces_jacks' do
102
- let(:shoe) { build(:shoe) }
109
+ let(:shoe) { build(:shoe, blackjack: blackjack) }
103
110
 
104
111
  it 'creates a shoe' do
105
112
  shoe.new_aces_jacks
106
- expect(shoe.cards.size).to eq(80)
113
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
107
114
  end
108
115
 
109
116
  it 'calls shuffle' do
@@ -114,11 +121,11 @@ RSpec.describe Shoe do
114
121
  end
115
122
 
116
123
  describe '#new_sevens' do
117
- let(:shoe) { build(:shoe) }
124
+ let(:shoe) { build(:shoe, blackjack: blackjack) }
118
125
 
119
126
  it 'creates a shoe' do
120
127
  shoe.new_sevens
121
- expect(shoe.cards.size).to eq(40)
128
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
122
129
  end
123
130
 
124
131
  it 'calls shuffle' do
@@ -129,11 +136,11 @@ RSpec.describe Shoe do
129
136
  end
130
137
 
131
138
  describe '#new_eights' do
132
- let(:shoe) { build(:shoe) }
139
+ let(:shoe) { build(:shoe, blackjack: blackjack) }
133
140
 
134
141
  it 'creates a shoe' do
135
142
  shoe.new_eights
136
- expect(shoe.cards.size).to eq(40)
143
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
137
144
  end
138
145
 
139
146
  it 'calls shuffle' do
@@ -144,7 +151,7 @@ RSpec.describe Shoe do
144
151
  end
145
152
 
146
153
  describe '#next_card' do
147
- let(:shoe) { build(:shoe, :new_regular) }
154
+ let(:shoe) { build(:shoe, :new_regular, blackjack: blackjack) }
148
155
 
149
156
  it 'removes the next card' do
150
157
  shoe.next_card