klarna-xmlrpc 0.2.0
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.
- checksums.yaml +7 -0
- data/.travis.yml +13 -0
- data/Gemfile +14 -0
- data/Guardfile +16 -0
- data/MIT-LICENSE +20 -0
- data/README.textile +139 -0
- data/Rakefile +22 -0
- data/TODO +30 -0
- data/examples/Gemfile +8 -0
- data/examples/config/initializer.rb +15 -0
- data/examples/console.rb +71 -0
- data/examples/public/images/klarna.png +0 -0
- data/examples/public/images/ruby.png +0 -0
- data/examples/views/_address.haml +22 -0
- data/examples/views/_articles.haml +21 -0
- data/examples/views/checkout_page_example.haml +2 -0
- data/examples/views/essential/add_transaction/_form.haml +32 -0
- data/examples/views/essential/add_transaction/result.haml +7 -0
- data/examples/views/essential/calculate_monthly_cost/_form.haml +16 -0
- data/examples/views/essential/calculate_monthly_cost/result.haml +7 -0
- data/examples/views/essential/get_addresses/_form.haml +9 -0
- data/examples/views/essential/get_addresses/result.haml +8 -0
- data/examples/views/index.haml +296 -0
- data/examples/views/layout.haml +48 -0
- data/examples/views/payment_terms_example.haml +102 -0
- data/examples/views/product_page_example.haml +2 -0
- data/examples/views/reservation/activate_reservation/_form.haml +54 -0
- data/examples/views/reservation/activate_reservation/result.haml +7 -0
- data/examples/views/reservation/cancel_reservation/_form.haml +8 -0
- data/examples/views/reservation/cancel_reservation/result.haml +7 -0
- data/examples/views/reservation/change_reservation/_form.haml +10 -0
- data/examples/views/reservation/change_reservation/result.haml +7 -0
- data/examples/views/reservation/reserve_amount/_form.haml +58 -0
- data/examples/views/reservation/reserve_amount/result.haml +7 -0
- data/examples/views/reservation/reserve_ocr_numbers/_form.haml +8 -0
- data/examples/views/reservation/reserve_ocr_numbers/result.haml +7 -0
- data/examples/views/reservation/split_reservation/_form.haml +14 -0
- data/examples/views/reservation/split_reservation/result.haml +7 -0
- data/examples/views/special/get_pclasses/_form.haml +8 -0
- data/examples/views/special/get_pclasses/result.haml +7 -0
- data/examples/views/special/invoice_address/_form.haml +8 -0
- data/examples/views/special/invoice_address/result.haml +7 -0
- data/examples/views/special/invoice_amount/_form.haml +8 -0
- data/examples/views/special/invoice_amount/result.haml +7 -0
- data/examples/views/special/is_invoice_paid/_form.haml +8 -0
- data/examples/views/special/is_invoice_paid/result.haml +7 -0
- data/examples/views/special/update_charge_amount/_form.haml +15 -0
- data/examples/views/special/update_charge_amount/result.haml +7 -0
- data/examples/views/special/update_goods_quantity/_form.haml +17 -0
- data/examples/views/special/update_goods_quantity/result.haml +7 -0
- data/examples/views/special/update_order_number/_form.haml +10 -0
- data/examples/views/special/update_order_number/result.haml +7 -0
- data/examples/views/useful/activate_invoice/_form.haml +9 -0
- data/examples/views/useful/activate_invoice/result.haml +7 -0
- data/examples/views/useful/credit_invoice/_form.haml +11 -0
- data/examples/views/useful/credit_invoice/result.haml +7 -0
- data/examples/views/useful/delete_invoice/_form.haml +9 -0
- data/examples/views/useful/delete_invoice/result.haml +7 -0
- data/examples/views/useful/email_invoice/_form.haml +9 -0
- data/examples/views/useful/email_invoice/result.haml +7 -0
- data/examples/views/useful/has_account/_form.haml +9 -0
- data/examples/views/useful/has_account/result.haml +7 -0
- data/examples/views/useful/return_amount/_form.haml +15 -0
- data/examples/views/useful/return_amount/result.haml +7 -0
- data/examples/views/useful/send_invoice/_form.haml +9 -0
- data/examples/views/useful/send_invoice/result.haml +7 -0
- data/examples/web.rb +349 -0
- data/klarna.gemspec +34 -0
- data/lib/klarna.rb +171 -0
- data/lib/klarna/api.rb +187 -0
- data/lib/klarna/api/client.rb +126 -0
- data/lib/klarna/api/constants.rb +647 -0
- data/lib/klarna/api/errors.rb +154 -0
- data/lib/klarna/api/methods.rb +16 -0
- data/lib/klarna/api/methods/cost_calculations.rb +134 -0
- data/lib/klarna/api/methods/invoicing.rb +304 -0
- data/lib/klarna/api/methods/reservation.rb +188 -0
- data/lib/klarna/api/methods/standard.rb +126 -0
- data/lib/klarna/version.rb +5 -0
- data/test/fixtures/api/companies.yml +97 -0
- data/test/fixtures/api/pclasses.yml +37 -0
- data/test/fixtures/api/persons.yml +144 -0
- data/test/fixtures/api/stores.yml +6 -0
- data/test/fixtures/klarna.yml +10 -0
- data/test/klarna/api/client_test.rb +288 -0
- data/test/klarna/api/errors_test.rb +34 -0
- data/test/klarna/api/methods/cost_calculations_test.rb +78 -0
- data/test/klarna/api/methods/invoicing_test.rb +409 -0
- data/test/klarna/api/methods/reservation_test.rb +66 -0
- data/test/klarna/api/methods/standard_test.rb +244 -0
- data/test/klarna/api_test.rb +184 -0
- data/test/klarna_test.rb +204 -0
- data/test/support/assertions_helper.rb +40 -0
- data/test/test_helper.rb +55 -0
- metadata +335 -0
@@ -0,0 +1,144 @@
|
|
1
|
+
# Here are Klarnas test PERSONS.
|
2
|
+
# All approved persons have unlimited credit and the system will never accept purchases from the not approved ones.
|
3
|
+
#
|
4
|
+
# Purchases done with the test persons will be displayed in Klarna Online as regular invoices, although they will
|
5
|
+
# unvisible unless you have "Yes" selected next to "Display test invoices" when searching for invoices.
|
6
|
+
#
|
7
|
+
# We will not pay for the invoices created with the test persons nor companies and we will not collect any fees as well.
|
8
|
+
|
9
|
+
persons:
|
10
|
+
se:
|
11
|
+
approved:
|
12
|
+
pno: "4304158399"
|
13
|
+
first_name: "Karl"
|
14
|
+
last_name: "Lidin"
|
15
|
+
street_address: "Junibackg. 42"
|
16
|
+
postal_code: "23634"
|
17
|
+
city: "Hollviken"
|
18
|
+
country: "SE"
|
19
|
+
cell_phone: "076 526 00 00"
|
20
|
+
currency: "SEK"
|
21
|
+
language: "SV"
|
22
|
+
unapproved:
|
23
|
+
pno: "5311096845"
|
24
|
+
first_name: "Maud"
|
25
|
+
last_name: "Johansson"
|
26
|
+
street_address: "Köpmansgatan 7"
|
27
|
+
postal_code: "12149"
|
28
|
+
city: "Johanneshov"
|
29
|
+
country: "SE"
|
30
|
+
cell_phone: "076 526 00 00"
|
31
|
+
currency: "SEK"
|
32
|
+
language: "SV"
|
33
|
+
|
34
|
+
no:
|
35
|
+
approved:
|
36
|
+
pno: "18106500157"
|
37
|
+
first_name: "Petter"
|
38
|
+
last_name: "Testmann"
|
39
|
+
street_address: "Hundremeterskogen 100"
|
40
|
+
postal_code: "0563"
|
41
|
+
city: "Oslo"
|
42
|
+
country: "NO"
|
43
|
+
cell_phone: "40 123 456"
|
44
|
+
currency: "NOK"
|
45
|
+
language: "NO"
|
46
|
+
unapproved:
|
47
|
+
pno: "18106500076"
|
48
|
+
first_name: "Petra"
|
49
|
+
last_name: "Testdame"
|
50
|
+
street_address: "Sofienberggate 56"
|
51
|
+
postal_code: "0563"
|
52
|
+
city: "Oslo"
|
53
|
+
country: "NO"
|
54
|
+
cell_phone: "40 123 456"
|
55
|
+
currency: "NOK"
|
56
|
+
language: "NO"
|
57
|
+
|
58
|
+
dk:
|
59
|
+
approved:
|
60
|
+
pno: "0505610059"
|
61
|
+
first_name: "Rasmus Jens-Peter"
|
62
|
+
last_name: "Lybert"
|
63
|
+
street_address: "Godthåbvej 8,-2"
|
64
|
+
postal_code: "3900"
|
65
|
+
city: "Godthåb"
|
66
|
+
country: "DK"
|
67
|
+
cell_phone: "20 123 456"
|
68
|
+
currency: "DKK"
|
69
|
+
language: "DA"
|
70
|
+
unapproved:
|
71
|
+
# N/A
|
72
|
+
|
73
|
+
# fi:
|
74
|
+
# approved:
|
75
|
+
# pno: "230246-8989"
|
76
|
+
# first_name: "Suvi"
|
77
|
+
# last_name: "Aurinkoinen"
|
78
|
+
# street_address: "Planeettatie 2"
|
79
|
+
# postal_code: "01450"
|
80
|
+
# city: "Vantaa"
|
81
|
+
# country: "FI"
|
82
|
+
# cell_phone: "0401234567
|
83
|
+
# currency: "EUR"
|
84
|
+
# language: "FI"
|
85
|
+
# unapproved:
|
86
|
+
# pno: "010130-887T"
|
87
|
+
# first_name: "Mikael"
|
88
|
+
# last_name: "Miehinen"
|
89
|
+
# street_address: "Tikkuritie 11"
|
90
|
+
# postal_code: "01370"
|
91
|
+
# city: "Vantaa"
|
92
|
+
# country: "FI"
|
93
|
+
# cell_phone: "0401234567"
|
94
|
+
# currency: "EUR"
|
95
|
+
# language: "FI"
|
96
|
+
#
|
97
|
+
de:
|
98
|
+
approved:
|
99
|
+
pno: "070719601"
|
100
|
+
first_name: "Uno"
|
101
|
+
last_name: "Eins"
|
102
|
+
street_address: "Hellersbergstrasse 14"
|
103
|
+
postal_code: "41460"
|
104
|
+
city: "Neuss"
|
105
|
+
country: "DE"
|
106
|
+
cell_phone: "015 2211 3356"
|
107
|
+
currency: "EUR"
|
108
|
+
language: "DE"
|
109
|
+
unapproved:
|
110
|
+
pno: "07071950"
|
111
|
+
first_name: "Uno"
|
112
|
+
last_name: "Vier"
|
113
|
+
street_address: "Hellersbergstrasse 14"
|
114
|
+
postal_code: "41460"
|
115
|
+
city: "Neuss"
|
116
|
+
cell_phone: "015 2211 3356"
|
117
|
+
country: "DE"
|
118
|
+
currency: "EUR"
|
119
|
+
language: "DE"
|
120
|
+
|
121
|
+
nl:
|
122
|
+
approved:
|
123
|
+
pno:
|
124
|
+
first_name: "Test"
|
125
|
+
last_name: "Persoon"
|
126
|
+
street_address: "Neherkade 1"
|
127
|
+
postal_code: "2521VA"
|
128
|
+
city: "Gravenhage"
|
129
|
+
country: "NL"
|
130
|
+
cell_phone: "0612345678"
|
131
|
+
currency: "EUR"
|
132
|
+
language: "NL"
|
133
|
+
unapproved:
|
134
|
+
# Only a few details available.
|
135
|
+
pno:
|
136
|
+
first_name:
|
137
|
+
last_name:
|
138
|
+
street_address:
|
139
|
+
postal_code:
|
140
|
+
city:
|
141
|
+
country: "NL"
|
142
|
+
cell_phone: "0612345678"
|
143
|
+
currency: "EUR"
|
144
|
+
language: "NL"
|
@@ -0,0 +1,288 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
describe Klarna::API::Client do
|
5
|
+
|
6
|
+
before do
|
7
|
+
Klarna.reset!
|
8
|
+
@client = Klarna::API::Client.new(VALID_STORE_ID, VALID_STORE_SECRET)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'Initialization' do
|
12
|
+
it 'should require store-ID and store-secret' do
|
13
|
+
assert_raises(Klarna::API::Errors::KlarnaCredentialsError) do
|
14
|
+
@client = Klarna::API::Client.new
|
15
|
+
end
|
16
|
+
|
17
|
+
assert_raises(Klarna::API::Errors::KlarnaCredentialsError) do
|
18
|
+
@client = Klarna::API::Client.new(VALID_STORE_ID)
|
19
|
+
end
|
20
|
+
|
21
|
+
assert @client = Klarna::API::Client.new(VALID_STORE_ID, VALID_STORE_SECRET)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "Configuration" do
|
26
|
+
describe "Configurable" do
|
27
|
+
|
28
|
+
describe '#store_id' do
|
29
|
+
it 'should be defined' do
|
30
|
+
assert_respond_to @client, :store_id
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#store_secret' do
|
35
|
+
it 'should be defined' do
|
36
|
+
assert_respond_to @client, :store_secret
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#mode' do
|
41
|
+
it 'should be defined' do
|
42
|
+
assert_respond_to @client, :mode
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should have default value: :test' do
|
46
|
+
assert_equal :test, Klarna::API::Client.new(VALID_STORE_ID, VALID_STORE_SECRET).mode
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should use default value unless specified' do
|
50
|
+
swap Klarna, :mode => :test do
|
51
|
+
client = Klarna::API::Client.new(VALID_STORE_ID, VALID_STORE_SECRET)
|
52
|
+
assert_equal :test, client.mode
|
53
|
+
end
|
54
|
+
|
55
|
+
swap Klarna, :mode => :production do
|
56
|
+
client = Klarna::API::Client.new(VALID_STORE_ID, VALID_STORE_SECRET)
|
57
|
+
assert_equal :production, client.mode
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'could override default value' do
|
62
|
+
swap Klarna, :mode => :test do
|
63
|
+
client = Klarna::API::Client.new(VALID_STORE_ID, VALID_STORE_SECRET, :mode => :production)
|
64
|
+
assert_equal :production, client.mode
|
65
|
+
end
|
66
|
+
|
67
|
+
swap Klarna, :mode => :production do
|
68
|
+
client = Klarna::API::Client.new(VALID_STORE_ID, VALID_STORE_SECRET, :mode => :test)
|
69
|
+
assert_equal :test, client.mode
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#timeout' do
|
75
|
+
it 'should be defined' do
|
76
|
+
assert_respond_to @client, :timeout
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should have default value: 10 seconds' do
|
80
|
+
assert_equal 10, @client.timeout
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "Mode-specific Attributes" do
|
86
|
+
describe '#ssl?' do
|
87
|
+
it 'should be defined' do
|
88
|
+
assert_respond_to @client, :ssl?
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'should be true only if protocol is HTTPS' do
|
92
|
+
# TODO
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "Autodetected attributes" do
|
97
|
+
describe '#protocol' do
|
98
|
+
it 'should be defined' do
|
99
|
+
assert_respond_to @client, :protocol
|
100
|
+
end
|
101
|
+
|
102
|
+
describe 'mode: test' do
|
103
|
+
before do
|
104
|
+
@client.mode = :test
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should be: http' do
|
108
|
+
assert_equal 'http', @client.protocol
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe 'mode: test' do
|
113
|
+
before do
|
114
|
+
@client.mode = :production
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'should be: https' do
|
118
|
+
assert_equal 'https', @client.protocol
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe '#host' do
|
124
|
+
it 'should be defined' do
|
125
|
+
assert_respond_to @client, :host
|
126
|
+
end
|
127
|
+
|
128
|
+
describe 'mode: test' do
|
129
|
+
before do
|
130
|
+
@client.mode = :test
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'should be: beta-test.klarna.com' do
|
134
|
+
assert_equal @client.host, 'payment-beta.klarna.com'
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe 'mode: production' do
|
139
|
+
before do
|
140
|
+
@client.mode = :production
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'should be: payment.klarna.com' do
|
144
|
+
assert_equal @client.host, 'payment.klarna.com'
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe '#port' do
|
150
|
+
it 'should be defined' do
|
151
|
+
assert_respond_to @client, :port
|
152
|
+
end
|
153
|
+
|
154
|
+
describe 'mode: test' do
|
155
|
+
before do
|
156
|
+
@client.mode = :test
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'should be: 80' do
|
160
|
+
assert_equal 80, @client.port
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
describe 'mode: production' do
|
165
|
+
before do
|
166
|
+
@client.mode = :production
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'should be: 443' do
|
170
|
+
assert_equal 443, @client.port
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
describe '#endpoint_uri' do
|
176
|
+
describe 'mode: test' do
|
177
|
+
before do
|
178
|
+
@client.mode = :test
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'should be: http://beta-test.klarna.com:80' do
|
182
|
+
assert_equal 'http://payment-beta.klarna.com:80', @client.endpoint_uri
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
describe 'mode: production' do
|
187
|
+
before do
|
188
|
+
@client.mode = :production
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'should be: https://payment.klarna.com:443' do
|
192
|
+
assert_equal 'https://payment.klarna.com:443', @client.endpoint_uri
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
describe "Helpers" do
|
202
|
+
|
203
|
+
describe '#call' do
|
204
|
+
it 'should be defined' do
|
205
|
+
assert_respond_to @client, :call
|
206
|
+
end
|
207
|
+
|
208
|
+
it 'should raise Klarna service error for dummie method: -99' do
|
209
|
+
assert_raises Klarna::API::Errors::KlarnaServiceError do
|
210
|
+
begin
|
211
|
+
@client.call(:hello)
|
212
|
+
rescue Klarna::API::Errors::KlarnaServiceError => e
|
213
|
+
assert_equal -99, e.error_code
|
214
|
+
raise e
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
describe '#digest' do
|
221
|
+
it 'should be defined' do
|
222
|
+
assert_respond_to @client, :digest
|
223
|
+
end
|
224
|
+
|
225
|
+
describe 'default behaviour' do
|
226
|
+
it 'should calculate a valid digest secret for one value' do
|
227
|
+
swap @client, :store_id => 123, :store_secret => "secret" do
|
228
|
+
assert_equal ::Klarna::API.digest(123, "value 123", "secret"), @client.send(:digest, "value 123")
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
it 'should calculate a valid digest secret for an array of values' do
|
233
|
+
swap @client, :store_id => 123, :store_secret => "secret" do
|
234
|
+
assert_equal ::Klarna::API.digest(123, "value 1", "value 2", "value 3", "secret"), @client.send(:digest, "value 1", "value 2", "value 3")
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
describe 'without estore-ID - some methods apparently need this' do
|
240
|
+
it 'should calculate a valid digest secret for one value' do
|
241
|
+
swap @client, :store_id => 123, :store_secret => "secret" do
|
242
|
+
assert_equal ::Klarna::API.digest("value 123", "secret"), @client.send(:digest, "value 123", :store_id => false)
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
it 'should calculate a valid digest secret for an array of values' do
|
247
|
+
swap @client, :store_id => 123, :store_secret => "secret" do
|
248
|
+
assert_equal ::Klarna::API.digest("value 1", "value 2", "value 3", "secret"), @client.send(:digest, "value 1", "value 2", "value 3", :store_id => false)
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
describe '#content_type_headers' do
|
255
|
+
it 'should be defined' do
|
256
|
+
assert_respond_to @client, :content_type_headers
|
257
|
+
end
|
258
|
+
|
259
|
+
it 'should have header: Accept-Charset: iso-8859-1' do
|
260
|
+
assert_equal 'iso-8859-1', @client.send(:content_type_headers)['Accept-Charset']
|
261
|
+
end
|
262
|
+
|
263
|
+
it 'should have header: Content-Type: text/xml;charset=iso-8859-1' do
|
264
|
+
assert_equal 'text/xml;charset=iso-8859-1', @client.send(:'content_type_headers')['Content-Type']
|
265
|
+
end
|
266
|
+
|
267
|
+
it 'should have header: Connection: close' do
|
268
|
+
assert_equal 'close', @client.send(:content_type_headers)['Connection']
|
269
|
+
end
|
270
|
+
|
271
|
+
it 'should have header: Accept-Charset: iso-8859-1' do
|
272
|
+
assert_equal 'ruby/xmlrpc', @client.send(:content_type_headers)['User-Agent']
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
describe '#add_meta_params' do
|
277
|
+
it 'should be defined' do
|
278
|
+
assert_respond_to @client, :add_meta_params
|
279
|
+
end
|
280
|
+
|
281
|
+
it %Q{should push default RPC-params/arguments: protocol version + client version ("1.0", "#{::XMLRPC::Client::USER_AGENT}")} do
|
282
|
+
assert_equal ["#{::Klarna::API::PROTOCOL_VERSION}", "#{::XMLRPC::Client::USER_AGENT}"], @client.send(:add_meta_params)
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
end
|
287
|
+
|
288
|
+
end
|