|
5 | 5 | context 'w/o a full set of params' do |
6 | 6 | it 'calculates correct pmt value w/o :ptype' do |
7 | 7 | loan = Finance::Loan.new(nominal_rate: 0.1, duration: 12, amount: 1000) |
8 | | - expect(loan.pmt).to eq(87.9158872300099) |
| 8 | + expect(loan.pmt).to eq(-87.9158872300099) |
9 | 9 | end |
10 | 10 |
|
11 | 11 | it 'calculates correct pmt value w/o :nominal_rate' do |
12 | 12 | loan = Finance::Loan.new(duration: 12, amount: 1200, ptype: :end) |
13 | | - expect(loan.pmt).to eq(100) |
| 13 | + expect(loan.pmt).to eq(-100) |
14 | 14 | end |
15 | 15 | end |
16 | 16 |
|
17 | 17 | context 'with zero rates' do |
18 | 18 | it 'calculates correct pmt value for 3 years' do |
19 | 19 | loan = Finance::Loan.new(nominal_rate: 0, duration: 36, amount: 10_000, ptype: :end) |
20 | | - expect(loan.pmt).to eq(277.77777777777777) |
| 20 | + expect(loan.pmt).to eq(-277.77777777777777) |
21 | 21 | end |
22 | 22 |
|
23 | 23 | it 'calculates correct pmt value for 6 months' do |
24 | 24 | loan = Finance::Loan.new(nominal_rate: 0, duration: 6, amount: 10_000, ptype: :end) |
25 | | - expect(loan.pmt).to eq(1666.6666666666667) |
| 25 | + expect(loan.pmt).to eq(-1666.6666666666667) |
26 | 26 | end |
27 | 27 | end |
28 | 28 |
|
29 | 29 | context 'with :beginning ptype' do |
30 | 30 | it 'calculates correct pmt value' do |
31 | 31 | loan = Finance::Loan.new(nominal_rate: 0.12, duration: 6, amount: 1000, ptype: :beginning) |
32 | | - expect(loan.pmt).to eq(170.8399670404763) |
| 32 | + expect(loan.pmt).to eq(-170.8399670404763) |
33 | 33 | end |
34 | 34 | end |
35 | 35 |
|
36 | 36 | it 'calculates correct pmt value' do |
37 | 37 | loan = Finance::Loan.new(nominal_rate: 0.13, duration: 90, amount: 1_000_000, ptype: :end) |
38 | | - expect(loan.pmt).to eq(17_449.90775727763) |
| 38 | + expect(loan.pmt).to eq(-17_449.90775727763) |
39 | 39 | end |
40 | 40 | end |
41 | 41 |
|
|
99 | 99 | end |
100 | 100 | end |
101 | 101 | end |
| 102 | + |
| 103 | + describe '#ppmt' do |
| 104 | + context 'when 1 period' do |
| 105 | + it 'calculates correct ppmt value' do |
| 106 | + loan = Finance::Loan.new( |
| 107 | + nominal_rate: 0.0824, duration: 12, amount: 2500, period: 1 |
| 108 | + ) |
| 109 | + expect(loan.ppmt).to eq(-200.58192368678277) |
| 110 | + end |
| 111 | + end |
| 112 | + |
| 113 | + context 'when 2 periods' do |
| 114 | + it 'calculates correct ppmt value' do |
| 115 | + loan = Finance::Loan.new( |
| 116 | + nominal_rate: 0.0824, duration: 12, amount: 2500, period: 2 |
| 117 | + ) |
| 118 | + expect(loan.ppmt).to eq(-201.95925289609866) |
| 119 | + end |
| 120 | + end |
| 121 | + |
| 122 | + context 'when 3 periods' do |
| 123 | + it 'calculates correct ppmt value' do |
| 124 | + loan = Finance::Loan.new( |
| 125 | + nominal_rate: 0.0824, duration: 12, amount: 2500, period: 3 |
| 126 | + ) |
| 127 | + expect(loan.ppmt).to eq(-203.34603976598518) |
| 128 | + end |
| 129 | + end |
| 130 | + |
| 131 | + context 'when 4 periods' do |
| 132 | + it 'calculates correct ppmt value' do |
| 133 | + loan = Finance::Loan.new( |
| 134 | + nominal_rate: 0.0824, duration: 12, amount: 2500, period: 4 |
| 135 | + ) |
| 136 | + expect(loan.ppmt).to eq(-204.7423492390449) |
| 137 | + end |
| 138 | + end |
| 139 | + |
| 140 | + context 'when 5 periods' do |
| 141 | + it 'calculates correct ppmt value' do |
| 142 | + loan = Finance::Loan.new( |
| 143 | + nominal_rate: 0.0824, duration: 12, amount: 2500, period: 5 |
| 144 | + ) |
| 145 | + expect(loan.ppmt).to eq(-206.1482467038197) |
| 146 | + end |
| 147 | + end |
| 148 | + end |
102 | 149 | end |
0 commit comments