sepafm 1.1.8 → 1.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +8 -6
  3. data/Rakefile +1 -1
  4. data/lib/sepa/application_request.rb +12 -18
  5. data/lib/sepa/application_response.rb +0 -2
  6. data/lib/sepa/attribute_checks.rb +33 -28
  7. data/lib/sepa/banks/danske/danske_response.rb +9 -25
  8. data/lib/sepa/banks/danske/soap_danske.rb +1 -1
  9. data/lib/sepa/banks/nordea/nordea_response.rb +2 -16
  10. data/lib/sepa/banks/op/op_response.rb +5 -23
  11. data/lib/sepa/banks/samlink/samlink_response.rb +35 -0
  12. data/lib/sepa/banks/samlink/soap_samlink.rb +14 -0
  13. data/lib/sepa/certificates/samlink_certificate.pem +29 -0
  14. data/lib/sepa/certificates/samlink_root_certificate.pem +32 -0
  15. data/lib/sepa/client.rb +35 -8
  16. data/lib/sepa/error_messages.rb +16 -18
  17. data/lib/sepa/response.rb +7 -11
  18. data/lib/sepa/soap_builder.rb +7 -17
  19. data/lib/sepa/utilities.rb +4 -5
  20. data/lib/sepa/version.rb +1 -1
  21. data/lib/sepa/wsdl/wsdl_samlink_cert_production.xml +82 -0
  22. data/lib/sepa/wsdl/wsdl_samlink_cert_test.xml +82 -0
  23. data/lib/sepa/wsdl/wsdl_samlink_production.xml +160 -0
  24. data/lib/sepa/wsdl/wsdl_samlink_test.xml +160 -0
  25. data/lib/sepa/xml_schemas/samlink/CertApplicationRequest.xsd +105 -0
  26. data/lib/sepa/xml_schemas/samlink/CertApplicationResponse.xsd +88 -0
  27. data/lib/sepa/xml_templates/application_request/download_file.xml +0 -1
  28. data/lib/sepa/xml_templates/application_request/download_file_list.xml +0 -1
  29. data/lib/sepa/xml_templates/application_request/samlink/get_certificate.xml +12 -0
  30. data/lib/sepa/xml_templates/application_request/samlink/renew_certificate.xml +29 -0
  31. data/lib/sepa/xml_templates/soap/samlink/get_certificate.xml +14 -0
  32. data/lib/sepa/xml_templates/soap/samlink/renew_certificate.xml +14 -0
  33. data/lib/sepafm.rb +43 -31
  34. data/readme.md +1 -0
  35. data/sepafm.gemspec +2 -2
  36. data/test/custom_assertions.rb +30 -28
  37. data/test/sepa/banks/danske/danske_cert_response_test.rb +13 -10
  38. data/test/sepa/banks/danske/danske_generic_soap_builder_test.rb +9 -31
  39. data/test/sepa/banks/danske/danske_get_bank_cert_test.rb +4 -5
  40. data/test/sepa/banks/danske/danske_response_test.rb +2 -3
  41. data/test/sepa/banks/danske/responses/create_cert_corrupted.xml +15 -0
  42. data/test/sepa/banks/nordea/nordea_application_request_test.rb +4 -6
  43. data/test/sepa/banks/nordea/nordea_application_response_test.rb +14 -15
  44. data/test/sepa/banks/nordea/nordea_cert_request_soap_builder_test.rb +1 -3
  45. data/test/sepa/banks/nordea/nordea_generic_soap_builder_test.rb +6 -16
  46. data/test/sepa/banks/nordea/nordea_response_test.rb +11 -11
  47. data/test/sepa/banks/op/op_cert_application_request_test.rb +1 -1
  48. data/test/sepa/banks/op/op_cert_request_soap_builder_test.rb +0 -1
  49. data/test/sepa/banks/op/op_response_test.rb +2 -2
  50. data/test/sepa/banks/samlink/responses/dfl.xml +21 -0
  51. data/test/sepa/banks/samlink/responses/gc_error_30.xml +21 -0
  52. data/test/sepa/banks/samlink/responses/rc.xml +21 -0
  53. data/test/sepa/banks/samlink/samlink_application_request_test.rb +36 -0
  54. data/test/sepa/banks/samlink/samlink_cert_application_request_test.rb +13 -0
  55. data/test/sepa/banks/samlink/samlink_cert_request_soap_builder_test.rb +13 -0
  56. data/test/sepa/banks/samlink/samlink_generic_soap_builder_test.rb +34 -0
  57. data/test/sepa/banks/samlink/samlink_renew_cert_application_request_test.rb +36 -0
  58. data/test/sepa/banks/samlink/samlink_renew_cert_request_soap_builder_test.rb +26 -0
  59. data/test/sepa/banks/samlink/samlink_response_test.rb +71 -0
  60. data/test/sepa/client_test.rb +32 -6
  61. data/test/sepa/fixtures.rb +169 -7
  62. data/test/sepa/sepa_test.rb +1 -1
  63. data/test/test_helper.rb +8 -7
  64. data/test_client/data/certs_example.rb +9 -9
  65. data/test_client/data/params_example.rb +18 -19
  66. data/test_client/test_client.rb +6 -0
  67. metadata +41 -5
@@ -1,41 +1,43 @@
1
1
  require 'minitest/assertions'
2
2
 
3
- module Minitest::Assertions
4
- def assert_same_items(expected, actual)
5
- assert same_items(expected, actual),
6
- "Expected #{ expected.inspect } and #{ actual.inspect } to have the same items"
7
- end
3
+ module Minitest
4
+ module Assertions
5
+ def assert_same_items(expected, actual)
6
+ assert same_items(expected, actual),
7
+ "Expected #{expected.inspect} and #{actual.inspect} to have the same items"
8
+ end
8
9
 
9
- def refute_same_items(expected, actual)
10
- refute same_items(expected, actual),
11
- "Expected #{ expected.inspect } and #{ actual.inspect } would not have the same items"
12
- end
10
+ def refute_same_items(expected, actual)
11
+ refute same_items(expected, actual),
12
+ "Expected #{expected.inspect} and #{actual.inspect} would not have the same items"
13
+ end
13
14
 
14
- def assert_valid_against_schema(schema, document)
15
- errors = []
15
+ def assert_valid_against_schema(schema, document)
16
+ errors = []
16
17
 
17
- Dir.chdir(SCHEMA_PATH) do
18
- xsd = Nokogiri::XML::Schema(IO.read(schema))
19
- xsd.validate(document).each do |error|
20
- errors << error
18
+ Dir.chdir(SCHEMA_PATH) do
19
+ xsd = Nokogiri::XML::Schema(IO.read(schema))
20
+ xsd.validate(document).each do |error|
21
+ errors << error
22
+ end
21
23
  end
22
- end
23
24
 
24
- assert errors.empty?, "The following schema validations failed:\n#{errors.join("\n")}"
25
- end
25
+ assert errors.empty?, "The following schema validations failed:\n#{errors.join("\n")}"
26
+ end
26
27
 
27
- def refute_valid_against_schema(schema, document)
28
- Dir.chdir(SCHEMA_PATH) do
29
- xsd = Nokogiri::XML::Schema(IO.read(schema))
28
+ def refute_valid_against_schema(schema, document)
29
+ Dir.chdir(SCHEMA_PATH) do
30
+ xsd = Nokogiri::XML::Schema(IO.read(schema))
30
31
 
31
- refute xsd.valid?(document)
32
+ refute xsd.valid?(document)
33
+ end
32
34
  end
33
- end
34
35
 
35
- private
36
+ private
36
37
 
37
- def same_items(expected, actual)
38
- actual.is_a?(Enumerable) && expected.is_a?(Enumerable) &&
39
- expected.count == actual.count && actual.all? { |e| expected.include?(e) }
40
- end
38
+ def same_items(expected, actual)
39
+ actual.is_a?(Enumerable) && expected.is_a?(Enumerable) &&
40
+ expected.count == actual.count && actual.all? { |e| expected.include?(e) }
41
+ end
42
+ end
41
43
  end
@@ -1,23 +1,28 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class DanskeCertResponseTest < ActiveSupport::TestCase
4
-
5
4
  setup do
6
5
  options = {
7
- response: File.read("#{DANSKE_TEST_RESPONSE_PATH}get_bank_cert.xml"),
8
- command: :get_bank_certificate
6
+ response: File.read("#{DANSKE_TEST_RESPONSE_PATH}get_bank_cert.xml"),
7
+ command: :get_bank_certificate,
9
8
  }
10
9
  @get_bank_cert_response = Sepa::DanskeResponse.new options
11
10
 
12
11
  options = {
13
- response: File.read("#{DANSKE_TEST_RESPONSE_PATH}create_cert.xml"),
14
- command: :create_certificate
12
+ response: File.read("#{DANSKE_TEST_RESPONSE_PATH}create_cert.xml"),
13
+ command: :create_certificate,
15
14
  }
16
15
  @create_certificate_response = Sepa::DanskeResponse.new options
17
16
 
17
+ options = {
18
+ response: File.read("#{DANSKE_TEST_RESPONSE_PATH}create_cert_corrupted.xml"),
19
+ command: :create_certificate,
20
+ }
21
+ @create_certificate_corrupted_response = Sepa::DanskeResponse.new options
22
+
18
23
  options = {
19
24
  response: File.read("#{DANSKE_TEST_RESPONSE_PATH}get_bank_certificate_not_ok.xml"),
20
- command: :get_bank_certificate
25
+ command: :get_bank_certificate,
21
26
  }
22
27
  @get_bank_certificate_not_ok_response = Sepa::DanskeResponse.new options
23
28
  end
@@ -75,9 +80,8 @@ class DanskeCertResponseTest < ActiveSupport::TestCase
75
80
  end
76
81
 
77
82
  test 'hashes shouldnt match when data is corrupted' do
78
- assert_output /These digests failed to verify: {"#response"=>"2vCYl3h7ksRgk7IyV2axgpXxTWM="}/ do
79
- @create_certificate_response.doc.at('xmlns|ReturnText', xmlns: DANSKE_PKI).content = 'kana'
80
- refute @create_certificate_response.hashes_match?({ verbose: true })
83
+ assert_output(/These digests failed to verify: {"#response"=>"2vCYl3h7ksRgk7IyV2axgpXxTWM="}/) do
84
+ refute @create_certificate_corrupted_response.hashes_match?(verbose: true)
81
85
  end
82
86
  end
83
87
 
@@ -107,5 +111,4 @@ class DanskeCertResponseTest < ActiveSupport::TestCase
107
111
  x509_certificate certificate
108
112
  end
109
113
  end
110
-
111
114
  end
@@ -1,19 +1,7 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
4
-
5
4
  def setup
6
- keys_path = File.expand_path('../keys', __FILE__)
7
-
8
- signing_private_key_path = "#{keys_path}/signing_key.pem"
9
- signing_private_key = File.read signing_private_key_path
10
-
11
- signing_certificate_path = "#{keys_path}/own_signing_cert.pem"
12
- signing_certificate = File.read signing_certificate_path
13
-
14
- encryption_certificate_path = "#{keys_path}/own_enc_cert.pem"
15
- encryption_certificate = File.read encryption_certificate_path
16
-
17
5
  @danske_generic_params = danske_generic_params
18
6
 
19
7
  # Convert keys in danske generic params, because this is usually done by the client
@@ -71,13 +59,13 @@ class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
71
59
  @danske_generic_params[:command] = :wrong_command
72
60
 
73
61
  assert_raises(ArgumentError) do
74
- soap = Sepa::SoapBuilder.new(@danske_generic_params)
62
+ Sepa::SoapBuilder.new(@danske_generic_params)
75
63
  end
76
64
  end
77
65
 
78
66
  def test_sender_id_is_properly_set
79
67
  assert_equal @danske_generic_params[:customer_id],
80
- @doc.at("//bxd:SenderId", 'bxd' => 'http://model.bxd.fi').content
68
+ @doc.at("//bxd:SenderId", 'bxd' => 'http://model.bxd.fi').content
81
69
  end
82
70
 
83
71
  def test_request_id_is_properly_set
@@ -120,7 +108,7 @@ class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
120
108
  ).content
121
109
 
122
110
  actual_certificate = x509_certificate(
123
- @danske_generic_params.fetch(:own_signing_certificate)
111
+ @danske_generic_params.fetch(:own_signing_certificate),
124
112
  ).to_s
125
113
 
126
114
  actual_certificate = actual_certificate.split('-----BEGIN CERTIFICATE-----')[1]
@@ -141,10 +129,7 @@ class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
141
129
  "//env:Body", 'env' => 'http://schemas.xmlsoap.org/soap/envelope/'
142
130
  )
143
131
 
144
- body_node = body_node.canonicalize(
145
- mode = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0,
146
- inclusive_namespaces = nil, with_comments = false
147
- )
132
+ body_node = canonicalize_exclusively(body_node)
148
133
 
149
134
  actual_digest = encode(sha1.digest(body_node)).strip
150
135
 
@@ -173,7 +158,7 @@ class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
173
158
  timestamp = Time.strptime(timestamp_node.content, '%Y-%m-%dT%H:%M:%S%z')
174
159
 
175
160
  assert timestamp <= (Time.now + 300) &&
176
- timestamp > ((Time.now + 300) - 60)
161
+ timestamp > ((Time.now + 300) - 60)
177
162
  end
178
163
 
179
164
  def test_header_timestamps_digest_is_calculated_correctly
@@ -188,10 +173,7 @@ class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
188
173
  "//wsu:Timestamp", 'wsu' => wsu
189
174
  )
190
175
 
191
- timestamp_node = timestamp_node.canonicalize(
192
- mode = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0, inclusive_namespaces = nil,
193
- with_comments = false
194
- )
176
+ timestamp_node = canonicalize_exclusively(timestamp_node)
195
177
 
196
178
  actual_digest = encode(sha1.digest(timestamp_node)).strip
197
179
 
@@ -205,18 +187,15 @@ class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
205
187
 
206
188
  added_signature = @doc.at(
207
189
  "//dsig:SignatureValue",
208
- 'dsig' => 'http://www.w3.org/2000/09/xmldsig#'
190
+ 'dsig' => 'http://www.w3.org/2000/09/xmldsig#',
209
191
  ).content
210
192
 
211
193
  signed_info_node = @doc.at("//dsig:SignedInfo", 'dsig' => 'http://www.w3.org/2000/09/xmldsig#')
212
194
 
213
- signed_info_node = signed_info_node.canonicalize(
214
- mode = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0, inclusive_namespaces = nil,
215
- with_comments = false
216
- )
195
+ signed_info_node = canonicalize_exclusively(signed_info_node)
217
196
 
218
197
  actual_signature = encode(
219
- private_key.sign(sha1, signed_info_node)
198
+ private_key.sign(sha1, signed_info_node),
220
199
  ).gsub(/\s+/, "")
221
200
 
222
201
  assert_equal actual_signature, added_signature
@@ -251,5 +230,4 @@ class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
251
230
  assert_nil application_request.at('ApplicationRequest')
252
231
  assert_not_nil application_request.at('xenc|EncryptedData')
253
232
  end
254
-
255
233
  end
@@ -1,14 +1,13 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class DanskeGetBankCertTest < ActiveSupport::TestCase
4
-
5
4
  def setup
6
5
  @get_bank_cert_params = {
7
6
  bank: :danske,
8
7
  command: :get_bank_certificate,
9
8
  bank_root_cert_serial: '1111110002',
10
9
  customer_id: '360817',
11
- request_id: SecureRandom.hex(5)
10
+ request_id: SecureRandom.hex(5),
12
11
  }
13
12
 
14
13
  @doc = Sepa::SoapBuilder.new(@get_bank_cert_params)
@@ -33,12 +32,12 @@ class DanskeGetBankCertTest < ActiveSupport::TestCase
33
32
 
34
33
  def test_sender_id_is_properly_set
35
34
  assert_equal @get_bank_cert_params[:customer_id],
36
- @doc.at('SenderId', 'xmlns' => @pkif).content
35
+ @doc.at('SenderId', 'xmlns' => @pkif).content
37
36
  end
38
37
 
39
38
  def test_customer_id_is_properly_set
40
39
  assert_equal @get_bank_cert_params[:customer_id],
41
- @doc.at('CustomerId', 'xmlns' => @pkif).content
40
+ @doc.at('CustomerId', 'xmlns' => @pkif).content
42
41
  end
43
42
 
44
43
  def test_header_request_id_is_properly_set
@@ -62,7 +61,7 @@ class DanskeGetBankCertTest < ActiveSupport::TestCase
62
61
 
63
62
  def test_bank_root_cert_serial_is_correctly_set
64
63
  assert_equal @get_bank_cert_params[:bank_root_cert_serial],
65
- @doc.at('BankRootCertificateSerialNo', 'xmlns' => @elem).content
64
+ @doc.at('BankRootCertificateSerialNo', 'xmlns' => @elem).content
66
65
  end
67
66
 
68
67
  def test_request_timestamp_is_set_correctly
@@ -3,7 +3,6 @@ require 'test_helper'
3
3
  # Tests Danske Bank specific response stuff
4
4
  class DanskeResponseTest < ActiveSupport::TestCase
5
5
  setup do
6
-
7
6
  # The private key of the certificate used to encrypt
8
7
  # the response which can be used to decrypt it
9
8
  encryption_private_key = '-----BEGIN RSA PRIVATE KEY-----
@@ -37,7 +36,7 @@ l+Ul4l4+FfAysq3a7b3xoQ59kN1CrEWqDo2KqndxGv6wQft3n/dxnQ==
37
36
  options = {
38
37
  response: File.read("#{DANSKE_TEST_RESPONSE_PATH}/download_file_list.xml"),
39
38
  command: :download_file_list,
40
- encryption_private_key: rsa_key(encryption_private_key)
39
+ encryption_private_key: rsa_key(encryption_private_key),
41
40
  }
42
41
  @download_file_list_response = Sepa::DanskeResponse.new options
43
42
  end
@@ -87,7 +86,7 @@ ufGDBuk6Qe7BSx+/iYvjK1o/IP42RSwj7Ar/IaQuzzfxsflqrGA=
87
86
  options = {
88
87
  response: File.read("#{DANSKE_TEST_RESPONSE_PATH}/download_file_list.xml"),
89
88
  command: :download_file_list,
90
- encryption_private_key: rsa_key(wrong_encryption_private_key)
89
+ encryption_private_key: rsa_key(wrong_encryption_private_key),
91
90
  }
92
91
  response = Sepa::DanskeResponse.new options
93
92
 
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pkif="http://danskebank.dk/PKI/PKIFactoryService" xmlns:elem="http://danskebank.dk/PKI/PKIFactoryService/elements" xmlns:xd="http://www.w3.org/2000/09/xmldsig#"><soapenv:Header/><soapenv:Body><CreateCertificateOut xmlns="http://danskebank.dk/PKI/PKIFactoryService"><pkif:ResponseHeader xmlns=""><pkif:SenderId>360817</pkif:SenderId><pkif:CustomerId>360817</pkif:CustomerId><pkif:RequestId>fad29587b6</pkif:RequestId><pkif:Timestamp>2014-08-06T11:00:03Z</pkif:Timestamp><pkif:InterfaceVersion>1</pkif:InterfaceVersion><pkif:Environment>customertest</pkif:Environment></pkif:ResponseHeader><tns:CreateCertificateResponse xml:id="response" xmlns:tns="http://danskebank.dk/PKI/PKIFactoryService/elements" xmlns=""><tns:ReturnCode>00</tns:ReturnCode><tns:ReturnText>OK</tns:ReturnText><tns:EncryptionCert>MIIDnzCCAoegAwIBAgIHHoy+tGx4NjANBgkqhkiG9w0BAQsFADCBwjEQMA4GA1UEAxMHREJHQ0FEQjELMAkGA1UEBhMCREsxEzARBgNVBAcTCkNvcGVuaGFnZW4xEDAOBgNVBAgTB0Rlbm1hcmsxGjAYBgNVBAoTEURhbnNrZSBCYW5rIEdyb3VwMRgwFgYDVQQLEw9EYW5za2UgQmFuayBBL1MxGDAWBgNVBAUTDzYxMTI2MjI4MjIzMDEwMTEJMAcGA1UEBBMAMQkwBwYDVQQqEwAxCTAHBgNVBAwTADEJMAcGA1UEERMAMB4XDTEwMDUyODExMTgzOVoXDTEyMDUyNzExMTgzOVowgaYxIDAeBgNVBAMTF0JFTkdUU1NPTiBPRyBGUi4gSkVOU0VOMQswCQYDVQQGEwJESzEcMBoGA1UEChMTREJUUyBERU1PIDEuICgzNEFLKTEeMBwGA1UECxMVQ09SUE9SQVRFIERFVkVMT1BNRU5UMTcwNQYDVQQFEy5TRS1LRVJIVi9EQUJBOjAwOTIxMDA4NDEtQUdSOjA2MTA0OC1VU1I6MDYxMTMzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvWdhjVCuWXWu4H8WqUJGuvme+6l0g37fAXur3Xm28RChzvhue7pvwhtsZEyHN3Oa9DhLMV9UQC4wy5Md7Js+rm2HtgOtM2LMorE4GeoTYpi5f1fbYDUqHj2ygkkWDqQ9v0xSCJkGIyW+1vsrcId+DDlZqBacuXwtv5xy8plmX7wIDAQABozgwNjAJBgNVHQ4EAgQAMBkGA1UdIwQSMBCADsLGxMP29vnBwsTCxsTDMA4GA1UdDwEB/wQEAwIEMDANBgkqhkiG9w0BAQsFAAOCAQEAkITeNDN6Mxkb8AXF9SjZ1xfWD+yZcyb5wqQmpvwlM1gfovvV5mW/r2Wgn8uyhwwZd8dDJClNRslQeQrV8FbmCF8uh0dr1z2pt/t3u6lZ5YH1MWmLKGpJ8gGnWkRwEtkeZCuaD+Nji6YCGqCPytmKae+CFvz46XrvQ+VxfoqD8IlSoT2Himw6kfbE7H5oyJtuBSjozz+zz9GE09HQzCn3j1AX1jF0U0qFOXOR185NnDHtQPBytUOOBHBNog1+bVfby7E1nmXum38pMVnv5ReSvnhKhmusmxkHaKCGwgYCoKMvsXntHStvmH/t4tGdNyLvmC/88GYfoBXtNrsuZV3Ew==</tns:EncryptionCert><tns:SigningCert>MIIDnzCCAoegAwIBAgIHHoy+tGx4NTANBgkqhkiG9w0BAQsFADCBwjEQMA4GA1UEAxMHREJHQ0FEQjELMAkGA1UEBhMCREsxEzARBgNVBAcTCkNvcGVuaGFnZW4xEDAOBgNVBAgTB0Rlbm1hcmsxGjAYBgNVBAoTEURhbnNrZSBCYW5rIEdyb3VwMRgwFgYDVQQLEw9EYW5za2UgQmFuayBBL1MxGDAWBgNVBAUTDzYxMTI2MjI4MjIzMDEwMTEJMAcGA1UEBBMAMQkwBwYDVQQqEwAxCTAHBgNVBAwTADEJMAcGA1UEERMAMB4XDTEwMDUyODExMTgzOVoXDTEyMDUyNzExMTgzOVowgaYxIDAeBgNVBAMTF0JFTkdUU1NPTiBPRyBGUi4gSkVOU0VOMQswCQYDVQQGEwJESzEcMBoGA1UEChMTREJUUyBERU1PIDEuICgzNEFLKTEeMBwGA1UECxMVQ09SUE9SQVRFIERFVkVMT1BNRU5UMTcwNQYDVQQFEy5TRS1LRVJIVi9EQUJBOjAwOTIxMDA4NDEtQUdSOjA2MTA0OC1VU1I6MDYxMTMzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfh+ajEvsFS1kByPsjReO+EmyFglGDiCBh7voya2aSbvGMQm/aAYugTliAhoklq4adwUwqjf86gon3ZdUMDBmDpJiPlxeexBHesOjr32hxzO8u67tS5o1xfDex3ga192g+94pAJsqmn3Fc8LJ0Wn2zJPtYCTYvbrx6551QLiD3fwIDAQABozgwNjAJBgNVHQ4EAgQAMBkGA1UdIwQSMBCADsLGxMP29vnBwsTCxsTDMA4GA1UdDwEB/wQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAQEASgxJaAoWP08MKVnuvNxG7EkmogFUfKCX7fWrHYxDzEs5uhnRQ6IR4GitTHEM/BE5KNGu6MuHuKMhp4HuMBg5YzaFtk5yFk+K6BjLEEFwz/NBFLyrtPmrezxjmxMYx4PRTqeyEthOIkZ1KFQvzxB1Vg2Kt5fqdvxKVODAFstJB2nE3uICnrOQmHlo/R/1rp0J/VQnOsWdgKmIFhFlFdFpWhI7m1ry7cuilHPdCHq+M83jGfTYVXulwbxDYv0LPHZGzCxoAnxZQM4r2HqwXTCZiRT/eP+fEv7A571aHb9GhJhQQQ0lStd1vhOJu1LlO3fe68SSKSye5CozKwvvlEwbag==</tns:SigningCert><tns:CACert>MIIEFzCCAv+gAwIBAgIFAc+WvjUwDQYJKoZIhvcNAQELBQAwgZgxEDAOBgNVBAMTB0RCR1JPT1QxCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYDVQQIEwdEZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UECxMRRGFuc2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MTEzMDAwMzAeFw0xMDEwMTEwMDAwMDBaFw0yMDEwMTEwMDAwMDBaMIGaMRAwDgYDVQQDEwdEQkdTV0RLMQswCQYDVQQGEwJESzETMBEGA1UEBxMKQ29wZW5oYWdlbjEQMA4GA1UECBMHRGVubWFyazEaMBgGA1UEChMRRGFuc2tlIEJhbmsgR3JvdXAxHDAaBgNVBAsTE0RhbnNrZSBCYW5rIERlbm1hcmsxGDAWBgNVBAUTDzYxMTI2MjI4NzczMDEwMTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAOC0DrY9Q4HzHQ/BWr/RWB1GOq+90BiGN85uhWAeGGMI2od/ahn/R7zl8+MNcMLAuVHB8LvzRrC3lxZqjNvRKv8fYsMgwdmdYtBwiqHINpXTLjQxtLEWqEu5fiMZAi1oFE08YAkCDLUGopbkY+d2KULqxFK2blwHi3m0jOwuZGiw4ELeChGcELsOpCT/oJU5mR3dFHbRs3HBgWmuFwJKvwHNZeNAmrCwEUWqw1x4MjQRHRGl10TfTNqPrd7zyTfyR0+GPy1INxHwWZroBUc9j54ONX9pV6x835WedHdo80UxImjCiIruClzsMAXYtvsC3d9xgk9oLNFIVPRe2fTs07ECAQOjZjBkMB8GA1UdIwQYMBaAFLU6ie9kUC8x5CDLauuTRJBL35qYMB0GA1UdDgQWBBQO5nD7QkqlQCrxigdJncTYo20tIzAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkqhkiG9w0BAQsFAAOCAQEAQPCp0H3g88CZZurq0kS76ozBVRiLZ3V8S0+IYi0dmMCfTpW/qnEzMGn+NlHOvgkm5C2VaHCdbEzZPsvv4cx2YrqpsFf8x+Ts6W2r3VVjOdve5u0Oj1CK/ONwaqUl5p4SxRCfnv6sSh6TwxhJF/zESiHXLdyWdJf+NkXsATE6QB4ZjgaGw1NcvhnDUvbbfUZ1zOTIf7+wUpfCNCJi0T1sFvJ88nYkVoQmVWQFS7Kwj+kwQ1ILfnp/1xbycrt1XNxZ8SkRDAWOJARY0fS/C0o7/1t/SB2ePrY/g0U8ZWi0B6odT5isGNpLOKzhD5YGjbKGesC9GEnhmhLoawXU7b4Wcw==</tns:CACert><tns:RequestId/><Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
3
+ <SignedInfo>
4
+ <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
5
+ <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
6
+ <Reference URI="#response">
7
+ <Transforms>
8
+ <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
9
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
10
+ </Transforms>
11
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
12
+ <DigestValue>2vCYl3h7ksRgk7IyV2axgpXxTWM=</DigestValue>
13
+ </Reference>
14
+ </SignedInfo>
15
+ <SignatureValue>Vxs+AC28A9SGKjbuXKaWDZ3nxd1PW/JT5CJth7hGpv6+G/M/uiIKvHipdM5VilLdgPg8ocICJaKTPXg+pMzT2UkqgAQHBCh4JGBkIz0TR5tTppCs5pPO+rd/z6fGQU7gELLddh21pa58QtgAswgJtiIOupFG+wS5ocZTH//vryP/Rxh4VivMNg/jnvse2nETnchk+WCDl5iB0xbsuVRyAvFlw0SL1VWSqmLsDInoo8rQAFoc5A51mqP4ODaqSiK4shml7pOxj/JmRNrDQYOFuVoVIt/M/RTJWzc8nzXnnHc3ssSBKCsXv/x/mAmLBvBDpBOYQxLvu8zdFkLGZTGp+Q==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIEADCCAuigAwIBAgIFAMa3bfQwDQYJKoZIhvcNAQELBQAwgZgxEDAOBgNVBAMTB0RCR1JPT1QxCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYDVQQIEwdEZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UECxMRRGFuc2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MTExMDAwMjAeFw0xNDA3MDcwMDAwMDBaFw0xNjA2MjYwMDAwMDBaMIGXMQ8wDQYDVQQDEwZEUFNJR04xCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYDVQQIEwdEZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UECxMRRGFuc2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MzkxMDAwNDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAMTopJ9GZXRkKm4Rq9M92EawXIfSI7VL0sykOzLfBzrgYMpqJ7rFxJe7nzECw22TeQ/3m4Gjnhe8XVaKSUDbfYfWzWD44iiZfecMaDZYIyR3g7GMwQowfwTqHhSEjFgfzH3QuGH2KGmqycvyuNGsbWjzvDAov8Yf7F88A4aOkseISO3Vmt2ElKm+gs09z7pwak6OxegDu5ZySS39kpTvq1DK3w2vXkEQGJUYOnDG/723v/hK3GjxclViu1OGSga7UJApjm3ky4s9EWoumf/vLBAnqRp6biOKnkGmOJEJlT00VWjaRoDarKOjgC7b/05Xp0ynDSOwqvTI92BdAQwfgEsCAQOjUjBQMB8GA1UdIwQYMBaAFIT65b/ekUlm38WKUsOzt7MgHMdtMB0GA1UdDgQWBBSh3exlGZ8eC4EiAVvbxenmc9faUzAOBgNVHQ8BAf8EBAMCBsAwDQYJKoZIhvcNAQELBQADggEBACjZJx8+UEcAYXJzstd+6E2wBNmmSvUTiuG7+Vws4+l4eqLLrHkhi66FOEwPdnf5/t8k7h5ry61aEf+HdUcQuYRrf7hJPkFjxaMcMGss4uURjVt/R/GhWMgu6cYgUIq0NHIMqdYH4dM/19qv7E+je2D3BuJOE3ucqe4Ywd+W2WP8HGlA3PkpMV78SPA9N/Usg3VX2KVbdS3idTpSMpxQftjWXmJtef0KawvYmYOw7i+eazHmv5mgxhgCvJSCPHN6oGS7v5AVVz9RCjSWEKIXZE0wRSLuTFYzt7/7CgRsdTVwpkFzn+ZJUAjYBPhZQ3Xn3p03DyCFsvtLxwE17UpUFUU=</X509Certificate><X509IssuerSerial><X509IssuerName>serialNumber=611262281110002, OU=Danske Bank Group, O=Danske Bank Group, ST=Denmark, L=Copenhagen, C=DK, CN=DBGROOT</X509IssuerName><X509SerialNumber>3333910004</X509SerialNumber></X509IssuerSerial></X509Data></KeyInfo></Signature></tns:CreateCertificateResponse></CreateCertificateOut></soapenv:Body></soapenv:Envelope>
@@ -178,7 +178,7 @@ class NordeaApplicationRequestTest < ActiveSupport::TestCase
178
178
  assert_raises(ArgumentError) do
179
179
  @nordea_generic_params[:command] = :wrong_kind_of_command
180
180
  ar = Sepa::ApplicationRequest.new(@nordea_generic_params)
181
- doc = ar.get_as_base64
181
+ ar.get_as_base64
182
182
  end
183
183
  end
184
184
 
@@ -201,10 +201,9 @@ class NordeaApplicationRequestTest < ActiveSupport::TestCase
201
201
  end
202
202
 
203
203
  def test_signature_is_constructed_correctly
204
- #private_key = @params.fetch(:private_key)
205
-
206
204
  signed_info_node = @doc_file.at_css(
207
- "dsig|SignedInfo", 'dsig' => 'http://www.w3.org/2000/09/xmldsig#')
205
+ "dsig|SignedInfo", 'dsig' => 'http://www.w3.org/2000/09/xmldsig#'
206
+ )
208
207
 
209
208
  # The value of the signature node in the constructed ar
210
209
  calculated_signature = @doc_file.at_css(
@@ -216,8 +215,7 @@ class NordeaApplicationRequestTest < ActiveSupport::TestCase
216
215
  private_key = rsa_key(File.read("#{keys_path}/nordea.key"))
217
216
 
218
217
  sha1 = OpenSSL::Digest::SHA1.new
219
- actual_signature = encode(private_key.sign(
220
- sha1, signed_info_node.canonicalize))
218
+ actual_signature = encode(private_key.sign(sha1, signed_info_node.canonicalize))
221
219
 
222
220
  # And then of course assert the two are equal
223
221
  assert_equal calculated_signature, actual_signature
@@ -8,28 +8,28 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
8
8
  def setup
9
9
  options = {
10
10
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/dfl.xml"),
11
- command: :download_file_list
11
+ command: :download_file_list,
12
12
  }
13
13
  @dfl = Sepa::NordeaResponse.new(options).application_response
14
14
  @dfl_doc = xml_doc @dfl
15
15
 
16
16
  options = {
17
17
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/uf.xml"),
18
- command: :upload_file
18
+ command: :upload_file,
19
19
  }
20
20
  @uf = Sepa::NordeaResponse.new(options).application_response
21
21
  @uf_doc = xml_doc @dfl
22
22
 
23
23
  options = {
24
24
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/df_tito.xml"),
25
- command: :download_file
25
+ command: :download_file,
26
26
  }
27
27
  @df_tito = Sepa::NordeaResponse.new(options).application_response
28
28
  @df_tito_doc = xml_doc @df_tito
29
29
 
30
30
  options = {
31
31
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/gui.xml"),
32
- command: :get_user_info
32
+ command: :get_user_info,
33
33
  }
34
34
  @gui = Sepa::NordeaResponse.new(options).application_response
35
35
  @gui_doc = xml_doc @gui
@@ -90,7 +90,7 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
90
90
  def test_invalid_df_hash_check_should_not_verify
91
91
  digest_value_node = @df_tito_doc.at_css(
92
92
  'xmlns|DigestValue',
93
- 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
93
+ 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#',
94
94
  )
95
95
 
96
96
  digest_value_node.content = digest_value_node.content[4..-1]
@@ -101,7 +101,7 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
101
101
  def test_invalid_gui_hash_check_should_not_verify
102
102
  digest_value_node = @gui_doc.at_css(
103
103
  'xmlns|DigestValue',
104
- 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
104
+ 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#',
105
105
  )
106
106
 
107
107
  digest_value_node.content = '1234' + digest_value_node.content
@@ -128,7 +128,7 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
128
128
  def test_corrupted_signature_in_dfl_should_fail_signature_verification
129
129
  signature_node = @dfl_doc.at_css(
130
130
  'xmlns|SignatureValue',
131
- 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
131
+ 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#',
132
132
  )
133
133
 
134
134
  signature_node.content = signature_node.content[4..-1]
@@ -139,7 +139,7 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
139
139
  def test_corrupted_signature_in_uf_should_fail_signature_verification
140
140
  signature_node = @uf_doc.at_css(
141
141
  'xmlns|SignatureValue',
142
- 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
142
+ 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#',
143
143
  )
144
144
 
145
145
  signature_node.content = signature_node.content[0..-5]
@@ -150,7 +150,7 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
150
150
  def test_corrupted_signature_in_df_should_fail_signature_verification
151
151
  signature_node = @df_tito_doc.at_css(
152
152
  'xmlns|SignatureValue',
153
- 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
153
+ 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#',
154
154
  )
155
155
 
156
156
  signature_node.content = 'a' + signature_node.content[1..-1]
@@ -161,7 +161,7 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
161
161
  def test_corrupted_signature_in_gui_should_fail_signature_verification
162
162
  signature_node = @gui_doc.at_css(
163
163
  'xmlns|SignatureValue',
164
- 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
164
+ 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#',
165
165
  )
166
166
 
167
167
  signature_node.content = 'zombi' + signature_node.content[1..-1]
@@ -172,7 +172,7 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
172
172
  def test_should_raise_error_if_certificate_corrupted_in_dfl
173
173
  cert_node = @dfl_doc.at_css(
174
174
  'xmlns|X509Certificate',
175
- 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
175
+ 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#',
176
176
  )
177
177
 
178
178
  cert_node.content = cert_node.content[0..-5]
@@ -185,7 +185,7 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
185
185
  def test_should_raise_error_if_certificate_corrupted_in_uf
186
186
  cert_node = @uf_doc.at_css(
187
187
  'xmlns|X509Certificate',
188
- 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
188
+ 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#',
189
189
  )
190
190
 
191
191
  cert_node.content = cert_node.content[4..-1]
@@ -198,7 +198,7 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
198
198
  def test_should_raise_error_if_certificate_corrupted_in_df
199
199
  cert_node = @df_tito_doc.at_css(
200
200
  'xmlns|X509Certificate',
201
- 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
201
+ 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#',
202
202
  )
203
203
 
204
204
  cert_node.content = "n5iw#{cert_node.content}"
@@ -211,7 +211,7 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
211
211
  def test_should_raise_error_if_certificate_corrupted_in_gui
212
212
  cert_node = @gui_doc.at_css(
213
213
  'xmlns|X509Certificate',
214
- 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
214
+ 'xmlns' => 'http://www.w3.org/2000/09/xmldsig#',
215
215
  )
216
216
 
217
217
  cert_node.content = encode 'voivoi'
@@ -235,5 +235,4 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
235
235
  test 'to_s works' do
236
236
  assert_equal @uf, @uf_ar.to_s
237
237
  end
238
-
239
238
  end
@@ -1,7 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class NordeaCertRequestSoapBuilderTest < ActiveSupport::TestCase
4
-
5
4
  def setup
6
5
  @nordea_get_certificate_params = nordea_get_certificate_params
7
6
  @certrequest = Sepa::SoapBuilder.new(@nordea_get_certificate_params)
@@ -30,7 +29,7 @@ class NordeaCertRequestSoapBuilderTest < ActiveSupport::TestCase
30
29
  def test_should_raise_error_if_command_not_correct
31
30
  @nordea_get_certificate_params[:command] = :wrong_command
32
31
  assert_raises(ArgumentError) do
33
- soap = Sepa::SoapBuilder.new(@nordea_get_certificate_params).to_xml
32
+ Sepa::SoapBuilder.new(@nordea_get_certificate_params).to_xml
34
33
  end
35
34
  end
36
35
 
@@ -58,5 +57,4 @@ class NordeaCertRequestSoapBuilderTest < ActiveSupport::TestCase
58
57
  def test_should_validate_against_schema
59
58
  assert_valid_against_schema 'soap.xsd', @xml
60
59
  end
61
-
62
60
  end
@@ -1,7 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class NordeaGenericSoapBuilderTest < ActiveSupport::TestCase
4
-
5
4
  def setup
6
5
  @nordea_generic_params = nordea_generic_params
7
6
 
@@ -62,13 +61,13 @@ class NordeaGenericSoapBuilderTest < ActiveSupport::TestCase
62
61
  @nordea_generic_params[:command] = :wrong_command
63
62
 
64
63
  assert_raises(ArgumentError) do
65
- soap = Sepa::SoapBuilder.new(@nordea_generic_params)
64
+ Sepa::SoapBuilder.new(@nordea_generic_params)
66
65
  end
67
66
  end
68
67
 
69
68
  def test_sender_id_is_properly_set
70
69
  assert_equal @nordea_generic_params[:customer_id],
71
- @doc.xpath("//bxd:SenderId", 'bxd' => 'http://model.bxd.fi').first.content
70
+ @doc.xpath("//bxd:SenderId", 'bxd' => 'http://model.bxd.fi').first.content
72
71
  end
73
72
 
74
73
  # Just testing that the content of the node is an actual hex number and that
@@ -156,10 +155,7 @@ class NordeaGenericSoapBuilderTest < ActiveSupport::TestCase
156
155
  "//env:Body", 'env' => 'http://schemas.xmlsoap.org/soap/envelope/'
157
156
  ).first
158
157
 
159
- body_node = body_node.canonicalize(
160
- mode = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0, inclusive_namespaces = nil,
161
- with_comments = false
162
- )
158
+ body_node = canonicalize_exclusively(body_node)
163
159
 
164
160
  actual_digest = encode(sha1.digest(body_node)).strip
165
161
 
@@ -202,10 +198,7 @@ class NordeaGenericSoapBuilderTest < ActiveSupport::TestCase
202
198
  "//wsu:Timestamp", 'wsu' => wsu
203
199
  ).first
204
200
 
205
- timestamp_node = timestamp_node.canonicalize(
206
- mode = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0, inclusive_namespaces = nil,
207
- with_comments = false
208
- )
201
+ timestamp_node = canonicalize_exclusively(timestamp_node)
209
202
 
210
203
  actual_digest = encode(sha1.digest(timestamp_node)).strip
211
204
 
@@ -224,13 +217,10 @@ class NordeaGenericSoapBuilderTest < ActiveSupport::TestCase
224
217
  "//dsig:SignedInfo", 'dsig' => 'http://www.w3.org/2000/09/xmldsig#'
225
218
  ).first
226
219
 
227
- signed_info_node = signed_info_node.canonicalize(
228
- mode = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0, inclusive_namespaces = nil,
229
- with_comments = false
230
- )
220
+ signed_info_node = canonicalize_exclusively(signed_info_node)
231
221
 
232
222
  actual_signature = encode(
233
- signing_private_key.sign(sha1, signed_info_node)
223
+ signing_private_key.sign(sha1, signed_info_node),
234
224
  ).gsub(/\s+/, "")
235
225
 
236
226
  assert_equal actual_signature, added_signature
@@ -6,67 +6,67 @@ class NordeaResponseTest < ActiveSupport::TestCase
6
6
  setup do
7
7
  options = {
8
8
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/dfl.xml"),
9
- command: :download_file_list
9
+ command: :download_file_list,
10
10
  }
11
11
  @dfl = Sepa::NordeaResponse.new options
12
12
 
13
13
  options = {
14
14
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/uf.xml"),
15
- command: :upload_file
15
+ command: :upload_file,
16
16
  }
17
17
  @uf = Sepa::NordeaResponse.new options
18
18
 
19
19
  options = {
20
20
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/df_tito.xml"),
21
- command: :download_file
21
+ command: :download_file,
22
22
  }
23
23
  @df_tito = Sepa::NordeaResponse.new options
24
24
 
25
25
  options = {
26
26
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/df_ktl.xml"),
27
- command: :download_file
27
+ command: :download_file,
28
28
  }
29
29
  @df_ktl = Sepa::NordeaResponse.new options
30
30
 
31
31
  options = {
32
32
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/gui.xml"),
33
- command: :get_user_info
33
+ command: :get_user_info,
34
34
  }
35
35
  @gui = Sepa::NordeaResponse.new options
36
36
 
37
37
  options = {
38
38
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/gc.xml"),
39
- command: :get_certificate
39
+ command: :get_certificate,
40
40
  }
41
41
  @gc = Sepa::NordeaResponse.new options
42
42
 
43
43
  options = {
44
44
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/rc.xml"),
45
- command: :renew_certificate
45
+ command: :renew_certificate,
46
46
  }
47
47
  @rc = Sepa::NordeaResponse.new options
48
48
 
49
49
  options = {
50
50
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/not_ok_response_code.xml"),
51
- command: :download_file_list
51
+ command: :download_file_list,
52
52
  }
53
53
  @not_ok_response_code_response = Sepa::NordeaResponse.new options
54
54
 
55
55
  options = {
56
56
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/download_file_list_no_content.xml"),
57
- command: :download_file_list
57
+ command: :download_file_list,
58
58
  }
59
59
  @response_with_code_24 = Sepa::NordeaResponse.new options
60
60
 
61
61
  options = {
62
62
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/invalid/timestamp_altered.xml"),
63
- command: :download_file_list
63
+ command: :download_file_list,
64
64
  }
65
65
  @timestamp_altered = Sepa::NordeaResponse.new options
66
66
 
67
67
  options = {
68
68
  response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/invalid/body_altered.xml"),
69
- command: :upload_file
69
+ command: :upload_file,
70
70
  }
71
71
  @body_altered = Sepa::NordeaResponse.new options
72
72
  end
@@ -59,7 +59,7 @@ class OpCertApplicationRequestTest < ActiveSupport::TestCase
59
59
  end
60
60
 
61
61
  test "hmac is not set" do
62
- refute @xml.at_css("HMAC"), "HMAC should not be set, but is #{@xml.at_css("HMAC")}"
62
+ refute @xml.at_css("HMAC"), "HMAC should not be set, but is #{@xml.at_css('HMAC')}"
63
63
  end
64
64
 
65
65
  test "validates against schema" do