-
Notifications
You must be signed in to change notification settings - Fork 0
/
item_aging_rules_spec.rb
160 lines (136 loc) · 4.46 KB
/
item_aging_rules_spec.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
require "rspec"
require_relative "item_aging_rules"
RSpec.describe "Gilded Rose Item Aging Rules" do
shared_examples_for "a normally aging item" do
it "reduces 'sell by' days by 1" do
rule = described_class.new(starting_sell_in: 10)
rule.apply
expect(rule.sell_in).to eq(9)
end
end
describe NormalItemAgingRule do
it_behaves_like "a normally aging item"
it "reduces quality by 1" do
rule = NormalItemAgingRule.new(starting_quality: 10)
rule.apply
expect(rule.quality).to eq(9)
end
it "reduces quality twice as fast on sell by date" do
rule = NormalItemAgingRule.new(starting_sell_in: 0,
starting_quality: 10)
rule.apply
expect(rule.quality).to eq(8)
end
it "reduces quality twice as fast after sell by date" do
rule = NormalItemAgingRule.new(starting_sell_in: -1,
starting_quality: 10)
rule.apply
expect(rule.quality).to eq(8)
end
it "does not allow quality to be less than zero" do
rule = NormalItemAgingRule.new(starting_quality: 0)
rule.apply
expect(rule.quality).to eq(0)
end
end
describe AgedBrieAgingRule do
it_behaves_like "a normally aging item"
it "increases quality by 1" do
rule = AgedBrieAgingRule.new(starting_quality: 10)
rule.apply
expect(rule.quality).to eq(11)
end
it "increases quality twice as fast on sell by date" do
rule = AgedBrieAgingRule.new(starting_sell_in: 0,
starting_quality: 10)
rule.apply
expect(rule.quality).to eq(12)
end
it "increases quality twice as fast after sell by date" do
rule = AgedBrieAgingRule.new(starting_sell_in: -1,
starting_quality: 10)
rule.apply
expect(rule.quality).to eq(12)
end
it "does not allow quality to increase to more than 50" do
rule = AgedBrieAgingRule.new(starting_quality: 50)
rule.apply
expect(rule.quality).to eq(50)
end
end
it "does not allow quality > 50 even after sell-by" do
rule = AgedBrieAgingRule.new(starting_quality: 49,
starting_sell_in: -1)
rule.apply
expect(rule.quality).to eq(50)
end
describe SulfurasAgingRule do
it "never gets old" do
rule = described_class.new(starting_sell_in: 10)
rule.apply
expect(rule.sell_in).to eq(10)
end
it "never loses quality" do
rule = SulfurasAgingRule.new(starting_quality: 10)
rule.apply
expect(rule.quality).to eq(10)
end
end
describe PassesAgingRule do
it_behaves_like "a normally aging item"
it "increases quality by 1 when 11 days or more to go" do
rule = PassesAgingRule.new(starting_quality: 10,
starting_sell_in: 11)
rule.apply
expect(rule.quality).to eq(11)
end
it "increases quality by 2 when 10 days or less to go" do
rule = PassesAgingRule.new(starting_quality: 10,
starting_sell_in: 6)
rule.apply
expect(rule.quality).to eq(12)
end
it "increases quality by 3 when 5 days or less to go" do
rule = PassesAgingRule.new(starting_quality: 10,
starting_sell_in: 1)
rule.apply
expect(rule.quality).to eq(13)
end
it "loses all value when concert passes" do
rule = PassesAgingRule.new(starting_quality: 10,
starting_sell_in: 0)
rule.apply
expect(rule.quality).to eq(0)
end
it "does not allow quality to increase to more than 50" do
rule = PassesAgingRule.new(starting_quality: 50)
rule.apply
expect(rule.quality).to eq(50)
end
end
describe NormalItemAgingRule do
it_behaves_like "a normally aging item"
it "reduces quality by 2" do
rule = NormalItemAgingRule.new(starting_quality: 10)
rule.apply
expect(rule.quality).to eq(9)
end
it "reduces quality twice as fast on sell by date" do
rule = NormalItemAgingRule.new(starting_sell_in: 0,
starting_quality: 10)
rule.apply
expect(rule.quality).to eq(8)
end
it "reduces quality twice as fast after sell by date" do
rule = NormalItemAgingRule.new(starting_sell_in: -1,
starting_quality: 10)
rule.apply
expect(rule.quality).to eq(8)
end
it "does not allow quality to be less than zero" do
rule = NormalItemAgingRule.new(starting_quality: 0)
rule.apply
expect(rule.quality).to eq(0)
end
end
end