|
46 | 46 | ) |
47 | 47 | end |
48 | 48 |
|
49 | | - context '.risky' do |
| 49 | + context 'risk analysis' do |
50 | 50 | let!(:payment_1) { create(:payment, avs_response: 'Y', cvv_response_code: 'M', cvv_response_message: 'Match') } |
51 | 51 | let!(:payment_2) { create(:payment, avs_response: 'Y', cvv_response_code: 'M', cvv_response_message: '') } |
52 | 52 | let!(:payment_3) { create(:payment, avs_response: 'A', cvv_response_code: 'M', cvv_response_message: 'Match') } |
53 | 53 | let!(:payment_4) { create(:payment, avs_response: 'Y', cvv_response_code: 'N', cvv_response_message: 'No Match') } |
| 54 | + let!(:payment_5) { create(:payment, avs_response: 'Y', cvv_response_code: 'M', cvv_response_message: '', state: 'failed') } |
54 | 55 |
|
55 | | - it 'should not return successful responses' do |
56 | | - expect(subject.class.risky.to_a).to match_array([payment_3, payment_4]) |
| 56 | + describe '.risky' do |
| 57 | + it 'fetches only risky payments' do |
| 58 | + expect(subject.class.risky.to_a).to match_array([payment_3, payment_4, payment_5]) |
| 59 | + end |
| 60 | + end |
| 61 | + |
| 62 | + context '#risky?' do |
| 63 | + it 'is true for risky payments' do |
| 64 | + aggregate_failures do |
| 65 | + expect(payment_1).not_to be_risky |
| 66 | + expect(payment_2).not_to be_risky |
| 67 | + expect(payment_3).to be_risky |
| 68 | + expect(payment_4).to be_risky |
| 69 | + expect(payment_5).to be_risky |
| 70 | + end |
| 71 | + end |
57 | 72 | end |
58 | 73 | end |
59 | 74 |
|
|
1207 | 1222 | end |
1208 | 1223 | end |
1209 | 1224 |
|
1210 | | - describe "is_avs_risky?" do |
| 1225 | + describe "#is_avs_risky?" do |
1211 | 1226 | it "returns false if avs_response included in NON_RISKY_AVS_CODES" do |
1212 | 1227 | ('A'..'Z').reject{ |x| subject.class::RISKY_AVS_CODES.include?(x) }.to_a.each do |char| |
1213 | 1228 | payment.update_attribute(:avs_response, char) |
|
1231 | 1246 | end |
1232 | 1247 | end |
1233 | 1248 |
|
1234 | | - describe "is_cvv_risky?" do |
1235 | | - it "returns false if cvv_response_code == 'M'" do |
1236 | | - payment.update_attribute(:cvv_response_code, "M") |
1237 | | - expect(payment.is_cvv_risky?).to eq(false) |
1238 | | - end |
1239 | | - |
1240 | | - it "returns false if cvv_response_code == nil" do |
1241 | | - payment.update_attribute(:cvv_response_code, nil) |
1242 | | - expect(payment.is_cvv_risky?).to eq(false) |
1243 | | - end |
1244 | | - |
1245 | | - it "returns false if cvv_response_message == ''" do |
1246 | | - payment.update_attribute(:cvv_response_message, '') |
1247 | | - expect(payment.is_cvv_risky?).to eq(false) |
| 1249 | + describe "#is_cvv_risky?" do |
| 1250 | + ['M', nil].each do |char| |
| 1251 | + it "returns false if cvv_response_code is #{char.inspect}" do |
| 1252 | + payment.cvv_response_code = char |
| 1253 | + expect(payment.is_cvv_risky?).to eq(false) |
| 1254 | + end |
1248 | 1255 | end |
1249 | 1256 |
|
1250 | | - it "returns true if cvv_response_code == [A-Z], omitting D" do |
1251 | | - # should use cvv_response_code helper |
1252 | | - (%w{N P S U} << "").each do |char| |
1253 | | - payment.update_attribute(:cvv_response_code, char) |
| 1257 | + ['', *('A'...'M'), *('N'..'Z')].each do |char| |
| 1258 | + it "returns true if cvv_response_code is #{char.inspect} (not 'M' or nil)" do |
| 1259 | + payment.cvv_response_code = char |
1254 | 1260 | expect(payment.is_cvv_risky?).to eq(true) |
1255 | 1261 | end |
1256 | 1262 | end |
|
0 commit comments