Skip to content

Commit 65d2a95

Browse files
committed
Add identity validation and tidy some things up.
1 parent 6ea8a17 commit 65d2a95

File tree

8 files changed

+36
-200
lines changed

8 files changed

+36
-200
lines changed

app/controllers/api/v3/public/validate_deck_controller.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ def index
3333
deck['validations'] << v
3434
end
3535

36-
Rails.logger.info 'Deck is %s' % deck.inspect
3736
v = DeckValidator.new(deck)
3837

3938
out[:attributes][:is_valid] = v.is_valid?

lib/deck_validator.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,6 @@ def all_ids_exist?
260260
@errors << '`identity_card_id` `%s` does not exist.' % @deck['identity_card_id']
261261
end
262262

263-
# TODO: basic deckbuilding should verify that none of the included cards are ids.
264-
265263
# side_id is valid
266264
if not ['corp', 'runner'].include?(@deck['side_id'])
267265
@errors << '`side_id` `%s` does not exist.' % @deck['side_id']
@@ -314,6 +312,13 @@ def check_basic_deckbuilding_rules
314312
end
315313
end
316314

315+
# Identity cards may not be included as cards in decks.
316+
@deck['cards'].each do |card_id, quantity|
317+
if ['corp_identity', 'runner_identity'].include?(@cards[card_id].card_type_id)
318+
local_errors << 'Decks may not include multiple identities. Identity card `%s` is not allowed.' % card_id
319+
end
320+
end
321+
317322
@identity = @cards[@deck['identity_card_id']]
318323

319324
# Check deck size minimums

lib/validation request.json

Lines changed: 0 additions & 63 deletions
This file was deleted.

lib/validation response.json

Lines changed: 0 additions & 79 deletions
This file was deleted.

test/fixtures/card_pools_cards.yml

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -38,58 +38,10 @@ standard_02_trieste_model_bioroids:
3838
card_id: trieste_model_bioroids
3939
card_pool_id: standard_02
4040

41-
#standard_02_ikawah_project:
42-
# card_id: ikawah_project
43-
# card_pool_id: standard_02
44-
#
45-
#standard_02_project_vitruvius:
46-
# card_id: project_vitruvius
47-
# card_pool_id: standard_02
48-
49-
# standard_02_regolith_mining_license:
50-
# card_id: regolith_mining_license
51-
# card_pool_id: standard_02
52-
53-
# standard_02_spin_doctor:
54-
# card_id: spin_doctor
55-
# card_pool_id: standard_02
56-
57-
# standard_02_biotic_labor:
58-
# card_id: biotic_labor
59-
# card_pool_id: standard_02
60-
6141
standard_02_punitive_counterstrike:
6242
card_id: punitive_counterstrike
6343
card_pool_id: standard_02
6444

65-
# standard_02_eli_1_0:
66-
# card_id: eli_1_0
67-
# card_pool_id: standard_02
68-
69-
# standard_02_hagen:
70-
# card_id: hagen
71-
# card_pool_id: standard_02
72-
73-
# standard_02_hakarl_1_0:
74-
# card_id: hakarl_1_0
75-
# card_pool_id: standard_02
76-
77-
# standard_02_enigma:
78-
# card_id: enigma
79-
# card_pool_id: standard_02
80-
81-
# standard_02_tollbooth:
82-
# card_id: tollbooth
83-
# card_pool_id: standard_02
84-
85-
# standard_02_ansel_1_0:
86-
# card_id: ansel_1_0
87-
# card_pool_id: standard_02
88-
89-
# standard_02_rototurret:
90-
# card_id: rototurret
91-
# card_pool_id: standard_02
92-
9345
standard_02_tyr:
9446
card_id: tyr
9547
card_pool_id: standard_02
@@ -166,8 +118,8 @@ eternal_01_ark_lockdown:
166118
card_id: ark_lockdown
167119
card_pool_id: eternal_01
168120

169-
eternal_01_geist:
170-
card_id: geist
121+
eternal_01_armand_geist_walker_tech_lord:
122+
card_id: armand_geist_walker_tech_lord
171123
card_pool_id: eternal_01
172124

173125
eternal_01_artificial_cryptocrash:

test/fixtures/cards.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ ark_lockdown:
148148
armand_geist_walker_tech_lord:
149149
card_type_id: "runner_identity"
150150
faction_id: criminal
151-
id: "geist"
151+
id: "armand_geist_walker_tech_lord"
152152
influence_limit: 15
153153
is_unique: false
154154
minimum_deck_size: 45

test/fixtures/restrictions_cards_restricted.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,3 @@ standard_restricted_trieste_model_bioroids:
99
card_id: trieste_model_bioroids
1010
created_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
1111
updated_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
12-

test/unit/deck_validator_test.rb

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def setup
3232
]
3333
}
3434
@imaginary_side = {
35-
'identity_card_id' => 'geist',
35+
'identity_card_id' => 'armand_geist_walker_tech_lord',
3636
'side_id' => 'super_mega_corp',
3737
'cards' => { 'hedge_fund' => 3 },
3838
'validations' => [
@@ -54,7 +54,7 @@ def setup
5454
]
5555
}
5656
@wrong_side_geist = {
57-
'identity_card_id' => 'geist',
57+
'identity_card_id' => 'armand_geist_walker_tech_lord',
5858
'side_id' => 'corp',
5959
'cards' => { 'hedge_fund' => 3 },
6060
'validations' => [
@@ -478,6 +478,29 @@ def test_is_valid_is_idempotent
478478
end
479479
end
480480

481+
def test_corp_identities_are_not_valid_cards_for_basic_deckbuilding
482+
deck = swap_card(@good_ampere.deep_dup, 'ark_lockdown', 'asa_group_security_through_vigilance')
483+
484+
v = DeckValidator.new(deck)
485+
assert !v.is_valid?
486+
assert_equal 0, v.errors.size
487+
assert_equal v.validations.size, deck['validations'].size
488+
assert !v.validations[0].is_valid?
489+
assert_includes v.validations[0].errors, 'Decks may not include multiple identities. Identity card `asa_group_security_through_vigilance` is not allowed.'
490+
end
491+
492+
def test_runner_identities_are_not_valid_cards_for_basic_deckbuilding
493+
deck = @good_nova.deep_dup
494+
deck['cards']['armand_geist_walker_tech_lord'] = 3
495+
496+
v = DeckValidator.new(deck)
497+
assert !v.is_valid?
498+
assert_equal 0, v.errors.size
499+
assert_equal v.validations.size, deck['validations'].size
500+
assert !v.validations[0].is_valid?
501+
assert_includes v.validations[0].errors, 'Decks may not include multiple identities. Identity card `armand_geist_walker_tech_lord` is not allowed.'
502+
end
503+
481504
def test_too_much_program_influence_professor
482505
v = DeckValidator.new(@too_much_program_influence_professor)
483506
assert !v.is_valid?
@@ -566,7 +589,7 @@ def test_mismatched_side_runner_id
566589
assert !v.is_valid?
567590
assert_equal v.validations.size, @wrong_side_geist['validations'].size
568591
assert !v.validations[0].is_valid?, 'Deck with mismatched id and specified side fails'
569-
assert_includes v.validations[0].errors, "Identity `geist` has side `runner` which does not match given side `corp`"
592+
assert_includes v.validations[0].errors, "Identity `armand_geist_walker_tech_lord` has side `runner` which does not match given side `corp`"
570593
end
571594

572595
def test_not_enough_agenda_points

0 commit comments

Comments
 (0)