klarna 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/.gitignore +9 -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 +175 -0
- data/lib/klarna/api.rb +170 -0
- data/lib/klarna/api/client.rb +128 -0
- data/lib/klarna/api/constants.rb +638 -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 +149 -0
- data/lib/klarna/api/methods/standard.rb +123 -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 +272 -0
- data/test/klarna/api/errors_test.rb +46 -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 +137 -0
- data/test/klarna_test.rb +204 -0
- data/test/support/assertions_helper.rb +40 -0
- data/test/test_helper.rb +55 -0
- metadata +312 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'test_helper'
|
|
3
|
+
|
|
4
|
+
describe Klarna::API::Methods::Reservation do
|
|
5
|
+
|
|
6
|
+
# TODO: Mock responses using VCR.
|
|
7
|
+
|
|
8
|
+
before do
|
|
9
|
+
valid_credentials!
|
|
10
|
+
@client = Klarna::API::Client.new
|
|
11
|
+
|
|
12
|
+
@protocol_version = ::Klarna::API::PROTOCOL_VERSION.to_s
|
|
13
|
+
@user_agent = ::XMLRPC::Client::USER_AGENT.to_s
|
|
14
|
+
|
|
15
|
+
expose_protected_methods_in @client.class
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Spec: http://integration.klarna.com/en/api/advanced-integration/functions/reserveamount
|
|
19
|
+
describe '#reserve_amount' do
|
|
20
|
+
it 'should be defined' do
|
|
21
|
+
assert_respond_to @client, :reserve_amount
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Spec: http://integration.klarna.com/en/api/advanced-integration/functions/activatereservation
|
|
26
|
+
describe '#activate_reservation' do
|
|
27
|
+
it 'should be defined' do
|
|
28
|
+
assert_respond_to @client, :activate_reservation
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Spec: http://integration.klarna.com/en/api/advanced-integration/functions/cancelreservation
|
|
33
|
+
describe '#cancel_reservation' do
|
|
34
|
+
it 'should be defined' do
|
|
35
|
+
assert_respond_to @client, :cancel_reservation
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe '#split_reservation' do
|
|
40
|
+
it 'should be defined' do
|
|
41
|
+
assert_respond_to @client, :split_reservation
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Spec: http://integration.klarna.com/en/api/advanced-integration/functions/changereservation
|
|
46
|
+
describe '#change_reservation' do
|
|
47
|
+
it 'should be defined' do
|
|
48
|
+
assert_respond_to @client, :change_reservation
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Spec: http://integration.klarna.com/en/api/advanced-integration/functions/reserveocrnums
|
|
53
|
+
describe '#reserve_ocr_numbers' do
|
|
54
|
+
it 'should be defined' do
|
|
55
|
+
assert_respond_to @client, :reserve_ocr_numbers
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# http://integration.klarna.com/en/api/advanced-integration/functions/mkaddress
|
|
60
|
+
describe '#make_reservation_address' do
|
|
61
|
+
it 'should be defined' do
|
|
62
|
+
assert_respond_to @client, :make_reservation_address
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'test_helper'
|
|
3
|
+
|
|
4
|
+
describe Klarna::API::Methods::Standard do
|
|
5
|
+
|
|
6
|
+
# TODO: Mock responses using VCR.
|
|
7
|
+
|
|
8
|
+
before do
|
|
9
|
+
valid_credentials!
|
|
10
|
+
@klarna = Klarna::API::Client.new
|
|
11
|
+
@klarna.client_ip = '127.0.0.1'
|
|
12
|
+
|
|
13
|
+
@protocol_version = ::Klarna::API::PROTOCOL_VERSION.to_s
|
|
14
|
+
@user_agent = ::XMLRPC::Client::USER_AGENT.to_s
|
|
15
|
+
|
|
16
|
+
@pno_format_sweden = ::Klarna::API::COUNTRIES[:SE]
|
|
17
|
+
@country_sweden = ::Klarna::API::COUNTRIES[:SE]
|
|
18
|
+
|
|
19
|
+
expose_protected_methods_in @klarna.class
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Spec:
|
|
23
|
+
# http://integration.klarna.com/en/api/standard-integration/functions/getaddresses
|
|
24
|
+
describe '#get_addresses' do
|
|
25
|
+
it 'should be defined' do
|
|
26
|
+
assert_respond_to @klarna, :get_addresses
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# it 'should require: pno, country'
|
|
30
|
+
|
|
31
|
+
it 'should handle pno-format as integer (pno-format ID)' do
|
|
32
|
+
assert @klarna.get_addresses("4304158399", 2) # a.k.a. ::Klarna::API::PNO_FORMATS[:SE]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'should handle pno-format as integer (pno-format ID)' do
|
|
36
|
+
assert @klarna.get_addresses("4304158399", :SE)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# it 'should pre-validate the specified pno, and raise validation error if it s invalid without any service call'
|
|
40
|
+
|
|
41
|
+
describe "SE" do
|
|
42
|
+
it 'should return address for a valid pno' do
|
|
43
|
+
result = @klarna.get_addresses("4304158399", :SE)
|
|
44
|
+
assert_equal [@protocol_version, @user_agent, "4304158399", @klarna.store_id, @klarna.digest("4304158399"), 2, 5, '127.0.0.1'], @klarna.last_request_params
|
|
45
|
+
assert_equal [["Karl", "Lidin", "Junibacksg 42", "23634", "Hollviken", 209]], result
|
|
46
|
+
|
|
47
|
+
result = @klarna.get_addresses("5311096845", :SE)
|
|
48
|
+
assert_equal [@protocol_version, @user_agent, "5311096845", @klarna.store_id, @klarna.digest("5311096845"), 2, 5, '127.0.0.1'], @klarna.last_request_params
|
|
49
|
+
assert_equal [["Maud", "Johansson", "Köpmansg 7", "12149", "Johanneshov", 209]], result
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'should ignore format symbols in pno' do
|
|
53
|
+
result = @klarna.get_addresses("430415-8399", :SE)
|
|
54
|
+
assert_equal [@protocol_version, @user_agent, "4304158399", @klarna.store_id, @klarna.digest("4304158399"), 2, 5, '127.0.0.1'], @klarna.last_request_params
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe '#get_address' do
|
|
60
|
+
it 'should be defined' do
|
|
61
|
+
assert_respond_to @klarna, :get_address
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'should only return first returned address for a valid SSN' do
|
|
65
|
+
result = @klarna.get_address("4304158399", :SE)
|
|
66
|
+
assert_equal ["Karl", "Lidin", "Junibacksg 42", "23634", "Hollviken", 209], result
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Spec:
|
|
71
|
+
# http://integration.klarna.com/en/api/standard-integration/functions/mkaddr
|
|
72
|
+
describe '#make_address' do
|
|
73
|
+
it 'should be defined' do
|
|
74
|
+
assert_respond_to @klarna, :make_address
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe "SE" do
|
|
78
|
+
it 'should generate an valid address array' do
|
|
79
|
+
assert_equal ({
|
|
80
|
+
'careof' => "c/o Lidin",
|
|
81
|
+
'street' => "Junibackg. 42",
|
|
82
|
+
'postno' => "23634",
|
|
83
|
+
'city' => "Hollviken",
|
|
84
|
+
'country' => 209,
|
|
85
|
+
'telno' => "0765260000",
|
|
86
|
+
'cellno' => "0765260000",
|
|
87
|
+
'email' => "karl.lidin@klarna.com"
|
|
88
|
+
}),
|
|
89
|
+
@klarna.make_address("c/o Lidin", "Junibackg. 42", "23634", "Hollviken", :SE, "076 526 00 00", "076 526 00 00", "karl.lidin@klarna.com")
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# TODO
|
|
93
|
+
describe 'argument constraints: raise argument error if not true (no API-call)' do
|
|
94
|
+
describe 'care_of' do
|
|
95
|
+
# it 'should be a string or nil'
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
describe 'street' do
|
|
99
|
+
# it 'should be a string'
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
describe 'postal code' do
|
|
103
|
+
# it 'should be a string/integer'
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
describe 'city' do
|
|
107
|
+
# it 'should be a string'
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
describe 'country' do
|
|
111
|
+
# it 'should be a string/symbol/integer (-> valid Klarna country ID)'
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
describe 'phone' do
|
|
115
|
+
# it 'should be a string/integer'
|
|
116
|
+
|
|
117
|
+
# it 'should ignore whitespace'
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
describe 'cell_phone' do
|
|
121
|
+
# it 'should be a string/integer'
|
|
122
|
+
|
|
123
|
+
# it 'should ignore whitespace'
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe 'email' do
|
|
127
|
+
# it 'should be a valid email (string)'
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Spec:
|
|
134
|
+
# http://integration.klarna.com/en/api/standard-integration/functions/mkgoodsflags
|
|
135
|
+
describe '#make_goods' do
|
|
136
|
+
it 'should be defined' do
|
|
137
|
+
assert_respond_to @klarna, :make_goods
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# it 'should require: quantity, artno vs title, price, vat'
|
|
141
|
+
|
|
142
|
+
# it 'should pre-validate the specified address values, and raise validation error if it s invalid without any service call'
|
|
143
|
+
|
|
144
|
+
describe 'argument constraints: raise argument error if not true (no API-call)' do
|
|
145
|
+
describe 'quantity' do
|
|
146
|
+
# it 'should be a integer/string'
|
|
147
|
+
|
|
148
|
+
# it 'should be >= 1'
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
describe 'artno' do
|
|
152
|
+
# it 'should be a integer/string if no title is specified'
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
describe 'title' do
|
|
156
|
+
# it 'should be a integer/string if no artno is specified'
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
describe 'price' do
|
|
160
|
+
# it 'should be a integer/string/decimal if no artno is specified'
|
|
161
|
+
|
|
162
|
+
# it 'should convert to cents if decimal (assumption)'
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
describe 'vat' do
|
|
166
|
+
# it 'should be a integer/string/decimal if no artno is specified'
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it 'should generate an valid address structure: quantity, artno, title, price, vat' do
|
|
171
|
+
assert_equal ({
|
|
172
|
+
'goods' => {
|
|
173
|
+
'artno' => "ABC123",
|
|
174
|
+
'title' => "T-shirt",
|
|
175
|
+
'price' => 2500,
|
|
176
|
+
'vat' => 25.00,
|
|
177
|
+
'discount' => 0.00,
|
|
178
|
+
'flags' => 0
|
|
179
|
+
},
|
|
180
|
+
'qty' => 5
|
|
181
|
+
}),
|
|
182
|
+
@klarna.make_goods(5, "ABC123", "T-shirt", 25.00 * 100, 25)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
it 'should generate an valid address structure: quantity, artno, title, price, vat, discount' do
|
|
186
|
+
assert_equal ({
|
|
187
|
+
'goods' => {
|
|
188
|
+
'artno' => "ABC123",
|
|
189
|
+
'title' => "T-shirt",
|
|
190
|
+
'price' => 2500,
|
|
191
|
+
'vat' => 25.00,
|
|
192
|
+
'discount' => 10.00,
|
|
193
|
+
'flags' => 0
|
|
194
|
+
},
|
|
195
|
+
'qty' => 5
|
|
196
|
+
}),
|
|
197
|
+
@klarna.make_goods(5, "ABC123", "T-shirt", 25.00 * 100, 25, 10)
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it 'should generate an valid address structure: quantity, artno, title, price, vat, discount, flags' do
|
|
201
|
+
assert_equal ({
|
|
202
|
+
'goods' => {
|
|
203
|
+
'artno' => "ABC123",
|
|
204
|
+
'title' => "T-shirt",
|
|
205
|
+
'price' => 2500,
|
|
206
|
+
'vat' => 25.00,
|
|
207
|
+
'discount' => 10.00,
|
|
208
|
+
'flags' => 32
|
|
209
|
+
},
|
|
210
|
+
'qty' => 5
|
|
211
|
+
}),
|
|
212
|
+
@klarna.make_goods(5, "ABC123", "T-shirt", 25.00 * 100, 25, 10, ::Klarna::API::GOODS[:INC_VAT])
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
it 'should be possible to set flags via options' do
|
|
216
|
+
assert_equal ({
|
|
217
|
+
'goods' => {
|
|
218
|
+
'artno' => "ABC123",
|
|
219
|
+
'title' => "T-shirt",
|
|
220
|
+
'price' => 2500,
|
|
221
|
+
'vat' => 25.00,
|
|
222
|
+
'discount' => 0.00,
|
|
223
|
+
'flags' => 48
|
|
224
|
+
},
|
|
225
|
+
'qty' => 5
|
|
226
|
+
}),
|
|
227
|
+
@klarna.make_goods(5, "ABC123", "T-shirt", 25.00 * 100, 25, 0, :inc_vat => true, :is_handling => true)
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# Spec:
|
|
232
|
+
# http://integration.klarna.com/en/api/advanced-integration/functions/hasaccount
|
|
233
|
+
describe '#has_account?' do
|
|
234
|
+
it 'should be defined' do
|
|
235
|
+
assert_respond_to @klarna, :has_account?
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# FIXME: Throws error "Unknown call (-99)". :S
|
|
239
|
+
it 'should be true' # do
|
|
240
|
+
# assert_equal true, @klarna.has_account?("4304158399", :SE)
|
|
241
|
+
# end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
end
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'test_helper'
|
|
3
|
+
|
|
4
|
+
describe ::Klarna::API do
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
::Klarna.setup do |c|
|
|
8
|
+
c.store_id = VALID_STORE_ID
|
|
9
|
+
c.store_secret = VALID_STORE_SECRET
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "Helpers" do
|
|
14
|
+
|
|
15
|
+
describe '.client' do
|
|
16
|
+
it 'should be defined' do
|
|
17
|
+
assert_respond_to ::Klarna::API, :client
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'should create a new ::Klarna RPC-API client with default settings' do
|
|
21
|
+
client = ::Klarna::API.client
|
|
22
|
+
assert_instance_of ::Klarna::API::Client, client
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'should reuse existing ::Klarna RPC-API client instance if exists' do
|
|
26
|
+
assert_equal ::Klarna::API.client, ::Klarna::API.client
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'should be possible to force-re-initialize the client even though it is already initialized' do
|
|
30
|
+
client_1 = ::Klarna::API.client(true)
|
|
31
|
+
client_2 = ::Klarna::API.client(true)
|
|
32
|
+
refute_equal client_1, client_2
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe '.validated_kind' do
|
|
37
|
+
it 'should be defined' do
|
|
38
|
+
assert_respond_to ::Klarna::API, :validated_kind
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'should only allow kinds: :country, :currency, :language, :pno_format, :address_format' do
|
|
42
|
+
assert_equal :COUNTRIES, ::Klarna::API.validated_kind(:country)
|
|
43
|
+
assert_equal :COUNTRIES, ::Klarna::API.validated_kind('country')
|
|
44
|
+
|
|
45
|
+
assert_equal :CURRENCIES, ::Klarna::API.validated_kind(:currency)
|
|
46
|
+
assert_equal :CURRENCIES, ::Klarna::API.validated_kind('currency')
|
|
47
|
+
|
|
48
|
+
assert_equal :LANGUAGES, ::Klarna::API.validated_kind(:language)
|
|
49
|
+
assert_equal :LANGUAGES, ::Klarna::API.validated_kind('language')
|
|
50
|
+
|
|
51
|
+
assert_equal :PNO_FORMATS, ::Klarna::API.validated_kind(:pno_format)
|
|
52
|
+
assert_equal :PNO_FORMATS, ::Klarna::API.validated_kind('pno_format')
|
|
53
|
+
|
|
54
|
+
assert_equal :ADDRESS_FORMATS, ::Klarna::API.validated_kind(:address_format)
|
|
55
|
+
assert_equal :ADDRESS_FORMATS, ::Klarna::API.validated_kind('address_format')
|
|
56
|
+
|
|
57
|
+
assert_raises ::Klarna::API::KlarnaArgumentError do
|
|
58
|
+
::Klarna::API.validated_kind(:hello)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
describe '.key_for' do
|
|
64
|
+
it 'should be defined' do
|
|
65
|
+
assert_respond_to ::Klarna::API, :key_for
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'should return valid format KEY for a specified kind-key' do
|
|
69
|
+
assert_equal :SE, ::Klarna::API.key_for(:pno_format, 'SE')
|
|
70
|
+
assert_equal :SE, ::Klarna::API.key_for(:pno_format, :SE)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'should return valid format KEY for a specified kind-value' do
|
|
74
|
+
assert_equal :SE, ::Klarna::API.key_for(:pno_format, '2')
|
|
75
|
+
assert_equal :SE, ::Klarna::API.key_for(:pno_format, 2)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe '.id_for' do
|
|
80
|
+
it 'should be defined' do
|
|
81
|
+
assert_respond_to ::Klarna::API, :id_for
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'should return valid format ID for a specified kind-key' do
|
|
85
|
+
assert_equal 2, ::Klarna::API.id_for(:pno_format, 'SE')
|
|
86
|
+
assert_equal 2, ::Klarna::API.id_for(:pno_format, :SE)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'should return valid format ID for a specified kind-value' do
|
|
90
|
+
assert_equal 2, ::Klarna::API.id_for(:pno_format, '2')
|
|
91
|
+
assert_equal 2, ::Klarna::API.id_for(:pno_format, 2)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe '.validate_arg' do
|
|
96
|
+
it 'should be defined' do
|
|
97
|
+
assert_respond_to ::Klarna::API, :validate_arg
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# it 'should...'
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe '.digest' do
|
|
104
|
+
it 'should be defined' do
|
|
105
|
+
assert_respond_to ::Klarna::API, :digest
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it 'should calculate a valid digest secret for one value' do
|
|
109
|
+
# TODO
|
|
110
|
+
# skip
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it 'should calculate a valid digest secret for an array of values' do
|
|
114
|
+
# TODO
|
|
115
|
+
# skip
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it 'should raise error if specified value is nor a string or an array' do
|
|
119
|
+
# TODO
|
|
120
|
+
# skip
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe '.encode' do
|
|
125
|
+
it 'should be defined' do
|
|
126
|
+
assert_respond_to ::Klarna::API, :encode
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it 'should encode a specified string from "UTF-8" to "iso-8859-1" properly' do
|
|
130
|
+
# TODO
|
|
131
|
+
# skip
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
end
|
data/test/klarna_test.rb
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'test_helper'
|
|
3
|
+
|
|
4
|
+
describe Klarna do
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
Klarna.reset!
|
|
8
|
+
Klarna.store_config_file = File.join(File.dirname(__FILE__), 'fixtures', 'klarna.yml')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "Constants" do
|
|
12
|
+
|
|
13
|
+
describe 'VALID_COUNTRIES' do
|
|
14
|
+
it 'should be defined' do
|
|
15
|
+
assert defined?(Klarna::VALID_COUNTRIES)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# TODO: Add additional countries
|
|
19
|
+
it 'should have values: SE, NO, FI, DK' do
|
|
20
|
+
assert_equal [:SE, :NO, :FI, :DK], Klarna::VALID_COUNTRIES
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe 'DEFAULT_COUNTRY' do
|
|
25
|
+
it 'should be defined' do
|
|
26
|
+
assert defined?(Klarna::DEFAULT_COUNTRY)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'should have value: SE' do
|
|
30
|
+
assert_equal :SE, Klarna::DEFAULT_COUNTRY
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe "Configuration" do
|
|
37
|
+
|
|
38
|
+
describe '.mode' do
|
|
39
|
+
it 'should be defined' do
|
|
40
|
+
assert_respond_to Klarna, :mode
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'should have default setting: :test' do
|
|
44
|
+
assert_equal :test, Klarna.mode
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'should be configurable' do
|
|
48
|
+
swap Klarna, :mode => :production do
|
|
49
|
+
assert_equal :production, Klarna.mode
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe '.country' do
|
|
55
|
+
it 'should be defined' do
|
|
56
|
+
assert_respond_to Klarna, :country
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'should have default setting: SE' do
|
|
60
|
+
assert_equal :SE, Klarna.country
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'should be configurable' do
|
|
64
|
+
swap Klarna, :country => :NO do
|
|
65
|
+
assert_equal :NO, Klarna.country
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
describe '.store_id' do
|
|
71
|
+
it 'should be defined' do
|
|
72
|
+
assert_respond_to Klarna, :store_id
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'should have default setting: nil' do
|
|
76
|
+
assert_equal nil, Klarna.store_id
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'should be configurable' do
|
|
80
|
+
swap Klarna, :store_id => '123' do
|
|
81
|
+
assert_equal 123, Klarna.store_id
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe '.store_secret' do
|
|
87
|
+
it 'should be defined' do
|
|
88
|
+
assert_respond_to Klarna, :store_secret
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it 'should have default setting: nil' do
|
|
92
|
+
assert_equal nil, Klarna.store_secret
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'should be configurable' do
|
|
96
|
+
swap Klarna, :store_secret => 'ABC123' do
|
|
97
|
+
assert_equal 'ABC123', Klarna.store_secret
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
describe '.store_pclasses' do
|
|
103
|
+
it 'should be defined' do
|
|
104
|
+
assert_respond_to Klarna, :store_pclasses
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it 'should have default setting: SE' do
|
|
108
|
+
assert_equal nil, Klarna.store_pclasses
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# TODO:
|
|
112
|
+
# it 'should be configurable' do
|
|
113
|
+
# end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
describe '.store_config_file' do
|
|
117
|
+
it 'should be defined' do
|
|
118
|
+
assert_respond_to Klarna, :mode
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it 'should have default setting: nil' do
|
|
122
|
+
Klarna.reset!
|
|
123
|
+
assert_equal File.join(ENV['HOME'], '.klarna.yml'), Klarna.store_config_file
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'should be configurable' do
|
|
127
|
+
swap Klarna, :store_config_file => '/path/to/a/file' do
|
|
128
|
+
assert_equal '/path/to/a/file', Klarna.store_config_file
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
describe '.logger' do
|
|
134
|
+
it 'should be defined' do
|
|
135
|
+
assert_respond_to Klarna, :logger
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it 'should have default logger' do
|
|
139
|
+
assert_instance_of Logger, Klarna.logger
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it 'should be configurable' do
|
|
143
|
+
custom_logger = ::Logger.new(::STDOUT)
|
|
144
|
+
swap Klarna, :logger => custom_logger do
|
|
145
|
+
assert_equal custom_logger, Klarna.logger
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
describe '.http_logging' do
|
|
151
|
+
it 'should be defined' do
|
|
152
|
+
assert_respond_to Klarna, :http_logging
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it 'should have default setting: false' do
|
|
156
|
+
assert_equal false, Klarna.http_logging
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
it 'should be configurable' do
|
|
160
|
+
swap Klarna, :http_logging => true do
|
|
161
|
+
assert_equal true, Klarna.http_logging
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
describe "Helpers" do
|
|
169
|
+
|
|
170
|
+
describe '.setup' do
|
|
171
|
+
it 'should be defined' do
|
|
172
|
+
assert_respond_to Klarna, :setup
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it 'should be possible to change settings in a block' do
|
|
176
|
+
Klarna.http_logging = false
|
|
177
|
+
assert_equal false, Klarna.http_logging
|
|
178
|
+
|
|
179
|
+
Klarna.setup do |c|
|
|
180
|
+
c.http_logging = true
|
|
181
|
+
end
|
|
182
|
+
assert_equal true, Klarna.http_logging
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
describe '.log' do
|
|
187
|
+
it 'should be defined' do
|
|
188
|
+
assert_respond_to Klarna, :log
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
describe '.load_credentials_from_file' do
|
|
193
|
+
it 'should be defined' do
|
|
194
|
+
assert_respond_to Klarna, :load_credentials_from_file
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it 'should load settings from a external YAML config file' do
|
|
198
|
+
# TODO: Test loading settings from fixtures/klarna.yml
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
end
|