sage_pay 0.2.13 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rbenv-version +1 -0
- data/.rspec +1 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +2 -7
- data/README.md +27 -8
- data/Rakefile +5 -114
- data/config/locales/en.yml +8 -0
- data/lib/sage_pay.rb +10 -6
- data/lib/sage_pay/locale_initializer.rb +3 -0
- data/lib/sage_pay/server/address.rb +11 -15
- data/lib/sage_pay/server/authorise.rb +2 -2
- data/lib/sage_pay/server/command.rb +7 -4
- data/lib/sage_pay/server/notification.rb +1 -1
- data/lib/sage_pay/server/notification_response.rb +1 -1
- data/lib/sage_pay/server/refund.rb +2 -3
- data/lib/sage_pay/server/registration.rb +2 -2
- data/lib/sage_pay/server/related_transaction.rb +1 -1
- data/lib/sage_pay/server/release.rb +2 -3
- data/lib/sage_pay/server/repeat.rb +2 -2
- data/lib/sage_pay/server/response.rb +2 -1
- data/lib/sage_pay/uri_fixups.rb +6 -40
- data/lib/sage_pay/validators.rb +36 -0
- data/lib/sage_pay/version.rb +3 -0
- data/sage_pay.gemspec +16 -30
- data/spec/integration/sage_pay/server_spec.rb +9 -9
- data/spec/sage_pay/server/address_spec.rb +5 -5
- data/spec/sage_pay/server/notification_response_spec.rb +2 -2
- data/spec/sage_pay/server/registration_spec.rb +13 -13
- data/spec/sage_pay/server_spec.rb +4 -4
- data/spec/sage_pay_spec.rb +2 -2
- data/spec/spec_helper.rb +8 -2
- data/spec/support/integration.rb +6 -6
- data/spec/support/validation_matchers.rb +13 -13
- metadata +115 -93
- data/Gemfile.lock +0 -39
- data/lib/validatable-ext.rb +0 -28
- data/lib/validations/validates_inclusion_of.rb +0 -22
@@ -1,7 +1,8 @@
|
|
1
1
|
module SagePay
|
2
2
|
module Server
|
3
3
|
class Response
|
4
|
-
|
4
|
+
|
5
|
+
class_attribute :key_converter, :value_converter, :match_converter, :instance_writer => false
|
5
6
|
|
6
7
|
self.key_converter = {
|
7
8
|
"VPSProtocol" => :vps_protocol,
|
data/lib/sage_pay/uri_fixups.rb
CHANGED
@@ -1,42 +1,8 @@
|
|
1
|
+
# Need to not fail when uri contains curly braces
|
2
|
+
# This overrides the DEFAULT_PARSER with the UNRESERVED key, including '{' and '}'
|
3
|
+
# DEFAULT_PARSER is used everywhere, so its better to override it once
|
1
4
|
module URI
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
# FIXME: SagePay insists that curly brackets in URLs is OK, so we have
|
6
|
-
# to convince the URI parser that's the case. First we have to update
|
7
|
-
# the constant in question.
|
8
|
-
remove_const :UNRESERVED
|
9
|
-
UNRESERVED = "-_.!~*'()#{ALNUM}\{\}"
|
10
|
-
|
11
|
-
# FIXME: Then we have to update all the dependent constants we care
|
12
|
-
# about.
|
13
|
-
remove_const :URIC
|
14
|
-
remove_const :QUERY
|
15
|
-
remove_const :X_ABS_URI
|
16
|
-
URIC = "(?:[#{UNRESERVED}#{RESERVED}]|#{ESCAPED})"
|
17
|
-
QUERY = "#{URIC}*"
|
18
|
-
X_ABS_URI = "
|
19
|
-
(#{PATTERN::SCHEME}): (?# 1: scheme)
|
20
|
-
(?:
|
21
|
-
(#{PATTERN::OPAQUE_PART}) (?# 2: opaque)
|
22
|
-
|
|
23
|
-
(?:(?:
|
24
|
-
//(?:
|
25
|
-
(?:(?:(#{PATTERN::USERINFO})@)? (?# 3: userinfo)
|
26
|
-
(?:(#{PATTERN::HOST})(?::(\\d*))?))?(?# 4: host, 5: port)
|
27
|
-
|
|
28
|
-
(#{PATTERN::REG_NAME}) (?# 6: registry)
|
29
|
-
)
|
30
|
-
|
|
31
|
-
(?!//)) (?# XXX: '//' is the mark for hostport)
|
32
|
-
(#{PATTERN::ABS_PATH})? (?# 7: path)
|
33
|
-
)(?:\\?(#{PATTERN::QUERY}))? (?# 8: query)
|
34
|
-
)
|
35
|
-
(?:\\#(#{PATTERN::FRAGMENT}))? (?# 9: fragment)
|
36
|
-
"
|
37
|
-
end
|
38
|
-
remove_const :ABS_URI
|
39
|
-
ABS_URI = Regexp.new('^' + PATTERN::X_ABS_URI + '$', #'
|
40
|
-
Regexp::EXTENDED, 'N').freeze
|
41
|
-
end
|
5
|
+
remove_const :DEFAULT_PARSER
|
6
|
+
unreserved = REGEXP::PATTERN::UNRESERVED
|
7
|
+
DEFAULT_PARSER = Parser.new(:UNRESERVED => unreserved + "\{\}")
|
42
8
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module SagePay
|
2
|
+
module Validators
|
3
|
+
VENDOR_NAME_FORMAT = /\A[A-Za-z0-9\-_]*\z/.freeze
|
4
|
+
VENDOR_TX_CODE_FORMAT = /\A[A-Za-z0-9\-_\.{}]*\z/.freeze
|
5
|
+
|
6
|
+
# The following lack the requisite accented character matchers
|
7
|
+
NAME_FORMAT = /\A[[:alpha:] \\\/&'\.\-]*\z/.freeze
|
8
|
+
ADDRESS_FORMAT = /\A[[:alnum:][:space:]\+\\\/&'\.:,\(\)\-]*\z/.freeze
|
9
|
+
|
10
|
+
POST_CODE_FORMAT = /\A[[:alnum:] -]*\z/.freeze
|
11
|
+
PHONE_FORMAT = /\A[[:alnum:] \+\(\)-]*\z/.freeze
|
12
|
+
|
13
|
+
# Basic
|
14
|
+
EMAIL_FORMAT = /@/.freeze
|
15
|
+
|
16
|
+
COUNTRY_OPTIONS = %w{AF AX AL DZ AS AD AO AI AQ AG AR AM AW AU AT AZ BS BH
|
17
|
+
BD BB BY BE BZ BJ BM BT BO BQ BA BW BV BR IO BN BG BF
|
18
|
+
BI KH CM CA CV KY CF TD CL CN CX CC CO KM CG CD CK CR
|
19
|
+
CI HR CU CW CY CZ DK DJ DM DO EC EG SV GQ ER EE ET FK
|
20
|
+
FO FJ FI FR GF PF TF GA GM GE DE GH GI GR GL GD GP GU
|
21
|
+
GT GG GN GW GY HT HM VA HN HK HU IS IN ID IR IQ IE IM
|
22
|
+
IL IT JM JP JE JO KZ KE KI KP KR KW KG LA LV LB LS LR
|
23
|
+
LY LI LT LU MO MK MG MW MY MV ML MT MH MQ MR MU YT MX
|
24
|
+
FM MD MC MN ME MS MA MZ MM NA NR NP NL NC NZ NI NE NG
|
25
|
+
NU NF MP NO OM PK PW PS PA PG PY PE PH PN PL PT PR QA
|
26
|
+
RE RO RU RW BL SH KN LC MF PM VC WS SM ST SA SN RS SC
|
27
|
+
SL SG SX SK SI SB SO ZA GS SS ES LK SD SR SJ SZ SE CH
|
28
|
+
SY TW TJ TZ TH TL TG TK TO TT TN TR TM TC TV UG UA AE
|
29
|
+
GB US UM UY UZ VU VE VN VG VI WF EH YE ZM ZW}.freeze
|
30
|
+
|
31
|
+
US_STATE_OPTIONS = %w{AL AK AZ AR CA CO CT DE DC FL GA HI ID IL IN IA KS KY
|
32
|
+
LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH
|
33
|
+
OK OR PA RI SC SD TN TX UT VT VA WA WV WI WY AS GU MP
|
34
|
+
PR VI FM MH PW AA AE AP}.freeze
|
35
|
+
end
|
36
|
+
end
|
data/sage_pay.gemspec
CHANGED
@@ -1,63 +1,52 @@
|
|
1
|
+
$: << 'lib'
|
2
|
+
require 'sage_pay/version'
|
3
|
+
|
1
4
|
Gem::Specification.new do |s|
|
2
5
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
6
|
+
s.required_ruby_version = '>= 1.9.2'
|
3
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
4
8
|
s.rubygems_version = '1.3.6'
|
5
9
|
|
6
|
-
## Leave these as is they will be modified for you by the rake gemspec task.
|
7
|
-
## If your rubyforge_project name is different, then edit it and comment out
|
8
|
-
## the sub! line in the Rakefile
|
9
10
|
s.name = 'sage_pay'
|
10
|
-
s.version =
|
11
|
-
s.date = '
|
11
|
+
s.version = SagePay::VERSION
|
12
|
+
s.date = '2012-07-21'
|
12
13
|
s.rubyforge_project = 'sage_pay'
|
13
14
|
|
14
|
-
## Make sure your summary is short. The description may be as long
|
15
|
-
## as you like.
|
16
15
|
s.summary = "Ruby implementation of the SagePay payment gateway protocol."
|
17
16
|
s.description = <<-DESCRIPTION
|
18
17
|
This is a Ruby library for integrating with SagePay. SagePay is a payment
|
19
18
|
gateway for accepting credit card payments through your web app.
|
20
19
|
DESCRIPTION
|
21
20
|
|
22
|
-
## List the primary authors. If there are a bunch of authors, it's probably
|
23
|
-
## better to set the email to an email list or something. If you don't have
|
24
|
-
## a custom homepage, consider using your GitHub URL or the like.
|
25
21
|
s.authors = ["Graeme Mathieson"]
|
26
22
|
s.email = 'mathie@woss.name'
|
27
23
|
s.homepage = 'http://github.com/mathie/sage_pay'
|
28
24
|
|
29
|
-
## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
|
30
|
-
## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
|
31
25
|
s.require_paths = %w[lib]
|
32
26
|
|
33
|
-
## Specify any RDoc options here. You'll want to add your README and
|
34
|
-
## LICENSE files to the extra_rdoc_files list.
|
35
27
|
s.rdoc_options = ["--charset=UTF-8"]
|
36
28
|
s.extra_rdoc_files = %w[README.md LICENSE]
|
37
29
|
|
38
|
-
|
39
|
-
|
40
|
-
s.add_dependency('activesupport', [">= 2.3.8"])
|
41
|
-
s.add_dependency('validatable', [">= 1.6.7"])
|
30
|
+
s.add_dependency('activesupport', [">= 3.1.3"])
|
31
|
+
s.add_dependency('activemodel', [">= 3.1.0"])
|
42
32
|
s.add_dependency('uuid', [">= 2.3.0"])
|
33
|
+
s.add_dependency('i18n', [">= 0.6.0"])
|
43
34
|
|
44
|
-
## List your development dependencies here. Development dependencies are
|
45
|
-
## those that are only needed during development
|
46
35
|
s.add_development_dependency('rspec')
|
36
|
+
s.add_development_dependency('rake')
|
47
37
|
|
48
|
-
## Leave this section as-is. It will be automatically generated from the
|
49
|
-
## contents of your Git repository via the gemspec task. DO NOT REMOVE
|
50
|
-
## THE MANIFEST COMMENTS, they are used as delimiters by the task.
|
51
|
-
# = MANIFEST =
|
52
38
|
s.files = %w[
|
39
|
+
.rbenv-version
|
40
|
+
.rspec
|
53
41
|
CHANGELOG.md
|
54
42
|
Gemfile
|
55
|
-
Gemfile.lock
|
56
43
|
LICENSE
|
57
44
|
README.md
|
58
45
|
Rakefile
|
59
46
|
TODO
|
47
|
+
config/locales/en.yml
|
60
48
|
lib/sage_pay.rb
|
49
|
+
lib/sage_pay/locale_initializer.rb
|
61
50
|
lib/sage_pay/server.rb
|
62
51
|
lib/sage_pay/server/abort.rb
|
63
52
|
lib/sage_pay/server/address.rb
|
@@ -78,8 +67,8 @@ gateway for accepting credit card payments through your web app.
|
|
78
67
|
lib/sage_pay/server/signature_verification_details.rb
|
79
68
|
lib/sage_pay/server/transaction_code.rb
|
80
69
|
lib/sage_pay/uri_fixups.rb
|
81
|
-
lib/
|
82
|
-
lib/
|
70
|
+
lib/sage_pay/validators.rb
|
71
|
+
lib/sage_pay/version.rb
|
83
72
|
sage_pay.gemspec
|
84
73
|
spec/integration/sage_pay/server_spec.rb
|
85
74
|
spec/sage_pay/server/address_spec.rb
|
@@ -96,9 +85,6 @@ gateway for accepting credit card payments through your web app.
|
|
96
85
|
spec/support/integration.rb
|
97
86
|
spec/support/validation_matchers.rb
|
98
87
|
]
|
99
|
-
# = MANIFEST =
|
100
88
|
|
101
|
-
## Test files will be grabbed from the file list. Make sure the path glob
|
102
|
-
## matches what you actually use.
|
103
89
|
s.test_files = s.files.select { |path| path =~ /^spec\/.*_spec\.rb/ }
|
104
90
|
end
|
@@ -5,8 +5,8 @@ if run_integration_specs?
|
|
5
5
|
before(:each) do
|
6
6
|
SagePay::Server.default_registration_options = {
|
7
7
|
:mode => :simulator,
|
8
|
-
:vendor => "
|
9
|
-
:notification_url =>
|
8
|
+
:vendor => ENV["VENDOR_NAME"],
|
9
|
+
:notification_url => 'http://test.host/notification'
|
10
10
|
}
|
11
11
|
end
|
12
12
|
|
@@ -106,7 +106,7 @@ if run_integration_specs?
|
|
106
106
|
|
107
107
|
describe ".deferred" do
|
108
108
|
before(:each) do
|
109
|
-
@
|
109
|
+
@deferred = SagePay::Server.deferred(
|
110
110
|
:description => "Demo payment",
|
111
111
|
:amount => 12.34,
|
112
112
|
:currency => "GBP",
|
@@ -115,21 +115,21 @@ if run_integration_specs?
|
|
115
115
|
end
|
116
116
|
|
117
117
|
it "should successfully register the deferred payment with SagePay" do
|
118
|
-
@
|
118
|
+
@deferred.run!.should_not be_nil
|
119
119
|
end
|
120
120
|
|
121
121
|
it "should be a valid deferred payment" do
|
122
|
-
registration = @
|
122
|
+
registration = @deferred.run!
|
123
123
|
registration.should be_ok
|
124
124
|
end
|
125
125
|
|
126
126
|
it "should have a next URL" do
|
127
|
-
registration = @
|
127
|
+
registration = @deferred.run!
|
128
128
|
registration.next_url.should_not be_nil
|
129
129
|
end
|
130
130
|
|
131
131
|
it "should allow us to follow the next URL and the response should be successful" do
|
132
|
-
registration = @
|
132
|
+
registration = @deferred.run!
|
133
133
|
uri = URI.parse(registration.next_url)
|
134
134
|
request = Net::HTTP::Get.new(uri.request_uri)
|
135
135
|
http = Net::HTTP.new(uri.host, uri.port)
|
@@ -140,8 +140,8 @@ if run_integration_specs?
|
|
140
140
|
end
|
141
141
|
|
142
142
|
it "should allow us to retrieve signature verification details" do
|
143
|
-
@
|
144
|
-
sig_details = @
|
143
|
+
@deferred.run!
|
144
|
+
sig_details = @deferred.signature_verification_details
|
145
145
|
|
146
146
|
sig_details.should_not be_nil
|
147
147
|
sig_details.security_key.should_not be_nil
|
@@ -103,21 +103,21 @@ describe SagePay::Server::Address do
|
|
103
103
|
it "should require a US state to be present if the country is the US" do
|
104
104
|
address = address_factory(:country => "US", :state => "")
|
105
105
|
address.should_not be_valid
|
106
|
-
address.errors
|
106
|
+
address.errors[:state].should == ["is required if the country is US"]
|
107
107
|
end
|
108
108
|
|
109
109
|
it "should require the US state to be absent if the country is not in the US" do
|
110
110
|
address = address_factory(:country => "GB", :state => "WY")
|
111
111
|
address.should_not be_valid
|
112
|
-
address.errors
|
112
|
+
address.errors[:state].should == ["is present but the country is not US"]
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should validate the state against a list of US states" do
|
116
116
|
address = address_factory(:country => "US", :state => "WY")
|
117
117
|
address.should be_valid
|
118
|
-
address = address_factory(:country => "US", :state => "
|
118
|
+
address = address_factory(:country => "US", :state => "AB")
|
119
119
|
address.should_not be_valid
|
120
|
-
address.errors
|
120
|
+
address.errors[:state].should == ["is not a US state"]
|
121
121
|
end
|
122
122
|
|
123
123
|
it "should validate the country against a list of ISO 3166-1 country codes" do
|
@@ -125,7 +125,7 @@ describe SagePay::Server::Address do
|
|
125
125
|
address.should be_valid
|
126
126
|
address = address_factory(:country => "AA")
|
127
127
|
address.should_not be_valid
|
128
|
-
address.errors
|
128
|
+
address.errors[:country].should == ["is not an ISO3166-1 country code"]
|
129
129
|
end
|
130
130
|
end
|
131
131
|
end
|
@@ -22,7 +22,7 @@ describe NotificationResponse do
|
|
22
22
|
|
23
23
|
notification_response = notification_response_factory(:status => :invalid, :status_detail => "")
|
24
24
|
notification_response.should_not be_valid
|
25
|
-
notification_response.errors
|
25
|
+
notification_response.errors[:status_detail].should include("can't be empty")
|
26
26
|
end
|
27
27
|
|
28
28
|
it { validates_the_length_of(:notification_response, :redirect_url, :max => 255) }
|
@@ -40,7 +40,7 @@ describe NotificationResponse do
|
|
40
40
|
|
41
41
|
notification_response = notification_response_factory(:status => :chickens)
|
42
42
|
notification_response.should_not be_valid
|
43
|
-
notification_response.errors
|
43
|
+
notification_response.errors[:status].should include("is not in the list")
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -71,11 +71,11 @@ describe Registration do
|
|
71
71
|
|
72
72
|
registration = registration_factory(:amount => "0.00")
|
73
73
|
registration.should_not be_valid
|
74
|
-
registration.errors
|
74
|
+
registration.errors[:amount].should include("is less than the minimum value (0.01)")
|
75
75
|
|
76
76
|
registration = registration_factory(:amount => "-23")
|
77
77
|
registration.should_not be_valid
|
78
|
-
registration.errors
|
78
|
+
registration.errors[:amount].should include("is less than the minimum value (0.01)")
|
79
79
|
end
|
80
80
|
|
81
81
|
it "should allow the amount to be a maximum of 100,000.00" do
|
@@ -84,11 +84,11 @@ describe Registration do
|
|
84
84
|
|
85
85
|
registration = registration_factory(:amount => "100000.01")
|
86
86
|
registration.should_not be_valid
|
87
|
-
registration.errors
|
87
|
+
registration.errors[:amount].should include("is greater than the maximum value (100,000.00)")
|
88
88
|
|
89
89
|
registration = registration_factory(:amount => "123456")
|
90
90
|
registration.should_not be_valid
|
91
|
-
registration.errors
|
91
|
+
registration.errors[:amount].should include("is greater than the maximum value (100,000.00)")
|
92
92
|
end
|
93
93
|
|
94
94
|
it "should allow the transaction type to be one of :payment, :deferred or :authenticate" do
|
@@ -103,7 +103,7 @@ describe Registration do
|
|
103
103
|
|
104
104
|
registration = registration_factory(:tx_type => :chickens)
|
105
105
|
registration.should_not be_valid
|
106
|
-
registration.errors
|
106
|
+
registration.errors[:tx_type].should include("is not in the list")
|
107
107
|
end
|
108
108
|
|
109
109
|
it "should allow the mode to be one of :simulator, :test or :live" do
|
@@ -118,7 +118,7 @@ describe Registration do
|
|
118
118
|
|
119
119
|
registration = registration_factory(:mode => :chickens)
|
120
120
|
registration.should_not be_valid
|
121
|
-
registration.errors
|
121
|
+
registration.errors[:mode].should include("is not in the list")
|
122
122
|
end
|
123
123
|
|
124
124
|
it "should allow the gift aid setting to be true or false" do
|
@@ -130,7 +130,7 @@ describe Registration do
|
|
130
130
|
|
131
131
|
registration = registration_factory(:allow_gift_aid => "chickens")
|
132
132
|
registration.should_not be_valid
|
133
|
-
registration.errors
|
133
|
+
registration.errors[:allow_gift_aid].should include("is not in the list")
|
134
134
|
end
|
135
135
|
|
136
136
|
it "should allow apply_avs_cv2 to be 0 through 3 (see docs for what that means)" do
|
@@ -148,7 +148,7 @@ describe Registration do
|
|
148
148
|
|
149
149
|
registration = registration_factory(:apply_avs_cv2 => 4)
|
150
150
|
registration.should_not be_valid
|
151
|
-
registration.errors
|
151
|
+
registration.errors[:apply_avs_cv2].should include("is not in the list")
|
152
152
|
end
|
153
153
|
|
154
154
|
it "should allow apply_3d_secure to be 0 through 3 (see docs for what that means)" do
|
@@ -166,7 +166,7 @@ describe Registration do
|
|
166
166
|
|
167
167
|
registration = registration_factory(:apply_3d_secure => 4)
|
168
168
|
registration.should_not be_valid
|
169
|
-
registration.errors
|
169
|
+
registration.errors[:apply_3d_secure].should include("is not in the list")
|
170
170
|
end
|
171
171
|
|
172
172
|
it "should allow profile to be normal or low" do
|
@@ -178,7 +178,7 @@ describe Registration do
|
|
178
178
|
|
179
179
|
registration = registration_factory(:profile => :chickens)
|
180
180
|
registration.should_not be_valid
|
181
|
-
registration.errors
|
181
|
+
registration.errors[:profile].should include("is not in the list")
|
182
182
|
end
|
183
183
|
|
184
184
|
it "should allow billing_agreement to be true or false" do
|
@@ -190,7 +190,7 @@ describe Registration do
|
|
190
190
|
|
191
191
|
registration = registration_factory(:billing_agreement => "chickens")
|
192
192
|
registration.should_not be_valid
|
193
|
-
registration.errors
|
193
|
+
registration.errors[:billing_agreement].should include("is not in the list")
|
194
194
|
end
|
195
195
|
|
196
196
|
it "should allow the account type to be one of ecommerce, continuous authority or mail order" do
|
@@ -205,7 +205,7 @@ describe Registration do
|
|
205
205
|
|
206
206
|
registration = registration_factory(:account_type => :chickens)
|
207
207
|
registration.should_not be_valid
|
208
|
-
registration.errors
|
208
|
+
registration.errors[:account_type].should include("is not in the list")
|
209
209
|
end
|
210
210
|
end
|
211
211
|
|
@@ -512,7 +512,7 @@ describe Registration do
|
|
512
512
|
it "should raise an exception to say that we couldn't talk to SagePay" do
|
513
513
|
lambda {
|
514
514
|
@registration.run!
|
515
|
-
}.should raise_error RuntimeError,
|
515
|
+
}.should raise_error RuntimeError, /I guess SagePay doesn't like us today/
|
516
516
|
end
|
517
517
|
end
|
518
518
|
|
@@ -5,8 +5,8 @@ describe SagePay::Server do
|
|
5
5
|
before(:each) do
|
6
6
|
SagePay::Server.default_registration_options = {
|
7
7
|
:mode => :test,
|
8
|
-
:vendor =>
|
9
|
-
:notification_url =>
|
8
|
+
:vendor => 'dummyvendor',
|
9
|
+
:notification_url => 'http://test.host/notification'
|
10
10
|
}
|
11
11
|
end
|
12
12
|
|
@@ -18,8 +18,8 @@ describe SagePay::Server do
|
|
18
18
|
|
19
19
|
payment = SagePay::Server.payment
|
20
20
|
payment.mode.should == :test
|
21
|
-
payment.vendor.should ==
|
22
|
-
payment.notification_url.should ==
|
21
|
+
payment.vendor.should == 'dummyvendor'
|
22
|
+
payment.notification_url.should == 'http://test.host/notification'
|
23
23
|
end
|
24
24
|
|
25
25
|
it "should generate a vendor transaction code automatically" do
|
data/spec/sage_pay_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
|
2
|
+
|
3
|
+
if ENV['COVERAGE']
|
4
|
+
require 'simplecov'
|
5
|
+
SimpleCov.start do
|
6
|
+
add_filter '/spec/'
|
7
|
+
end
|
8
|
+
end
|
3
9
|
|
4
10
|
$: << File.join(File.dirname(__FILE__), '..', 'lib')
|
5
11
|
require 'sage_pay'
|
@@ -8,7 +14,7 @@ require 'sage_pay'
|
|
8
14
|
# in ./support/ and its subdirectories.
|
9
15
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
10
16
|
|
11
|
-
|
17
|
+
RSpec.configure do |config|
|
12
18
|
config.include(Factories)
|
13
19
|
config.include(ValidationMatchers)
|
14
20
|
end
|