Skip to content

Commit 8c20651

Browse files
committed
Add tests for global penalty and universal influence.
1 parent 35b98b7 commit 8c20651

7 files changed

+131
-5
lines changed

lib/deck_validator.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,8 @@ def is_valid?
156156
if global_penalty > 0 and !@identity.influence_limit.nil?
157157
influence_limit = [(@identity.influence_limit - global_penalty), 1].max
158158
if @basic_influence_spent > influence_limit
159-
v.add_error('Influence limit for %s is %d after Global Penalty applied from restriction `%s`, but deck has spent %d influence from %s.' % [@identity.title, influence_limit, v.restriction_id, @basic_influence_spent, cards_with_global_penalty.join(', ')])
160-
@validation_errors = true
159+
v.add_error('Influence limit for %s is %d after Global Penalty applied from restriction `%s`, but deck has spent %d influence from %s.' % [@identity.title, influence_limit, v.restriction_id, global_penalty, cards_with_global_penalty.join(', ')])
160+
@validation_errors = true
161161
end
162162
end
163163
end

test/fixtures/card_pools_cards.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,62 @@ 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+
61+
standard_02_punitive_counterstrike:
62+
card_id: punitive_counterstrike
63+
card_pool_id: standard_02
64+
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+
93+
standard_02_tyr:
94+
card_id: tyr
95+
card_pool_id: standard_02
96+
4197
startup_01_prisec:
4298
card_id: prisec
4399
card_pool_id: startup_01

test/fixtures/restrictions.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,18 @@ standard_restricted:
2222
created_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
2323
updated_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
2424

25+
standard_global_penalty:
26+
id: standard_global_penalty
27+
name: "Standard Global Penalty"
28+
format_id: "standard"
29+
date_start: 2023-08-26
30+
created_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
31+
updated_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
32+
33+
standard_universal_faction_cost:
34+
id: standard_universal_faction_cost
35+
name: "Standard Universal Faction Cost"
36+
format_id: "standard"
37+
date_start: 2023-08-26
38+
created_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
39+
updated_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
tyr_global_penalty:
2+
restriction_id: standard_global_penalty
3+
card_id: tyr
4+
created_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
5+
updated_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
punitive_counterstrike_points:
2+
restriction_id: standard_universal_faction_cost
3+
card_id: punitive_counterstrike
4+
value: 3
5+
created_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
6+
updated_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>

test/fixtures/snapshots.yml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,31 @@ standard_03:
2222
format_id: standard
2323
card_pool_id: standard_02
2424
date_start: 2022-09-06
25-
active: true
25+
active: false
2626
restriction_id: standard_restricted
2727
created_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
2828
updated_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
2929

30+
standard_04:
31+
id: standard_04
32+
format_id: standard
33+
card_pool_id: standard_02
34+
date_start: 2022-09-06
35+
active: false
36+
restriction_id: standard_global_penalty
37+
created_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
38+
updated_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
39+
40+
standard_05:
41+
id: standard_05
42+
format_id: standard
43+
card_pool_id: standard_02
44+
date_start: 2022-09-06
45+
active: false
46+
restriction_id: standard_universal_faction_cost
47+
created_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
48+
updated_at: <%= Time.utc(2022, 12, 8, 12, 0).to_fs(:db) %>
49+
3050
startup_01:
3151
id: startup_01
3252
format_id: startup

test/unit/deck_validator_test.rb

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -698,12 +698,10 @@ def test_cards_not_in_specified_card_pool
698698
'hakarl_1_0',
699699
'ikawah_project',
700700
'project_vitruvius',
701-
'punitive_counterstrike',
702701
'regolith_mining_license',
703702
'rototurret',
704703
'spin_doctor',
705704
'tollbooth',
706-
'tyr'
707705
].each do |c|
708706
assert_includes v.validations[0].errors, "Card `%s` is not present in Card Pool `standard_02`." % c
709707
end
@@ -735,6 +733,32 @@ def test_too_many_restricted_cards
735733
assert_includes v.validations[0].errors, 'Deck has too many cards marked restricted in restriction `standard_restricted`: send_a_message, trieste_model_bioroids.'
736734
end
737735

736+
def test_global_penalty_reduces_influence
737+
deck = @good_asa_group.deep_dup
738+
deck['validations'][0]['restriction_id'] = 'standard_global_penalty'
739+
deck['validations'][0].delete('format_id')
740+
deck['validations'][0].delete('card_pool_id')
741+
deck['validations'][0].delete('snapshot_id')
742+
743+
v = DeckValidator.new(deck)
744+
assert !v.is_valid?
745+
assert_equal v.validations.size, deck['validations'].size
746+
assert_includes v.validations[0].errors, 'Influence limit for Asa Group: Security Through Vigilance is 13 after Global Penalty applied from restriction `standard_global_penalty`, but deck has spent 2 influence from tyr (2).'
747+
end
748+
749+
def test_universal_influence
750+
deck = @good_asa_group.deep_dup
751+
deck['validations'][0]['restriction_id'] = 'standard_universal_faction_cost'
752+
deck['validations'][0].delete('format_id')
753+
deck['validations'][0].delete('card_pool_id')
754+
deck['validations'][0].delete('snapshot_id')
755+
756+
v = DeckValidator.new(deck)
757+
assert !v.is_valid?
758+
assert_equal v.validations.size, deck['validations'].size
759+
assert_includes v.validations[0].errors, 'Influence limit for Asa Group: Security Through Vigilance is 15, but after Universal Influence applied from restriction `standard_universal_faction_cost`, deck has spent 24 influence from punitive_counterstrike (9).'
760+
end
761+
738762
def test_over_eternal_points_limit
739763
deck = @good_asa_group.deep_dup
740764
deck['validations'][0]['snapshot_id'] = 'eternal_01'

0 commit comments

Comments
 (0)