-
Notifications
You must be signed in to change notification settings - Fork 1
/
gilded_rose_test.rb
190 lines (150 loc) · 5.98 KB
/
gilded_rose_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# This simplest thing is to clone Jim's repo (https://github.com/jimweirich/gilded_rose_kata) and then
# put this file in the root directory.
require "minitest/autorun"
require "minitest/reporters"
Minitest::Reporters.use! [Minitest::Reporters::DefaultReporter.new(:color => true)]
require_relative './gilded_rose'
class GildedRoseTest < MiniTest::Unit::TestCase
def update_quality_for_item_with(sell_in,
quality,
name = 'normal item',
sell_in_decrease = 1)
item = Item.new(name, sell_in, quality)
update_quality([item])
assert_equal item.sell_in, sell_in - sell_in_decrease
item
end
def test_normal_item_before_sell_date
item = update_quality_for_item_with(5, 10, 'normal')
assert_equal 9, item.quality
end
def test_normal_item_on_sell_date
item = update_quality_for_item_with(0, 10, 'normal')
assert_equal 8, item.quality
end
def test_normal_item_after_sell_date
item = update_quality_for_item_with(-10, 10, 'normal')
assert_equal 8, item.quality
end
def test_normal_item_of_zero_quality
item = update_quality_for_item_with(5, 0, 'normal')
assert_equal 0, item.quality
end
def test_brie_before_sell_date
item = update_quality_for_item_with(5, 10, 'Aged Brie')
assert_equal 11, item.quality
end
def test_brie_before_sell_date_with_max_quality
item = update_quality_for_item_with(5, 50, 'Aged Brie')
assert_equal 50, item.quality
end
def test_brie_on_sell_date
item = update_quality_for_item_with(0, 10, 'Aged Brie')
assert_equal 12, item.quality
end
def test_brie_on_sell_date_near_max_quality
item = update_quality_for_item_with(5, 49, 'Aged Brie')
assert_equal 50, item.quality
end
def test_brie_on_sell_date_with_max_quality
item = update_quality_for_item_with(5, 50, 'Aged Brie')
assert_equal 50, item.quality
end
def test_brie_after_sell_date
item = update_quality_for_item_with(-10, 10, 'Aged Brie')
assert_equal 12, item.quality
end
def test_brie_after_sell_date_with_max_quality
item = update_quality_for_item_with(-10, 50, 'Aged Brie')
assert_equal 50, item.quality
end
def test_sulfuras_before_sell_date
item = update_quality_for_item_with(5, 80, 'Sulfuras, Hand of Ragnaros', 0)
assert_equal 80, item.quality
end
def test_sulfuras_on_sell_date
item = update_quality_for_item_with(0, 80, 'Sulfuras, Hand of Ragnaros', 0)
assert_equal 80, item.quality
end
def test_sulfuras_after_sell_date
item = update_quality_for_item_with(-10, 80, 'Sulfuras, Hand of Ragnaros', 0)
assert_equal 80, item.quality
end
def test_backstage_pass_long_before_sell_date
item = update_quality_for_item_with(11, 10, 'Backstage passes to a TAFKAL80ETC concert')
assert_equal 11, item.quality
end
def test_backstage_pass_medium_close_to_sell_date_upper_bound
item = update_quality_for_item_with(10, 10, 'Backstage passes to a TAFKAL80ETC concert')
assert_equal 12, item.quality
end
def test_backstage_pass_medium_close_to_sell_date_upper_bound_at_max_quality
item = update_quality_for_item_with(10, 50, 'Backstage passes to a TAFKAL80ETC concert')
assert_equal 50, item.quality
end
def test_backstage_pass_medium_close_to_sell_date_lower_bound
item = update_quality_for_item_with(6, 10, 'Backstage passes to a TAFKAL80ETC concert')
assert_equal 12, item.quality
end
def test_backstage_pass_medium_close_to_sell_date_lower_bound_at_max_quality
item = update_quality_for_item_with(6, 50, 'Backstage passes to a TAFKAL80ETC concert')
assert_equal 50, item.quality
end
def test_backstage_pass_very_close_to_sell_date_upper_bound
item = update_quality_for_item_with(5, 10, 'Backstage passes to a TAFKAL80ETC concert')
assert_equal 13, item.quality
end
def test_backstage_pass_very_close_to_sell_date_upper_bound_at_max_quality
item = update_quality_for_item_with(5, 50, 'Backstage passes to a TAFKAL80ETC concert')
assert_equal 50, item.quality
end
def test_backstage_pass_very_close_to_sell_date_lower_bound
item = update_quality_for_item_with(1, 10, 'Backstage passes to a TAFKAL80ETC concert')
assert_equal 13, item.quality
end
def test_backstage_pass_very_close_to_sell_date_lower_bound_at_max_quality
item = update_quality_for_item_with(1, 50, 'Backstage passes to a TAFKAL80ETC concert')
assert_equal 50, item.quality
end
def test_backstage_pass_on_sell_date
item = update_quality_for_item_with(0, 10, 'Backstage passes to a TAFKAL80ETC concert')
assert_equal 0, item.quality
end
def test_backstage_pass_after_sell_date
item = update_quality_for_item_with(-10, 10, 'Backstage passes to a TAFKAL80ETC concert')
assert_equal 0, item.quality
end
def test_conjured_item_before_sell_date
item = update_quality_for_item_with(5, 10, 'Conjured Mana Cake')
assert_equal 8, item.quality
end
def test_conjured_item_at_zero_quality
item = update_quality_for_item_with(5, 0, 'Conjured Mana Cake')
assert_equal 0, item.quality
end
def test_conjured_item_on_sell_date
item = update_quality_for_item_with(0, 10, 'Conjured Mana Cake')
assert_equal 6, item.quality
end
def test_conjured_item_on_sell_date_at_zero_quality
item = update_quality_for_item_with(0, 0, 'Conjured Mana Cake')
assert_equal 0, item.quality
end
def test_conjured_item_after_sell_date
item = update_quality_for_item_with(-10, 10, 'Conjured Mana Cake')
assert_equal 6, item.quality
end
def test_conjured_item_after_sell_date_at_zero_quality
item = update_quality_for_item_with(-10, 0, 'Conjured Mana Cake')
assert_equal 0, item.quality
end
def test_several_items
items = [Item.new("normal item", 5, 10),
Item.new("Aged Brie", 3, 10)]
update_quality(items)
assert_equal 9, items[0].quality
assert_equal 4, items[0].sell_in
assert_equal 11, items[1].quality
assert_equal 2, items[1].sell_in
end
end