stateless-systems-paypal 2.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,47 @@
1
+ module Net
2
+ remove_const "HTTP"
3
+
4
+ class Response
5
+ def initialize(result)
6
+ @result = result
7
+ end
8
+
9
+ def body
10
+ @result
11
+ end
12
+ end
13
+
14
+ class Request < Struct.new(:host, :port, :query, :post_data)
15
+
16
+ cattr_accessor :fail
17
+ @@fail = false
18
+
19
+ def post(query, post)
20
+ self.query = query
21
+ self.post_data = post
22
+ Response.new(self.class.fail ? "INVALID": "VERIFIED")
23
+ end
24
+
25
+ end
26
+
27
+ class Net::HTTP
28
+
29
+
30
+ def self.start(host, port)
31
+ request = Request.new
32
+ request.host = host
33
+ request.port = port
34
+
35
+ @packages ||= []
36
+ @packages << request
37
+
38
+ yield request
39
+ end
40
+
41
+ def self.packages
42
+ @packages
43
+ end
44
+
45
+ end
46
+ end
47
+
@@ -0,0 +1,33 @@
1
+ class Module
2
+ def mock_methods(mock_methods)
3
+ raise "mock methods needs a block" unless block_given?
4
+
5
+ original = self
6
+ namespace = original.name.split("::")
7
+ class_name = namespace.last
8
+
9
+ mod = namespace[0..-2].inject(Object) { |mod, part| mod.const_get(part) }
10
+
11
+ klass = (original.is_a?(Class) ? Class : Module).new(self) do
12
+
13
+ instance_eval do
14
+ mock_methods.each do |method, proc|
15
+ define_method("mocked_#{method}", &proc)
16
+ alias_method method, "mocked_#{method}"
17
+ end
18
+ end
19
+
20
+ end
21
+
22
+ begin
23
+ mod.send(:remove_const, class_name)
24
+ mod.const_set(class_name, klass)
25
+
26
+ yield
27
+ ensure
28
+ mod.send(:remove_const, class_name)
29
+ mod.const_set(class_name, original)
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,99 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
2
+
3
+ require 'openssl'
4
+ require 'net/http'
5
+ require File.dirname(__FILE__) + '/mocks/method_mock'
6
+ require 'test/unit'
7
+ require 'paypal'
8
+
9
+ $paypal_success = Class.new do
10
+ def body; "VERIFIED"; end
11
+ end
12
+
13
+ $paypal_failure = Class.new do
14
+ def body; "INVALID"; end
15
+ end
16
+
17
+
18
+ class NotificationTest < Test::Unit::TestCase
19
+
20
+ def setup
21
+ Paypal::Notification.ipn_url = "http://www.paypal.com/some/address"
22
+
23
+ @paypal = Paypal::Notification.new(http_raw_data)
24
+ end
25
+
26
+ def test_raw
27
+ assert_equal http_raw_data, @paypal.raw
28
+ end
29
+
30
+ def test_parse
31
+ @paypal = Paypal::Notification.new(http_raw_data)
32
+ assert_equal "500.00", @paypal.params['mc_gross']
33
+ assert_equal "confirmed", @paypal.params['address_status']
34
+ assert_equal "EVMXCLDZJV77Q", @paypal.params['payer_id']
35
+ assert_equal "Completed", @paypal.params['payment_status']
36
+ assert_equal CGI.unescape("15%3A23%3A54+Apr+15%2C+2005+PDT"), @paypal.params['payment_date']
37
+
38
+ assert_equal "myinvoice" , @paypal.params['invoice' ]
39
+ assert_equal "cusdata" , @paypal.params['custom' ]
40
+ assert_equal "mypending_reason", @paypal.params['pending_reason']
41
+ assert_equal "myreason_code" , @paypal.params['reason_code' ]
42
+ assert_equal "mymemo" , @paypal.params['memo' ]
43
+ assert_equal "mypayment_type" , @paypal.params['payment_type' ]
44
+ assert_equal "myexchange_rate" , @paypal.params['exchange_rate' ]
45
+
46
+ # ...
47
+ end
48
+
49
+ def test_accessors
50
+ assert @paypal.complete?
51
+ assert_equal "Completed", @paypal.status
52
+ assert_equal "6G996328CK404320L", @paypal.transaction_id
53
+ assert_equal "web_accept", @paypal.type
54
+ assert_equal "500.00", @paypal.gross
55
+ assert_equal "15.05", @paypal.fee
56
+ assert_equal "CAD", @paypal.currency
57
+ assert_equal "myinvoice" , @paypal.invoice
58
+ assert_equal "cusdata" , @paypal.custom
59
+ assert_equal "mypending_reason" , @paypal.pending_reason
60
+ assert_equal "myreason_code" , @paypal.reason_code
61
+ assert_equal "mymemo" , @paypal.memo
62
+ assert_equal "mypayment_type" , @paypal.payment_type
63
+ assert_equal "myexchange_rate" , @paypal.exchange_rate
64
+ end
65
+
66
+ def test_compositions
67
+ assert_equal Money.ca_dollar(50000), @paypal.amount
68
+ end
69
+
70
+ def test_acknowledgement
71
+
72
+
73
+ Net::HTTP.mock_methods( :request => Proc.new { |r, b| $paypal_success.new } ) do
74
+ assert @paypal.acknowledge
75
+ end
76
+
77
+ Net::HTTP.mock_methods( :request => Proc.new { |r, b| $paypal_failure.new } ) do
78
+ assert !@paypal.acknowledge
79
+ end
80
+
81
+ end
82
+
83
+ def test_send_acknowledgement
84
+ request, body = nil
85
+
86
+ Net::HTTP.mock_methods( :request => Proc.new { |r, b| request = r; body = b; $paypal_success.new } ) do
87
+ assert @paypal.acknowledge
88
+ end
89
+
90
+ assert_equal '/some/address?cmd=_notify-validate', request.path
91
+ assert_equal http_raw_data, body
92
+ end
93
+
94
+ private
95
+
96
+ def http_raw_data
97
+ "mc_gross=500.00&address_status=confirmed&payer_id=EVMXCLDZJV77Q&tax=0.00&address_street=164+Waverley+Street&payment_date=15%3A23%3A54+Apr+15%2C+2005+PDT&payment_status=Completed&address_zip=K2P0V6&first_name=Tobias&mc_fee=15.05&address_country_code=CA&address_name=Tobias+Luetke&notify_version=1.7&custom=cusdata&payer_status=unverified&business=tobi%40leetsoft.com&address_country=Canada&address_city=Ottawa&quantity=1&payer_email=tobi%40snowdevil.ca&verify_sign=AEt48rmhLYtkZ9VzOGAtwL7rTGxUAoLNsuf7UewmX7UGvcyC3wfUmzJP&txn_id=6G996328CK404320L&payment_type=instant&last_name=Luetke&address_state=Ontario&receiver_email=tobi%40leetsoft.com&payment_fee=&receiver_id=UQ8PDYXJZQD9Y&txn_type=web_accept&item_name=Store+Purchase&mc_currency=CAD&item_number=&test_ipn=1&payment_gross=&shipping=0.00&invoice=myinvoice&pending_reason=mypending_reason&reason_code=myreason_code&memo=mymemo&payment_type=mypayment_type&exchange_rate=myexchange_rate"
98
+ end
99
+ end
@@ -0,0 +1,16 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
+
3
+ require 'test/unit'
4
+ require 'paypal'
5
+
6
+ class RemoteTest < Test::Unit::TestCase
7
+
8
+ def test_raw
9
+ Paypal::Notification.ipn_url = "https://www.sandbox.paypal.com/cgi-bin/webscr"
10
+ @paypal = Paypal::Notification.new('')
11
+
12
+ assert_nothing_raised do
13
+ assert_equal false, @paypal.acknowledge
14
+ end
15
+ end
16
+ end
@@ -0,0 +1 @@
1
+ payment_date=02%3A41%3A30+Oct+16%2C+2008+PDT&txn_type=web_accept&last_name=User&residence_country=US&item_name=Store+purchase&payment_gross=17.00&mc_currency=USD&business=seller_1224144737_biz%40e-electrosystems.com&payment_type=instant&protection_eligibility=Eligible&verify_sign=A-HtX3MCUUWjdDhCPAr-2aBmq018A.3u4sJmLsYXTI2shuvE4k-rW9JJ&payer_status=verified&test_ipn=1&tax=0.00&payer_email=gmedin_1223672304_per%40e-electrosystems.com&txn_id=0HP838810U436742B&quantity=1&receiver_email=seller_1224144737_biz%40e-electrosystems.com&first_name=Test&payer_id=L7HKTESMC5NZ4&receiver_id=3DK5MWJLAGUJ2&item_number=Item+17&payment_status=Completed&payment_fee=0.79&mc_fee=0.79&hipping=0.00&mc_gross=17.00&custom=&charset=windows-1252&notify_version=2.5
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stateless-systems-paypal
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.1.3
5
+ platform: ruby
6
+ authors:
7
+ - Tobias Luetke
8
+ autorequire: paypal
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-14 00:00:00 +11:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: money
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ description: Paypal IPN integration library for rails and other web applications
26
+ email: tobi@leetsoft.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files: []
32
+
33
+ files:
34
+ - init.rb
35
+ - README
36
+ - Rakefile
37
+ - MIT-LICENSE
38
+ - lib/notification.rb
39
+ - lib/helper.rb
40
+ - lib/paypal.rb
41
+ - misc/PayPal - Instant Payment Notification - Technical Overview.pdf
42
+ - misc/paypal.psd
43
+ - test/sample.ipn.response.txt
44
+ - test/notification_test.rb
45
+ - test/mocks/http_mock.rb
46
+ - test/mocks/method_mock.rb
47
+ - test/helper_test.rb
48
+ - test/remote/remote_test.rb
49
+ has_rdoc: true
50
+ homepage: http://dist.leetsoft.com/api/paypal
51
+ licenses: []
52
+
53
+ post_install_message:
54
+ rdoc_options: []
55
+
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ version:
70
+ requirements: []
71
+
72
+ rubyforge_project:
73
+ rubygems_version: 1.3.5
74
+ signing_key:
75
+ specification_version: 3
76
+ summary: Paypal IPN integration library for rails and other web applications
77
+ test_files: []
78
+