klarna 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. data/.gitignore +9 -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 +175 -0
  70. data/lib/klarna/api.rb +170 -0
  71. data/lib/klarna/api/client.rb +128 -0
  72. data/lib/klarna/api/constants.rb +638 -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 +149 -0
  78. data/lib/klarna/api/methods/standard.rb +123 -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 +272 -0
  86. data/test/klarna/api/errors_test.rb +46 -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 +137 -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 +312 -0
@@ -0,0 +1,6 @@
1
+ # Public test stores.
2
+
3
+ stores:
4
+ test:
5
+ id: 2
6
+ secret: lakrits
@@ -0,0 +1,10 @@
1
+ ---
2
+ test:
3
+ store_id: 2
4
+ store_secred: lakrits
5
+ store_pclasses:
6
+
7
+ production:
8
+ store_id: 2
9
+ store_secred: lakrits
10
+ store_pclasses:
@@ -0,0 +1,272 @@
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://beta-test.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
+ it 'should calculate a valid digest secret for one value' do
226
+ # TODO
227
+ end
228
+
229
+ it 'should calculate a valid digest secret for an array of values' do
230
+ # TODO
231
+ end
232
+
233
+ it 'should raise error if specified value is nor a string or an array' do
234
+ # TODO
235
+ end
236
+ end
237
+
238
+ describe '#content_type_headers' do
239
+ it 'should be defined' do
240
+ assert_respond_to @client, :content_type_headers
241
+ end
242
+
243
+ it 'should have header: Accept-Charset: iso-8859-1' do
244
+ assert_equal 'iso-8859-1', @client.send(:content_type_headers)['Accept-Charset']
245
+ end
246
+
247
+ it 'should have header: Content-Type: text/xml;charset=iso-8859-1' do
248
+ assert_equal 'text/xml;charset=iso-8859-1', @client.send(:'content_type_headers')['Content-Type']
249
+ end
250
+
251
+ it 'should have header: Connection: close' do
252
+ assert_equal 'close', @client.send(:content_type_headers)['Connection']
253
+ end
254
+
255
+ it 'should have header: Accept-Charset: iso-8859-1' do
256
+ assert_equal 'ruby/xmlrpc', @client.send(:content_type_headers)['User-Agent']
257
+ end
258
+ end
259
+
260
+ describe '#add_meta_params' do
261
+ it 'should be defined' do
262
+ assert_respond_to @client, :add_meta_params
263
+ end
264
+
265
+ it %Q{should push default RPC-params/arguments: protocol version + client version ("1.0", "#{::XMLRPC::Client::USER_AGENT}")} do
266
+ assert_equal ["#{::Klarna::API::PROTOCOL_VERSION}", "#{::XMLRPC::Client::USER_AGENT}"], @client.send(:add_meta_params)
267
+ end
268
+ end
269
+
270
+ end
271
+
272
+ end
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ describe Klarna::API::Errors do
5
+
6
+ describe Klarna::API::Errors::KlarnaStandardError do
7
+ it 'should be defined' do
8
+ assert defined?(::Klarna::API::Errors::KlarnaStandardError)
9
+ end
10
+ end
11
+
12
+ describe Klarna::API::Errors::KlarnaCredentialsError do
13
+ it 'should be defined' do
14
+ assert defined?(::Klarna::API::Errors::KlarnaCredentialsError)
15
+ end
16
+ end
17
+
18
+ describe Klarna::API::Errors::KlarnaServiceError do
19
+ it 'should be defined' do
20
+ assert defined?(::Klarna::API::Errors::KlarnaServiceError)
21
+ end
22
+
23
+ # TODO:
24
+ # it 'should cast properly to hash value' do
25
+ # swap ::Klarna, :mode => :production do
26
+ # error = ::Klarna::API::Errors::KlarnaServiceError.new(7101, :no_such_subscription)
27
+ # # assert_equal ({:error_code => 7101, :error_message => "#{error_message} (#{error_key}): #{localized_error_message}"}), error.to_h
28
+ # assert_equal ({:error_code => 7101, :error_message => :no_such_subscription}), error.to_h
29
+ # end
30
+ # end
31
+
32
+ # TODO:
33
+ # it 'should raise error with localized error message'
34
+ end
35
+
36
+ describe ".error_message" do
37
+ it "should return correct error key from a ID" do
38
+ assert_equal :no_such_subscription, ::Klarna::API::Errors.error_message(7101)
39
+ end
40
+
41
+ it "should return correct error key from a key" do
42
+ assert_equal :no_such_subscription, ::Klarna::API::Errors.error_message(:no_such_subscription)
43
+ end
44
+ end
45
+
46
+ end
@@ -0,0 +1,78 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ describe Klarna::API::Methods::CostCalculations 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/monthly-cost-functions/functions/fetchpclasses
19
+ describe '#fetch_pclasses' do
20
+ it 'should be defined' do
21
+ assert_respond_to @client, :fetch_pclasses
22
+ end
23
+ end
24
+
25
+ # Spec: http://integration.klarna.com/en/api/monthly-cost-functions/functions/calcmonthlycost
26
+ describe '#calculate_monthly_cost' do
27
+ it 'should be defined' do
28
+ assert_respond_to @client, :calculate_monthly_cost
29
+ end
30
+ end
31
+
32
+ describe '#periodic_cost' do
33
+ it 'should be defined' do
34
+ assert_respond_to @client, :periodic_cost
35
+ end
36
+ end
37
+
38
+ describe '#monthly_cost' do
39
+ it 'should be defined' do
40
+ assert_respond_to @client, :monthly_cost
41
+ end
42
+ end
43
+
44
+ describe 'protected/private methods' do
45
+
46
+ describe '#calculate_interest_cost' do
47
+ it 'should be defined' do
48
+ assert_respond_to @client, :calculate_interest_cost
49
+ end
50
+ end
51
+
52
+ describe '#calculate_monthly_payment' do
53
+ it 'should be defined' do
54
+ assert_respond_to @client, :calculate_monthly_payment
55
+ end
56
+ end
57
+
58
+ describe '#calculate_daily_rate' do
59
+ it 'should be defined' do
60
+ assert_respond_to @client, :calculate_daily_rate
61
+ end
62
+ end
63
+
64
+ describe '#get_denominator' do
65
+ it 'should be defined' do
66
+ assert_respond_to @client, :get_denominator
67
+ end
68
+ end
69
+
70
+ describe '#round_up' do
71
+ it 'should be defined' do
72
+ assert_respond_to @client, :round_up
73
+ end
74
+ end
75
+
76
+ end
77
+
78
+ end
@@ -0,0 +1,409 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ describe Klarna::API::Methods::Invoicing do
5
+
6
+ # TODO: Mock responses using VCR.
7
+
8
+ INVALID_ORDER_NO = '12312312312312312'
9
+
10
+ before do
11
+ valid_credentials!
12
+ @klarna = Klarna::API::Client.new
13
+ @klarna.client_ip = '85.230.98.196'
14
+
15
+ @protocol_version = ::Klarna::API::PROTOCOL_VERSION.to_s
16
+ @user_agent = ::XMLRPC::Client::USER_AGENT.to_s
17
+
18
+ expose_protected_methods_in @klarna.class
19
+
20
+ @order_items = []
21
+ @order_items << @klarna.make_goods(1, 'ABC1', "T-shirt 1", 1.00 * 100, 25, 0, :INC_VAT => true)
22
+ @order_items << @klarna.make_goods(3, 'ABC2', "T-shirt 2", 7.00 * 100, 25, 0, :INC_VAT => true)
23
+ @order_items << @klarna.make_goods(7, 'ABC3', "T-shirt 3", 17.00 * 100, 25, 0, :INC_VAT => true)
24
+ @order_items_total = (1 * (1.00 * 100) + 3 * (7.00 * 100) + 7 * (17.00 * 100)).to_i
25
+
26
+ @address_SE = @klarna.make_address("c/o Lidin", "Junibackg. 42", "23634", "Höllviken", :SE, "076 526 00 00", "076 526 00 00", "karl.lidin@klarna.com")
27
+
28
+ @valid_invoice_args_SE =
29
+ ['USER-4304158399', 'ORDER-1', @order_items, 0, 0, :NORMAL, '4304158399', 'Karl', 'Lidin', @address_SE, '85.230.98.196', :SEK, :SE, :SV, :SE, nil, nil, nil, nil, nil, nil, nil, 2]
30
+ end
31
+
32
+ # Spec: http://integration.klarna.com/en/api/standard-integration/functions/addtransaction
33
+ describe '#add_invoice' do
34
+ it 'should be defined' do
35
+ assert_respond_to @klarna, :add_transaction
36
+ end
37
+
38
+ describe "SE" do
39
+ it 'should create order successfully with valid arguments' do
40
+ invoice_no = @klarna.add_transaction(
41
+ 'USER-4304158399', 'ORDER-1', @order_items, 0, 0, ::Klarna::API::SHIPMENT_TYPES[:NORMAL], '4304158399', 'Karl', 'Lidin', @address_SE, '85.230.98.196', ::Klarna::API::CURRENCIES[:SEK], ::Klarna::API::COUNTRIES[:SE], ::Klarna::API::LANGUAGES[:SV], ::Klarna::API::PNO_FORMATS[:SE])
42
+
43
+ assert_match /^\d+$/, invoice_no
44
+ end
45
+
46
+ it 'should accept shortcut arguments for: shipment_type, currency, country, language, pno_encoding' do
47
+ invoice_no = @klarna.add_invoice(
48
+ 'USER-4304158399', 'ORDER-1', @order_items, 0, 0, :NORMAL, '4304158399', 'Karl', 'Lidin', @address_SE, '85.230.98.196', :SEK, :SE, :SV, :SE)
49
+
50
+ assert_match /^\d+$/, invoice_no
51
+ end
52
+ end
53
+ end
54
+
55
+ # NOTE: active_invoice don't seem to work with the Klarna 2.0 backend currently, raises "invoice_in_test_mode" (which it didn't before).
56
+
57
+ # Spec:
58
+ # http://integration.klarna.com/en/api/standard-integration/functions/activateinvoice
59
+ # http://integration.klarna.com/en/api/standard-integration/functions/activatepart (combined)
60
+ describe '#activate_invoice' do
61
+ it 'should be defined' do
62
+ assert_respond_to @klarna, :activate_invoice
63
+ end
64
+
65
+ describe 'full' do
66
+ it 'should raise error for when trying to activate an non-existing invoice' do
67
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
68
+ @klarna.activate_invoice(INVALID_ORDER_NO)
69
+ end
70
+ end
71
+
72
+ it 'should successfully activate an existing invoice' # do
73
+ # invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
74
+ #
75
+ # assert_equal "#{@klarna.endpoint_uri}/temp/#{invoice_no}.pdf", @klarna.activate_invoice(invoice_no)
76
+ # end
77
+ end
78
+
79
+ describe 'partial' do
80
+ it 'should raise error for when trying to activate an non-existing invoice' do
81
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
82
+ activate_articles = [@order_items.first]
83
+ @klarna.activate_invoice(INVALID_ORDER_NO, activate_articles)
84
+ end
85
+ end
86
+
87
+ # FAILS: Klarna API 2.0 don't support this for test-accounts. :(
88
+ it 'should successfully activate an existing partial invoice' # do
89
+ # invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
90
+ # activate_articles = [@order_items.first]
91
+ #
92
+ # assert_equal "#{@klarna.endpoint_uri}/temp/#{invoice_no}.pdf", @klarna.activate_invoice(invoice_no, activate_articles)
93
+ # end
94
+ end
95
+ end
96
+
97
+ # Spec:
98
+ # http://integration.klarna.com/en/api/standard-integration/functions/deleteinvoice
99
+ describe '#delete_invoice' do
100
+ it 'should be defined' do
101
+ assert_respond_to @klarna, :delete_invoice
102
+ end
103
+
104
+ it 'should raise error when trying to delete an non-existing invoice' do
105
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
106
+ @klarna.delete_invoice(INVALID_ORDER_NO)
107
+ end
108
+ end
109
+
110
+ it 'should successfully delete an existing invoice' do
111
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
112
+
113
+ assert_equal 'ok', @klarna.delete_invoice(invoice_no)
114
+ end
115
+ end
116
+
117
+ # Spec:
118
+ # http://integration.klarna.com/en/api/invoice-handling-functions/functions/returnamount
119
+ describe '#return_amount' do
120
+ it 'should be defined' do
121
+ assert_respond_to @klarna, :return_amount
122
+ end
123
+
124
+ it 'should raise error for non-existing invoice' do
125
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
126
+ amount = 100
127
+ vat = 25
128
+ @klarna.return_amount(INVALID_ORDER_NO, amount, vat)
129
+ end
130
+ end
131
+
132
+ it 'should raise error for existing but un-activated invoice' do
133
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
134
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
135
+ amount = 100
136
+ vat = 25
137
+
138
+ assert_equal invoice_no, @klarna.return_amount(invoice_no, amount, vat)
139
+ end
140
+ end
141
+
142
+ # FAILS: Klarna API 2.0 don't support this for test-accounts. :(
143
+ it 'should successfully return amount for an activated invoice' # do
144
+ # invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
145
+ # amount = 100
146
+ # vat = 25
147
+ #
148
+ # assert_equal invoice_no, @klarna.credit_invoice(invoice_no, credit_no)
149
+ # end
150
+ end
151
+
152
+ # Spec:
153
+ # http://integration.klarna.com/en/api/invoice-handling-functions/functions/returnamount
154
+ describe '#credit_invoice' do
155
+ it 'should be defined' do
156
+ assert_respond_to @klarna, :credit_invoice
157
+ end
158
+
159
+ describe 'full' do
160
+ it 'should raise error for non-existing invoice' do
161
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
162
+ credit_no = ''
163
+ @klarna.credit_invoice(INVALID_ORDER_NO, credit_no)
164
+ end
165
+ end
166
+
167
+ it 'should raise error for existing but un-activated invoice' do
168
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
169
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
170
+ credit_no = ''
171
+ @klarna.credit_invoice(invoice_no, credit_no)
172
+ end
173
+ end
174
+
175
+ # FAILS: Klarna API 2.0 don't support this for test-accounts. :(
176
+ it 'should successfully credit an activated invoice' # do
177
+ # invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
178
+ # invoice_url = @klarna.activate_invoice(invoice_no)
179
+ # credit_no = ''
180
+ #
181
+ # assert_equal invoice_no, @klarna.credit_invoice(invoice_no, credit_no)
182
+ # end
183
+ end
184
+
185
+ describe 'partial' do
186
+ it 'should raise error for existing but un-activated invoice' do
187
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
188
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
189
+ refund_articles = [@order_items.first]
190
+ credit_no = ''
191
+ @klarna.credit_invoice(invoice_no, credit_no, refund_articles)
192
+ end
193
+ end
194
+
195
+ it 'should successfully credit an activated invoice' # do
196
+ # invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
197
+ # invoice_url = @klarna.activate_invoice(invoice_no)
198
+ # refund_articles = [@order_items.first]
199
+ # credit_no = ''
200
+ #
201
+ # assert_equal invoice_no, @klarna.credit_invoice(invoice_no, credit_no, refund_articles)
202
+ # end
203
+ end
204
+ end
205
+
206
+ # Spec:
207
+ # http://integration.klarna.com/en/api/invoice-handling-functions/functions/emailinvoice
208
+ describe '#email_invoice' do
209
+ it 'should be defined' do
210
+ assert_respond_to @klarna, :email_invoice
211
+ end
212
+
213
+ it 'should raise error for e-mail request of an existing but un-activated invoice' do
214
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
215
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
216
+ @klarna.email_invoice(invoice_no)
217
+ end
218
+ end
219
+
220
+ # FAILS: Klarna API 2.0 don't support this for test-accounts. :(
221
+ it 'should successfully accept email request of an activated invoice' # do
222
+ # invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
223
+ # invoice_url = @klarna.activate_invoice(invoice_no)
224
+ #
225
+ # assert_equal invoice_no, @klarna.email_invoice(invoice_no)
226
+ # end
227
+ end
228
+
229
+ # Spec:
230
+ # http://integration.klarna.com/en/api/invoice-handling-functions/functions/sendinvoice
231
+ describe '#send_invoice' do
232
+ it 'should be defined' do
233
+ assert_respond_to @klarna, :send_invoice
234
+ end
235
+
236
+ it 'should raise error for snail-mail request of an existing but un-activated invoice' do
237
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
238
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
239
+ @klarna.send_invoice(invoice_no)
240
+ end
241
+ end
242
+
243
+ # FAILS: Klarna API 2.0 don't support this for test-accounts. :(
244
+ it 'should successfully accept snail-mail request of an activated invoice' # do
245
+ # invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
246
+ # invoice_url = @klarna.activate_invoice(invoice_no)
247
+ #
248
+ # assert_equal invoice_no, @klarna.send_invoice(invoice_no)
249
+ # end
250
+ end
251
+
252
+ # Spec:
253
+ # http://integration.klarna.com/en/api/invoice-handling-functions/functions/mkartno
254
+ describe '#make_article' do
255
+ it 'should be defined' do
256
+ assert_respond_to @klarna, :make_article
257
+ end
258
+
259
+ it 'should generate valid article structure' do
260
+ assert_equal [5, '12345'], @klarna.make_article(5, 12345)
261
+ assert_equal [5, '12345'], @klarna.make_article(5, '12345')
262
+ end
263
+ end
264
+
265
+ # Spec:
266
+ # http://integration.klarna.com/en/api/other-functions/functions/updategoodsqty
267
+ describe '#update_goods_quantity' do
268
+ it 'should be defined' do
269
+ assert_respond_to @klarna, :update_goods_quantity
270
+ end
271
+
272
+ it 'should raise error for an non-existing invoice' do
273
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
274
+ @klarna.update_goods_quantity(INVALID_ORDER_NO, 'ABC1', 10)
275
+ end
276
+ end
277
+
278
+ it 'should raise error for an non-existing article-no for an existing invoice' do
279
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
280
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
281
+
282
+ @klarna.update_goods_quantity(invoice_no, 'XXX', 10)
283
+ end
284
+ end
285
+
286
+ it 'should successfully update goods quantity for an existing invoice and valid article-no' do
287
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
288
+
289
+ assert_equal invoice_no, @klarna.update_goods_quantity(invoice_no, 'ABC1', 10)
290
+ end
291
+ end
292
+
293
+ # Spec:
294
+ # http://integration.klarna.com/en/api/other-functions/functions/updatechargeamount
295
+ describe '#update_charge_amount' do
296
+ it 'should be defined' do
297
+ assert_respond_to @klarna, :update_charge_amount
298
+ end
299
+
300
+ it 'should raise error for an non-existing invoice' do
301
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
302
+ @klarna.update_charge_amount(INVALID_ORDER_NO, 1, 10.00 * 100)
303
+ end
304
+ end
305
+
306
+ it 'should successfully update shipment fee for an existing invoice'
307
+
308
+ it 'should successfully update handling fee for an existing invoice'
309
+ end
310
+
311
+ # Spec: http://integration.klarna.com/en/api/other-functions/functions/updateorderno
312
+ describe '#update_order_no' do
313
+ it 'should be defined' do
314
+ assert_respond_to @klarna, :update_order_no
315
+ end
316
+
317
+ it 'should raise error for an non-existing invoice' do
318
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
319
+ @klarna.update_order_no(INVALID_ORDER_NO, '123')
320
+ end
321
+ end
322
+
323
+ # FIXME: Throws "invno"-error - don't know why. :S
324
+ it 'should successfully update order-no for an existing invoice' # do
325
+ # invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
326
+ # new_invoice_no = (invoice_no.to_i + 1).to_s
327
+
328
+ # assert_equal new_invoice_no, @klarna.update_order_no(invoice_no, new_invoice_no)
329
+ # end
330
+ end
331
+
332
+ # Spec:
333
+ # http://integration.klarna.com/en/api/other-functions/functions/invoiceaddress
334
+ describe '#invoice_address' do
335
+ it 'should be defined' do
336
+ assert_respond_to @klarna, :invoice_address
337
+ end
338
+
339
+ it 'should raise error for an non-existing invoice' do
340
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
341
+ @klarna.invoice_address(INVALID_ORDER_NO)
342
+ end
343
+ end
344
+
345
+ it 'should successfully return the address for an existing invoice' do
346
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
347
+
348
+ assert_equal ["Karl", "Lidin", "Junibacksg 42", "23634", "Hollviken", 'SE'], @klarna.invoice_address(invoice_no)
349
+ end
350
+ end
351
+
352
+ # Spec:
353
+ # http://integration.klarna.com/en/api/other-functions/functions/invoiceamount
354
+ # http://integration.klarna.com/en/api/other-functions/functions/invoicepartamount (combined)
355
+ describe '#invoice_amount' do
356
+ it 'should be defined' do
357
+ assert_respond_to @klarna, :invoice_amount
358
+ end
359
+
360
+ describe 'full' do
361
+ it 'should raise error for an non-existing invoice' do
362
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
363
+ @klarna.invoice_amount(INVALID_ORDER_NO)
364
+ end
365
+ end
366
+
367
+ it 'should successfully return the invoice amount for an existing invoice' do
368
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
369
+
370
+ assert_equal @order_items_total, @klarna.invoice_amount(invoice_no)
371
+ end
372
+ end
373
+
374
+ describe 'partial' do
375
+ it 'should raise error for an non-existing invoice' do
376
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
377
+ articles = [@order_items.last]
378
+ @klarna.invoice_amount(INVALID_ORDER_NO, articles)
379
+ end
380
+ end
381
+
382
+ it 'should successfully return the invoice amount for an existing invoice' do
383
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
384
+ articles = [@order_items.last]
385
+
386
+ assert_equal 7*(17.00 * 100), @klarna.invoice_amount(invoice_no, articles)
387
+ end
388
+ end
389
+ end
390
+
391
+ describe '#invoice_paid?' do
392
+ it 'should be defined' do
393
+ assert_respond_to @klarna, :invoice_paid?
394
+ end
395
+
396
+ it 'should raise error for an non-existing invoice' do
397
+ assert_raises ::Klarna::API::Errors::KlarnaServiceError do
398
+ @klarna.invoice_paid?(INVALID_ORDER_NO)
399
+ end
400
+ end
401
+
402
+ it 'should be unpaid for an existing but un-activated invoice' do
403
+ invoice_no = @klarna.add_invoice(*@valid_invoice_args_SE)
404
+
405
+ assert_equal false, @klarna.invoice_paid?(invoice_no)
406
+ end
407
+ end
408
+
409
+ end