pag_seguro 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/pag_seguro/errors/unknown_error.rb +2 -2
- data/lib/pag_seguro/payment.rb +33 -11
- data/lib/pag_seguro/version.rb +1 -1
- data/spec/pag_seguro/errors/invalid_data_spec.rb +22 -0
- data/spec/pag_seguro/errors/unauthorized_spec.rb +7 -0
- data/spec/pag_seguro/errors/unknown_error_spec.rb +17 -0
- data/spec/pag_seguro/integration/checkout_spec.rb +33 -1
- data/spec/pag_seguro/notification_spec.rb +10 -0
- data/spec/pag_seguro/payment_spec.rb +9 -0
- metadata +16 -10
@@ -1,8 +1,8 @@
|
|
1
1
|
module PagSeguro
|
2
2
|
module Errors
|
3
|
-
class UnknownError
|
3
|
+
class UnknownError < Exception
|
4
4
|
def initialize(response)
|
5
|
-
super("Unknown response code (#{response.code}):\n#{
|
5
|
+
super("Unknown response code (#{response.code}):\n#{response.body}")
|
6
6
|
end
|
7
7
|
end
|
8
8
|
end
|
data/lib/pag_seguro/payment.rb
CHANGED
@@ -2,7 +2,7 @@ module PagSeguro
|
|
2
2
|
class Payment
|
3
3
|
include ActiveModel::Validations
|
4
4
|
|
5
|
-
attr_accessor :id, :email, :token, :items, :sender, :shipping, :extra_amount, :redirect_url, :max_uses, :max_age
|
5
|
+
attr_accessor :id, :email, :token, :items, :sender, :shipping, :extra_amount, :redirect_url, :max_uses, :max_age, :response
|
6
6
|
|
7
7
|
validates_presence_of :email, :token
|
8
8
|
validates_format_of :extra_amount, with: /^\d+\.\d{2}$/, message: " must be a decimal and have 2 digits after the dot", allow_blank: true
|
@@ -36,16 +36,17 @@ module PagSeguro
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def code
|
39
|
-
response
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
39
|
+
@response ||= parse_checkout_response
|
40
|
+
parse_code
|
41
|
+
end
|
42
|
+
|
43
|
+
def date
|
44
|
+
@response ||= parse_checkout_response
|
45
|
+
parse_date
|
46
|
+
end
|
47
|
+
|
48
|
+
def reset!
|
49
|
+
@response = nil
|
49
50
|
end
|
50
51
|
|
51
52
|
protected
|
@@ -60,5 +61,26 @@ module PagSeguro
|
|
60
61
|
def send_checkout
|
61
62
|
RestClient.post(checkout_url_with_params, checkout_xml, content_type: "application/xml"){|response, request, result| response }
|
62
63
|
end
|
64
|
+
|
65
|
+
def parse_checkout_response
|
66
|
+
response = send_checkout
|
67
|
+
if response.code == 200
|
68
|
+
response.body
|
69
|
+
elsif response.code == 401
|
70
|
+
raise Errors::Unauthorized
|
71
|
+
elsif response.code == 400
|
72
|
+
raise Errors::InvalidData.new(response.body)
|
73
|
+
else
|
74
|
+
raise Errors::UnknownError.new(response)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def parse_date
|
79
|
+
Nokogiri::XML(@response.body).css("checkout date").first.content
|
80
|
+
end
|
81
|
+
|
82
|
+
def parse_code
|
83
|
+
Nokogiri::XML(@response.body).css("checkout code").first.content
|
84
|
+
end
|
63
85
|
end
|
64
86
|
end
|
data/lib/pag_seguro/version.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
def invalid_data_xml
|
4
|
+
<<XML
|
5
|
+
<errors>
|
6
|
+
<error>
|
7
|
+
<code>404</code>
|
8
|
+
<message>Not Found</message>
|
9
|
+
</error>
|
10
|
+
<error>
|
11
|
+
<code>422</code>
|
12
|
+
<message>Unauthorized</message>
|
13
|
+
</error>
|
14
|
+
</errors>
|
15
|
+
XML
|
16
|
+
end
|
17
|
+
|
18
|
+
describe PagSeguro::Errors::InvalidData do
|
19
|
+
it "should be able to parse an error xml and raise the error codes" do
|
20
|
+
lambda { raise PagSeguro::Errors::InvalidData.new(invalid_data_xml) }.should raise_error(PagSeguro::Errors::InvalidData, "404: Not Found\n422: Unauthorized\n")
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe PagSeguro::Errors::Unauthorized do
|
4
|
+
it "should be able to raise an unauthorized error" do
|
5
|
+
lambda { raise PagSeguro::Errors::Unauthorized.new }.should raise_error(PagSeguro::Errors::Unauthorized, "Credentials provided (e-mail and token) failed to authenticate")
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
class MockResponse
|
4
|
+
def code
|
5
|
+
10000
|
6
|
+
end
|
7
|
+
|
8
|
+
def body
|
9
|
+
" error description"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe PagSeguro::Errors::UnknownError do
|
14
|
+
it "should be able to raise an unknown error" do
|
15
|
+
lambda { raise PagSeguro::Errors::UnknownError.new(MockResponse.new) }.should raise_error(PagSeguro::Errors::UnknownError, "Unknown response code (10000):\n error description")
|
16
|
+
end
|
17
|
+
end
|
@@ -23,7 +23,7 @@ describe "PagSeguro::Payment.code" do
|
|
23
23
|
payment = create_valid_payment
|
24
24
|
payment.code.size.should == 32
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
it "should tell me when the email and token are invalid" do
|
28
28
|
payment = PagSeguro::Payment.new("not_a_user@not_an_email.com", "NOTATOKEN7F048A09A8AEFDD1E5A7B91")
|
29
29
|
lambda { payment.code }.should raise_error(PagSeguro::Errors::Unauthorized)
|
@@ -38,4 +38,36 @@ describe "PagSeguro::Payment.code" do
|
|
38
38
|
payment = create_valid_payment
|
39
39
|
RestClient.get(payment.checkout_payment_url).code.should == 200
|
40
40
|
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "PagSeguro::Payment.date" do
|
44
|
+
it "should send a request to pagseguro" do
|
45
|
+
payment = create_valid_payment
|
46
|
+
payment.date.should match(/^\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}[-+]\d{2}:\d{2}$/)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "PagSeguro::Payment parse_checkout_response" do
|
51
|
+
before do
|
52
|
+
@payment = create_valid_payment
|
53
|
+
@payment.stub(:parse_code)
|
54
|
+
@payment.stub(:parse_date)
|
55
|
+
@payment.stub(:parse_checkout_response){ "some response" }
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should not make a request to pagseguro more than once" do
|
59
|
+
@payment.should_receive(:parse_checkout_response).exactly(1).times
|
60
|
+
|
61
|
+
@payment.code
|
62
|
+
@payment.code
|
63
|
+
@payment.date
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should be make more than one request to pag seguro if the payment is reset" do
|
67
|
+
@payment.should_receive(:parse_checkout_response).exactly(2).times
|
68
|
+
|
69
|
+
@payment.code
|
70
|
+
@payment.reset!
|
71
|
+
@payment.date
|
72
|
+
end
|
41
73
|
end
|
@@ -55,4 +55,14 @@ describe PagSeguro::Notification do
|
|
55
55
|
@items[1].quantity.should == "1"
|
56
56
|
@items[1].amount.should == "25600.00"
|
57
57
|
end
|
58
|
+
|
59
|
+
it "should be_available if its status is 4" do
|
60
|
+
@notification.stub(:status){ 4 }
|
61
|
+
@notification.should be_available
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should be_approved if its status is 3" do
|
65
|
+
@notification.stub(:status){ 3 }
|
66
|
+
@notification.should be_approved
|
67
|
+
end
|
58
68
|
end
|
@@ -15,6 +15,15 @@ describe PagSeguro::Payment do
|
|
15
15
|
it { @payment.should have_attribute_accessor(:redirect_url) }
|
16
16
|
it { @payment.should have_attribute_accessor(:max_uses) }
|
17
17
|
it { @payment.should have_attribute_accessor(:max_age) }
|
18
|
+
it { @payment.should have_attribute_accessor(:response) }
|
19
|
+
|
20
|
+
it "should respond to :code" do
|
21
|
+
@payment.respond_to?(:code).should be_true
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should respond to :date" do
|
25
|
+
@payment.respond_to?(:date).should be_true
|
26
|
+
end
|
18
27
|
|
19
28
|
it "should have items" do
|
20
29
|
@payment.items.should be_instance_of(Array)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pag_seguro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152283540 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152283540
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: haml
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152283060 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152283060
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: nokogiri
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152282300 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152282300
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rest-client
|
49
|
-
requirement: &
|
49
|
+
requirement: &2152281580 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: 1.6.7
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152281580
|
58
58
|
description:
|
59
59
|
email:
|
60
60
|
- stefano.diem@gmail.com
|
@@ -81,6 +81,9 @@ files:
|
|
81
81
|
- lib/pag_seguro/version.rb
|
82
82
|
- pag_seguro.gemspec
|
83
83
|
- spec/pag_seguro/checkout_xml_spec.rb
|
84
|
+
- spec/pag_seguro/errors/invalid_data_spec.rb
|
85
|
+
- spec/pag_seguro/errors/unauthorized_spec.rb
|
86
|
+
- spec/pag_seguro/errors/unknown_error_spec.rb
|
84
87
|
- spec/pag_seguro/integration/checkout_spec.rb
|
85
88
|
- spec/pag_seguro/integration/config.yml
|
86
89
|
- spec/pag_seguro/item_spec.rb
|
@@ -117,6 +120,9 @@ specification_version: 3
|
|
117
120
|
summary: A ruby gem to handle PagSeguro's API version 2
|
118
121
|
test_files:
|
119
122
|
- spec/pag_seguro/checkout_xml_spec.rb
|
123
|
+
- spec/pag_seguro/errors/invalid_data_spec.rb
|
124
|
+
- spec/pag_seguro/errors/unauthorized_spec.rb
|
125
|
+
- spec/pag_seguro/errors/unknown_error_spec.rb
|
120
126
|
- spec/pag_seguro/integration/checkout_spec.rb
|
121
127
|
- spec/pag_seguro/integration/config.yml
|
122
128
|
- spec/pag_seguro/item_spec.rb
|