@@ -7,18 +7,20 @@ def setup
7
7
online_filing_deadline : {
8
8
"2012-13" : Date . new ( 2014 , 1 , 31 ) ,
9
9
"2013-14" : Date . new ( 2015 , 1 , 31 ) ,
10
- "2014-15" : Date . new ( 2015 , 1 , 31 ) ,
11
- "2015-16" : Date . new ( 2017 , 1 , 31 )
10
+ "2014-15" : Date . new ( 2016 , 1 , 31 ) ,
11
+ "2015-16" : Date . new ( 2017 , 1 , 31 ) ,
12
12
} ,
13
13
offline_filing_deadline : {
14
14
"2012-13" : Date . new ( 2013 , 10 , 31 ) ,
15
15
"2013-14" : Date . new ( 2014 , 10 , 31 ) ,
16
- "2015-16" : Date . new ( 2016 , 10 , 31 )
16
+ "2014-15" : Date . new ( 2015 , 10 , 31 ) ,
17
+ "2015-16" : Date . new ( 2016 , 10 , 31 ) ,
17
18
} ,
18
19
payment_deadline : {
19
20
"2012-13" : Date . new ( 2014 , 1 , 31 ) ,
20
21
"2013-14" : Date . new ( 2015 , 1 , 31 ) ,
21
- "2015-16" : Date . new ( 2017 , 1 , 31 )
22
+ "2014-15" : Date . new ( 2016 , 1 , 31 ) ,
23
+ "2015-16" : Date . new ( 2017 , 1 , 31 ) ,
22
24
} ,
23
25
}
24
26
@@ -116,6 +118,7 @@ def setup
116
118
should "confirm payment was made late" do
117
119
refute @calculator . paid_on_time?
118
120
end
121
+
119
122
should "calculate late filing penalty" do
120
123
# band one
121
124
@calculator . filing_date = Date . parse ( "2014-02-02" )
@@ -153,52 +156,93 @@ def setup
153
156
assert_equal 1500 , @calculator . late_filing_penalty
154
157
end
155
158
156
- should "calculate interest and late payment penalty" do
157
- @calculator . estimated_bill = SmartAnswer ::Money . new ( 10000 )
158
- @calculator . payment_date = Date . parse ( "2014-01-01" )
159
- assert_equal 0 , @calculator . interest
160
- # 1 day after the deadling
161
- @calculator . payment_date = Date . parse ( "2014-02-01" )
162
- assert_equal 0 , @calculator . interest
163
- # 31 days after the deadline
164
- @calculator . payment_date = Date . parse ( "2014-03-03" )
165
- assert_equal 24.66 , @calculator . interest
166
- assert_equal 500 , @calculator . late_payment_penalty
167
- # should calculate PenaltyInterest1
168
- @calculator . payment_date = Date . parse ( "2014-04-02" )
169
- assert_equal 49.32 , @calculator . interest #50.14 + 0.04 penalty interest
170
- # one day before late payment penalty 2
171
- @calculator . payment_date = Date . parse ( "2014-08-01" )
172
- assert_equal 1000 , @calculator . late_payment_penalty
173
- assert_equal 148.77 , @calculator . interest
174
- # should calculate PenaltyInterest2
175
- @calculator . payment_date = Date . parse ( "2014-09-02" )
176
- assert_equal 1000 , @calculator . late_payment_penalty
177
- assert_equal 175.07 , @calculator . interest
178
- # one day before late payment penalty 3
179
- @calculator . payment_date = Date . parse ( "2015-02-01" )
180
- assert_equal 1500 , @calculator . late_payment_penalty
181
- assert_equal 300 , @calculator . interest
182
- # should apply late payment penalty 3
183
- @calculator . payment_date = Date . parse ( "2015-02-02" )
184
- assert_equal 1500 , @calculator . late_payment_penalty
185
- assert_equal 300.82 , @calculator . interest
186
- # should calculate PenaltyInterest3
187
- @calculator . payment_date = Date . parse ( "2015-03-05" )
188
- assert_equal 1500 , @calculator . late_payment_penalty
189
- assert_equal 326.3 , @calculator . interest
159
+ context "pay penalty before rate change on 23 Aug 2016" do
160
+ should "calculate interest and late payment penalty" do
161
+ @calculator . estimated_bill = SmartAnswer ::Money . new ( 10000 )
162
+ @calculator . payment_date = Date . parse ( "2014-01-01" )
163
+ assert_equal 0 , @calculator . interest
164
+ # 1 day after the deadline
165
+ @calculator . payment_date = Date . parse ( "2014-02-01" )
166
+ assert_equal 0 , @calculator . interest
167
+ # 31 days after the deadline
168
+ @calculator . payment_date = Date . parse ( "2014-03-03" )
169
+ assert_equal 24.66 , @calculator . interest
170
+ assert_equal 500 , @calculator . late_payment_penalty
171
+ # should calculate PenaltyInterest1
172
+ @calculator . payment_date = Date . parse ( "2014-04-02" )
173
+ assert_equal 49.32 , @calculator . interest #50.14 + 0.04 penalty interest
174
+ # one day before late payment penalty 2
175
+ @calculator . payment_date = Date . parse ( "2014-08-01" )
176
+ assert_equal 1000 , @calculator . late_payment_penalty
177
+ assert_equal 148.77 , @calculator . interest
178
+ # should calculate PenaltyInterest2
179
+ @calculator . payment_date = Date . parse ( "2014-09-02" )
180
+ assert_equal 1000 , @calculator . late_payment_penalty
181
+ assert_equal 175.07 , @calculator . interest
182
+ # one day before late payment penalty 3
183
+ @calculator . payment_date = Date . parse ( "2015-02-01" )
184
+ assert_equal 1500 , @calculator . late_payment_penalty
185
+ assert_equal 300 , @calculator . interest
186
+ # should apply late payment penalty 3
187
+ @calculator . payment_date = Date . parse ( "2015-02-02" )
188
+ assert_equal 1500 , @calculator . late_payment_penalty
189
+ assert_equal 300.82 , @calculator . interest
190
+ # should calculate PenaltyInterest3
191
+ @calculator . payment_date = Date . parse ( "2015-03-05" )
192
+ assert_equal 1500 , @calculator . late_payment_penalty
193
+ assert_equal 326.3 , @calculator . interest
194
+ end
195
+
196
+ should "calculate total owed (excludes filing penalty)" do
197
+ @calculator . payment_date = Date . parse ( "2014-02-02" )
198
+ assert_equal 5000 , @calculator . total_owed
199
+ @calculator . payment_date = Date . parse ( "2014-02-04" )
200
+ assert_equal 5001 , @calculator . total_owed
201
+ @calculator . payment_date = Date . parse ( "2014-08-01" )
202
+ assert_equal 5574 , @calculator . total_owed
203
+ @calculator . payment_date = Date . parse ( "2015-02-02" )
204
+ assert_equal 750 , @calculator . late_payment_penalty
205
+ assert_equal 5900 , @calculator . total_owed
206
+ end
190
207
end
191
208
192
- should "calculate total owed (excludes filing penalty)" do
193
- @calculator . payment_date = Date . parse ( "2014-02-02" )
194
- assert_equal 5000 , @calculator . total_owed
195
- @calculator . payment_date = Date . parse ( "2014-02-04" )
196
- assert_equal 5001 , @calculator . total_owed
197
- @calculator . payment_date = Date . parse ( "2014-08-01" )
198
- assert_equal 5574 , @calculator . total_owed
199
- @calculator . payment_date = Date . parse ( "2015-02-02" )
200
- assert_equal 750 , @calculator . late_payment_penalty
201
- assert_equal 5900 , @calculator . total_owed
209
+ context "pay penalty after rate change on 23 Aug 2016" do
210
+ setup do
211
+ @calculator . estimated_bill = SmartAnswer ::Money . new ( 1000 )
212
+ end
213
+
214
+ context "deadline and payment dates are before rate change date" do
215
+ should "have values with rate at 3%" do
216
+ @calculator . payment_deadline = Date . parse ( "2016-01-31" )
217
+ @calculator . payment_date = Date . parse ( "2016-08-23" )
218
+ assert_equal 16.77 , @calculator . interest . value . to_f
219
+ end
220
+ end
221
+
222
+ context "deadline and payment dates are after rate change date" do
223
+ should "have values from rate at 2.75%" do
224
+ @calculator . payment_deadline = Date . parse ( "2016-08-23" )
225
+ @calculator . payment_date = Date . parse ( "2016-10-31" )
226
+ assert_equal 5.12 , @calculator . interest . value . to_f
227
+ end
228
+ end
229
+
230
+ context "tax year includes rate change, deadline and payment are after rate change" do
231
+ should "should have value from rate at 2.75%" do
232
+ @calculator . tax_year = "2015-16"
233
+ @calculator . payment_deadline = Date . parse ( "2017-1-31" )
234
+ @calculator . payment_date = Date . parse ( "2017-3-1" )
235
+ assert_equal 2.11 , @calculator . interest . value . to_f
236
+ end
237
+ end
238
+
239
+ context "deadline is before rate change date, payment is after rate change date" do
240
+ should "have value calculated with rates from before and after change" do
241
+ @calculator . payment_deadline = Date . parse ( "2016-01-31" )
242
+ @calculator . payment_date = Date . parse ( "2016-10-31" )
243
+ assert_equal 21.97 , @calculator . interest . value . to_f
244
+ end
245
+ end
202
246
end
203
247
end # filed or paid late
204
248
end # online submission
0 commit comments