klarna-xmlrpc 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +13 -0
  3. data/Gemfile +14 -0
  4. data/Guardfile +16 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.textile +139 -0
  7. data/Rakefile +22 -0
  8. data/TODO +30 -0
  9. data/examples/Gemfile +8 -0
  10. data/examples/config/initializer.rb +15 -0
  11. data/examples/console.rb +71 -0
  12. data/examples/public/images/klarna.png +0 -0
  13. data/examples/public/images/ruby.png +0 -0
  14. data/examples/views/_address.haml +22 -0
  15. data/examples/views/_articles.haml +21 -0
  16. data/examples/views/checkout_page_example.haml +2 -0
  17. data/examples/views/essential/add_transaction/_form.haml +32 -0
  18. data/examples/views/essential/add_transaction/result.haml +7 -0
  19. data/examples/views/essential/calculate_monthly_cost/_form.haml +16 -0
  20. data/examples/views/essential/calculate_monthly_cost/result.haml +7 -0
  21. data/examples/views/essential/get_addresses/_form.haml +9 -0
  22. data/examples/views/essential/get_addresses/result.haml +8 -0
  23. data/examples/views/index.haml +296 -0
  24. data/examples/views/layout.haml +48 -0
  25. data/examples/views/payment_terms_example.haml +102 -0
  26. data/examples/views/product_page_example.haml +2 -0
  27. data/examples/views/reservation/activate_reservation/_form.haml +54 -0
  28. data/examples/views/reservation/activate_reservation/result.haml +7 -0
  29. data/examples/views/reservation/cancel_reservation/_form.haml +8 -0
  30. data/examples/views/reservation/cancel_reservation/result.haml +7 -0
  31. data/examples/views/reservation/change_reservation/_form.haml +10 -0
  32. data/examples/views/reservation/change_reservation/result.haml +7 -0
  33. data/examples/views/reservation/reserve_amount/_form.haml +58 -0
  34. data/examples/views/reservation/reserve_amount/result.haml +7 -0
  35. data/examples/views/reservation/reserve_ocr_numbers/_form.haml +8 -0
  36. data/examples/views/reservation/reserve_ocr_numbers/result.haml +7 -0
  37. data/examples/views/reservation/split_reservation/_form.haml +14 -0
  38. data/examples/views/reservation/split_reservation/result.haml +7 -0
  39. data/examples/views/special/get_pclasses/_form.haml +8 -0
  40. data/examples/views/special/get_pclasses/result.haml +7 -0
  41. data/examples/views/special/invoice_address/_form.haml +8 -0
  42. data/examples/views/special/invoice_address/result.haml +7 -0
  43. data/examples/views/special/invoice_amount/_form.haml +8 -0
  44. data/examples/views/special/invoice_amount/result.haml +7 -0
  45. data/examples/views/special/is_invoice_paid/_form.haml +8 -0
  46. data/examples/views/special/is_invoice_paid/result.haml +7 -0
  47. data/examples/views/special/update_charge_amount/_form.haml +15 -0
  48. data/examples/views/special/update_charge_amount/result.haml +7 -0
  49. data/examples/views/special/update_goods_quantity/_form.haml +17 -0
  50. data/examples/views/special/update_goods_quantity/result.haml +7 -0
  51. data/examples/views/special/update_order_number/_form.haml +10 -0
  52. data/examples/views/special/update_order_number/result.haml +7 -0
  53. data/examples/views/useful/activate_invoice/_form.haml +9 -0
  54. data/examples/views/useful/activate_invoice/result.haml +7 -0
  55. data/examples/views/useful/credit_invoice/_form.haml +11 -0
  56. data/examples/views/useful/credit_invoice/result.haml +7 -0
  57. data/examples/views/useful/delete_invoice/_form.haml +9 -0
  58. data/examples/views/useful/delete_invoice/result.haml +7 -0
  59. data/examples/views/useful/email_invoice/_form.haml +9 -0
  60. data/examples/views/useful/email_invoice/result.haml +7 -0
  61. data/examples/views/useful/has_account/_form.haml +9 -0
  62. data/examples/views/useful/has_account/result.haml +7 -0
  63. data/examples/views/useful/return_amount/_form.haml +15 -0
  64. data/examples/views/useful/return_amount/result.haml +7 -0
  65. data/examples/views/useful/send_invoice/_form.haml +9 -0
  66. data/examples/views/useful/send_invoice/result.haml +7 -0
  67. data/examples/web.rb +349 -0
  68. data/klarna.gemspec +34 -0
  69. data/lib/klarna.rb +171 -0
  70. data/lib/klarna/api.rb +187 -0
  71. data/lib/klarna/api/client.rb +126 -0
  72. data/lib/klarna/api/constants.rb +647 -0
  73. data/lib/klarna/api/errors.rb +154 -0
  74. data/lib/klarna/api/methods.rb +16 -0
  75. data/lib/klarna/api/methods/cost_calculations.rb +134 -0
  76. data/lib/klarna/api/methods/invoicing.rb +304 -0
  77. data/lib/klarna/api/methods/reservation.rb +188 -0
  78. data/lib/klarna/api/methods/standard.rb +126 -0
  79. data/lib/klarna/version.rb +5 -0
  80. data/test/fixtures/api/companies.yml +97 -0
  81. data/test/fixtures/api/pclasses.yml +37 -0
  82. data/test/fixtures/api/persons.yml +144 -0
  83. data/test/fixtures/api/stores.yml +6 -0
  84. data/test/fixtures/klarna.yml +10 -0
  85. data/test/klarna/api/client_test.rb +288 -0
  86. data/test/klarna/api/errors_test.rb +34 -0
  87. data/test/klarna/api/methods/cost_calculations_test.rb +78 -0
  88. data/test/klarna/api/methods/invoicing_test.rb +409 -0
  89. data/test/klarna/api/methods/reservation_test.rb +66 -0
  90. data/test/klarna/api/methods/standard_test.rb +244 -0
  91. data/test/klarna/api_test.rb +184 -0
  92. data/test/klarna_test.rb +204 -0
  93. data/test/support/assertions_helper.rb +40 -0
  94. data/test/test_helper.rb +55 -0
  95. metadata +335 -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,184 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+ require 'iconv'
4
+
5
+ describe ::Klarna::API do
6
+
7
+ before do
8
+ ::Klarna.setup do |c|
9
+ c.store_id = VALID_STORE_ID
10
+ c.store_secret = VALID_STORE_SECRET
11
+ end
12
+ end
13
+
14
+ describe "Helpers" do
15
+
16
+ describe '.client' do
17
+ it 'should be defined' do
18
+ assert_respond_to ::Klarna::API, :client
19
+ end
20
+
21
+ it 'should create a new ::Klarna RPC-API client with default settings' do
22
+ client = ::Klarna::API.client
23
+ assert_instance_of ::Klarna::API::Client, client
24
+ end
25
+
26
+ it 'should reuse existing ::Klarna RPC-API client instance if exists' do
27
+ assert_equal ::Klarna::API.client, ::Klarna::API.client
28
+ end
29
+
30
+ it 'should be possible to force-re-initialize the client even though it is already initialized' do
31
+ client_1 = ::Klarna::API.client(true)
32
+ client_2 = ::Klarna::API.client(true)
33
+ refute_equal client_1, client_2
34
+ end
35
+ end
36
+
37
+ describe '.validated_kind' do
38
+ it 'should be defined' do
39
+ assert_respond_to ::Klarna::API, :validated_kind
40
+ end
41
+
42
+ it 'should only allow kinds: :country, :currency, :language, :pno_format, :address_format' do
43
+ assert_equal :COUNTRIES, ::Klarna::API.validated_kind(:country)
44
+ assert_equal :COUNTRIES, ::Klarna::API.validated_kind('country')
45
+
46
+ assert_equal :CURRENCIES, ::Klarna::API.validated_kind(:currency)
47
+ assert_equal :CURRENCIES, ::Klarna::API.validated_kind('currency')
48
+
49
+ assert_equal :LANGUAGES, ::Klarna::API.validated_kind(:language)
50
+ assert_equal :LANGUAGES, ::Klarna::API.validated_kind('language')
51
+
52
+ assert_equal :PNO_FORMATS, ::Klarna::API.validated_kind(:pno_format)
53
+ assert_equal :PNO_FORMATS, ::Klarna::API.validated_kind('pno_format')
54
+
55
+ assert_equal :ADDRESS_FORMATS, ::Klarna::API.validated_kind(:address_format)
56
+ assert_equal :ADDRESS_FORMATS, ::Klarna::API.validated_kind('address_format')
57
+
58
+ assert_raises ::Klarna::API::KlarnaArgumentError do
59
+ ::Klarna::API.validated_kind(:hello)
60
+ end
61
+ end
62
+ end
63
+
64
+ describe '.key_for' do
65
+ it 'should be defined' do
66
+ assert_respond_to ::Klarna::API, :key_for
67
+ end
68
+
69
+ it 'should return valid format KEY for a specified kind-key' do
70
+ assert_equal :SE, ::Klarna::API.key_for(:pno_format, 'SE')
71
+ assert_equal :SE, ::Klarna::API.key_for(:pno_format, :SE)
72
+ end
73
+
74
+ it 'should return valid format KEY for a specified kind-value' do
75
+ assert_equal :SE, ::Klarna::API.key_for(:pno_format, '2')
76
+ assert_equal :SE, ::Klarna::API.key_for(:pno_format, 2)
77
+ end
78
+ end
79
+
80
+ describe '.id_for' do
81
+ it 'should be defined' do
82
+ assert_respond_to ::Klarna::API, :id_for
83
+ end
84
+
85
+ it 'should return valid format ID for a specified kind-key' do
86
+ assert_equal 2, ::Klarna::API.id_for(:pno_format, 'SE')
87
+ assert_equal 2, ::Klarna::API.id_for(:pno_format, :SE)
88
+ end
89
+
90
+ it 'should return valid format ID for a specified kind-value' do
91
+ assert_equal 2, ::Klarna::API.id_for(:pno_format, '2')
92
+ assert_equal 2, ::Klarna::API.id_for(:pno_format, 2)
93
+ end
94
+ end
95
+
96
+ describe '.validate_arg' do
97
+ it 'should be defined' do
98
+ assert_respond_to ::Klarna::API, :validate_arg
99
+ end
100
+
101
+ # TODO: Add missing specs.
102
+ end
103
+
104
+ describe '.parse_flags' do
105
+ it 'should be defined' do
106
+ assert_respond_to ::Klarna::API, :parse_flags
107
+ end
108
+
109
+ it 'should calculate value for one flag properly' do
110
+ assert_equal 0, ::Klarna::API.parse_flags(:GOODS, :IS_SHIPMENT => false)
111
+ assert_equal 8, ::Klarna::API.parse_flags(:GOODS, :IS_SHIPMENT => true)
112
+ end
113
+
114
+ it 'should calculate value for multiple flags properly using hash (bitwise OR - a.k.a sum)' do
115
+ # Maybe overkill, but here we go... ;)
116
+
117
+ # Uppercase
118
+ assert_equal 0, ::Klarna::API.parse_flags(:GOODS, :IS_SHIPMENT => false, :IS_HANDLING => false, :INC_VAT => false)
119
+ assert_equal 8, ::Klarna::API.parse_flags(:GOODS, :IS_SHIPMENT => true, :IS_HANDLING => false, :INC_VAT => false)
120
+ assert_equal 16, ::Klarna::API.parse_flags(:GOODS, :IS_SHIPMENT => false, :IS_HANDLING => true, :INC_VAT => false)
121
+ assert_equal 32, ::Klarna::API.parse_flags(:GOODS, :IS_SHIPMENT => false, :IS_HANDLING => false, :INC_VAT => true)
122
+ assert_equal 24, ::Klarna::API.parse_flags(:GOODS, :IS_SHIPMENT => true, :IS_HANDLING => true, :INC_VAT => false)
123
+ assert_equal 48, ::Klarna::API.parse_flags(:GOODS, :IS_SHIPMENT => false, :IS_HANDLING => true, :INC_VAT => true)
124
+ assert_equal 56, ::Klarna::API.parse_flags(:GOODS, :IS_SHIPMENT => true, :IS_HANDLING => true, :INC_VAT => true)
125
+
126
+ # Lowercase (for readability)
127
+ assert_equal 0, ::Klarna::API.parse_flags(:goods, :is_shipment => false, :is_handling => false, :inc_vat => false)
128
+ assert_equal 8, ::Klarna::API.parse_flags(:goods, :is_shipment => true, :is_handling => false, :inc_vat => false)
129
+ assert_equal 16, ::Klarna::API.parse_flags(:goods, :is_shipment => false, :is_handling => true, :inc_vat => false)
130
+ assert_equal 32, ::Klarna::API.parse_flags(:goods, :is_shipment => false, :is_handling => false, :inc_vat => true)
131
+ assert_equal 24, ::Klarna::API.parse_flags(:goods, :is_shipment => true, :is_handling => true, :inc_vat => false)
132
+ assert_equal 48, ::Klarna::API.parse_flags(:goods, :is_shipment => false, :is_handling => true, :inc_vat => true)
133
+ assert_equal 56, ::Klarna::API.parse_flags(:goods, :is_shipment => true, :is_handling => true, :inc_vat => true)
134
+ end
135
+ end
136
+
137
+ describe '.digest' do
138
+ it 'should be defined' do
139
+ assert_respond_to ::Klarna::API, :digest
140
+ end
141
+
142
+ it 'should calculate a valid digest secret for single value' do
143
+ assert_equal "RvaNtGgJzI4FLDLz7dH4PIwWl3vYwR6qpx/whgCf7qkxj4+0prU0zXOAw9Jc\nSQw+iMqzgAMyjq79azKmp40uWg==", ::Klarna::API.digest("secret 123")
144
+ end
145
+
146
+ it 'should calculate a valid digest secret for an array of values' do
147
+ assert_equal ::Klarna::API.digest("secret 1:secret 2:secret 3"), ::Klarna::API.digest("secret 1", "secret 2", "secret 3")
148
+ assert_equal "yKMen8LPEev5yLYUTjFvJdWY/t2tTx3JsK2s1nIgwu3wFfrdu6Kzce1VcGfo\nC/6OXQtR6nGVntYhEP7KUmtADw==", ::Klarna::API.digest("secret 1", "secret 2", "secret 3")
149
+ end
150
+ end
151
+
152
+ describe '.encode' do
153
+ it 'should be defined' do
154
+ assert_respond_to ::Klarna::API, :encode
155
+ end
156
+
157
+ it 'should encode a specified string from "UTF-8" to "ISO-8859-1" properly' do
158
+ if RUBY_VERSION > '1.9'
159
+ assert_equal 'ISO-8859-1', ::Klarna::API.encode("ÅÄÖ".force_encoding('UTF-8')).encoding.name
160
+ else
161
+ ::Iconv rescue require 'iconv'
162
+ assert_equal 1, ::Klarna::API.encode("Ö").length # if it is UTF-8 String#length returns 2 bytes in Ruby < 1.9
163
+ end
164
+ end
165
+ end
166
+
167
+ describe '.decode' do
168
+ it 'should be defined' do
169
+ assert_respond_to ::Klarna::API, :decode
170
+ end
171
+
172
+ it 'should encode a specified string from "ISO-8859-1" to "UTF-8" properly' do
173
+ if RUBY_VERSION > '1.9'
174
+ assert_equal 'UTF-8', ::Klarna::API.decode("ÅÄÖ".force_encoding('ISO-8859-1')).encoding.name
175
+ else
176
+ ::Iconv rescue require 'iconv'
177
+ assert_equal 2, ::Klarna::API.decode("Ö").length # if it is UTF-8 String#length returns 2 bytes in Ruby < 1.9
178
+ end
179
+ end
180
+ end
181
+
182
+ end
183
+
184
+ end