samurai 0.2.26 → 0.2.27

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,7 +9,7 @@ GIT
9
9
  PATH
10
10
  remote: .
11
11
  specs:
12
- samurai (0.2.25)
12
+ samurai (0.2.27)
13
13
  activeresource (>= 2.2.2)
14
14
 
15
15
  GEM
@@ -19,7 +19,7 @@ class Samurai::Base < ActiveResource::Base
19
19
  end
20
20
 
21
21
  def has_errors?
22
- respond_to?(:errors) && !errors.empty?
22
+ respond_to?(:errors) && errors && errors.count > 0
23
23
  end
24
24
 
25
25
  protected
@@ -33,7 +33,7 @@ class Samurai::Message < Samurai::Base
33
33
  'error processor.transaction type_invalid' => 'Requested transaction type is not allowed for this card/merchant.',
34
34
  'error processor.transaction method_invalid' => 'The requested transaction could not be performed for this merchant.',
35
35
  'error input.amount exceeds_limit' => 'The maximum transaction amount was exceeded.',
36
- 'error input.cvv invalid' => 'The CVV data entered is not correct.',
36
+ 'error input.cvv invalid' => 'The CVV code was not correct.',
37
37
  'error processor.network_gateway communication_error' => 'There was a fatal communication error.',
38
38
  'error processor.network_gateway unresponsive' => 'The processing network is temporarily unavailable.',
39
39
  'error processor.network_gateway merchant_invalid' => 'The merchant number is not on file.',
@@ -52,7 +52,21 @@ class Samurai::Message < Samurai::Base
52
52
 
53
53
  # CVV Responses
54
54
  'error input.cvv declined' => 'The CVV code was not correct.',
55
- 'error input.cvv declined' => 'The CVV code was invalid.',
55
+
56
+ # Input validations
57
+ 'error input.card_number is_blank' => 'The card number was blank.',
58
+ 'error input.card_number not_numeric' => 'The card number was invalid.',
59
+ 'error input.card_number too_short' => 'The card number was too short.',
60
+ 'error input.card_number too_long' => 'The card number was too long.',
61
+ 'error input.card_number failed_checksum' => 'The card number was invalid.',
62
+ 'error input.cvv is_blank' => 'The CVV was blank.',
63
+ 'error input.cvv not_numeric' => 'The CVV was invalid.',
64
+ 'error input.cvv too_short' => 'The CVV was too short.',
65
+ 'error input.cvv too_long' => 'The CVV was too long.',
66
+ 'error input.expiry_month is_blank' => 'The expiration month was blank.',
67
+ 'error input.expiry_month not_numeric' => 'The expiration month was invalid.',
68
+ 'error input.expiry_year is_blank' => 'The expiration year was blank.',
69
+ 'error input.expiry_year not_numeric' => 'The expiration year was invalid.',
56
70
  }
57
71
 
58
72
  def self.response_mappings
@@ -37,8 +37,10 @@ class Samurai::PaymentMethod < Samurai::Base
37
37
  # Examine the `<messages>` array, and add an error to the Errors object for each `<message>`
38
38
  def process_response_errors
39
39
  if respond_to?(:messages) && self.messages
40
- self.messages.each do |message|
41
- self.errors.add message.context, message.description
40
+ # Sort the messages so that more-critical/relevant ones appear first, since only the first error is added to a field
41
+ sorted_messages = self.messages.sort_by {|m| ['is_blank', 'not_numeric', 'too_short', 'too_long', 'failed_checksum'].index(m.key) || 0 }
42
+ sorted_messages.each do |message|
43
+ self.errors.add message.context, message.description if self.errors[message.context].blank?
42
44
  end
43
45
  end
44
46
  end
@@ -1,3 +1,3 @@
1
1
  module Samurai
2
- VERSION = "0.2.26".freeze
2
+ VERSION = "0.2.27".freeze
3
3
  end
@@ -3,18 +3,96 @@ require 'spec_helper'
3
3
  describe "PaymentMethod actions" do
4
4
 
5
5
  it "should create a new PaymentMethod using S2S endpoint" do
6
- p = Samurai::PaymentMethod.create(
7
- :city => "Chicago",
8
- :zip => "53211",
9
- :expiry_month => 03,
10
- :cvv => "123",
11
- :card_number => "4111111111111111",
12
- :address_1 => "1240 W Monroe #1",
13
- :address_2 => "",
14
- :last_name => "harper",
15
- :expiry_year => "2015",
16
- :first_name => "sean",
6
+ Samurai::PaymentMethod.create(
7
+ :city => "Chicago",
8
+ :zip => "53211",
9
+ :expiry_month => 03,
10
+ :cvv => "123",
11
+ :card_number => "4111111111111111",
12
+ :address_1 => "1240 W Monroe #1",
13
+ :address_2 => "",
14
+ :last_name => "harper",
15
+ :expiry_year => "2015",
16
+ :first_name => "sean",
17
17
  :state => "IL")
18
18
  end
19
19
 
20
+ describe 'with errors' do
21
+ before(:each) do
22
+ @params = {
23
+ :city => "Chicago",
24
+ :zip => "53211",
25
+ :expiry_month => 03,
26
+ :cvv => "123",
27
+ :card_number => "4111111111111111",
28
+ :address_1 => "1240 W Monroe #1",
29
+ :address_2 => "",
30
+ :last_name => "harper",
31
+ :expiry_year => "2015",
32
+ :first_name => "sean",
33
+ :state => "IL",
34
+ }
35
+ end
36
+
37
+ it 'should validate blank card number' do
38
+ pm = Samurai::PaymentMethod.create @params.merge(:card_number=>'')
39
+ pm.has_errors?.should be_true
40
+ pm.errors.count.should == 1
41
+ pm.errors['input.card_number'].should == [ 'The card number was blank.' ]
42
+ end
43
+ it 'should validate invalid card number' do
44
+ pm = Samurai::PaymentMethod.create @params.merge(:card_number=>'abc123')
45
+ pm.has_errors?.should be_true
46
+ pm.errors.count.should == 1
47
+ pm.errors['input.card_number'].should == [ 'The card number was invalid.' ]
48
+ end
49
+ it 'should validate short card number' do
50
+ pm = Samurai::PaymentMethod.create @params.merge(:card_number=>'1234')
51
+ pm.has_errors?.should be_true
52
+ pm.errors.count.should == 1
53
+ pm.errors['input.card_number'].should == [ 'The card number was too short.' ]
54
+ end
55
+ it 'should validate long card number' do
56
+ pm = Samurai::PaymentMethod.create @params.merge(:card_number=>'41111111111111111')
57
+ pm.has_errors?.should be_true
58
+ pm.errors.count.should == 1
59
+ pm.errors['input.card_number'].should == [ 'The card number was too long.' ]
60
+ end
61
+ it 'should not validate blank cvv' do
62
+ pm = Samurai::PaymentMethod.create @params.merge(:cvv=>'')
63
+ pm.has_errors?.should be_false
64
+ pm.errors.count.should == 0
65
+ end
66
+ it 'should validate invalid cvv' do
67
+ pm = Samurai::PaymentMethod.create @params.merge(:cvv=>'abc')
68
+ pm.has_errors?.should be_true
69
+ pm.errors.count.should == 1
70
+ pm.errors['input.cvv'].should == [ 'The CVV was invalid.' ]
71
+ end
72
+ it 'should validate short cvv' do
73
+ pm = Samurai::PaymentMethod.create @params.merge(:cvv=>'1')
74
+ pm.has_errors?.should be_true
75
+ pm.errors.count.should == 1
76
+ pm.errors['input.cvv'].should == [ 'The CVV was too short.' ]
77
+ end
78
+ it 'should validate long cvv' do
79
+ pm = Samurai::PaymentMethod.create @params.merge(:cvv=>'11111')
80
+ pm.has_errors?.should be_true
81
+ pm.errors.count.should == 1
82
+ pm.errors['input.cvv'].should == [ 'The CVV was too long.' ]
83
+ end
84
+ it 'should validate blank expiry_month' do
85
+ pm = Samurai::PaymentMethod.create @params.merge(:expiry_month=>'')
86
+ pm.has_errors?.should be_true
87
+ pm.errors.count.should == 1
88
+ pm.errors['input.expiry_month'].should == [ 'The expiration month was blank.' ]
89
+ end
90
+ it 'should validate blank expiry_year' do
91
+ pm = Samurai::PaymentMethod.create @params.merge(:expiry_year=>'')
92
+ pm.has_errors?.should be_true
93
+ pm.errors.count.should == 1
94
+ pm.errors['input.expiry_year'].should == [ 'The expiration year was blank.' ]
95
+ end
96
+ end
97
+
20
98
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: samurai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.26
4
+ version: 0.2.27
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-11-18 00:00:00.000000000Z
13
+ date: 2011-11-20 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activeresource
17
- requirement: &70225231947560 !ruby/object:Gem::Requirement
17
+ requirement: &70263286980460 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 2.2.2
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70225231947560
25
+ version_requirements: *70263286980460
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: bundler
28
- requirement: &70225231947000 !ruby/object:Gem::Requirement
28
+ requirement: &70263286980000 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.0.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70225231947000
36
+ version_requirements: *70263286980000
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec
39
- requirement: &70225231946440 !ruby/object:Gem::Requirement
39
+ requirement: &70263286979520 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 2.6.0
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70225231946440
47
+ version_requirements: *70263286979520
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: fakeweb
50
- requirement: &70225231946060 !ruby/object:Gem::Requirement
50
+ requirement: &70263286978900 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70225231946060
58
+ version_requirements: *70263286978900
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: ruby-debug19
61
- requirement: &70225231945480 !ruby/object:Gem::Requirement
61
+ requirement: &70263286969400 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,7 +66,7 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *70225231945480
69
+ version_requirements: *70263286969400
70
70
  description: If you are an online merchant and using samurai.feefighters.com, this
71
71
  gem will make your life easy. Integrate with the samurai.feefighters.com portal
72
72
  and process transaction.