sepafm 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +14 -30
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +15 -0
  5. data/Gemfile +1 -1
  6. data/LICENSE +16 -4
  7. data/README.md +180 -319
  8. data/Rakefile +7 -2
  9. data/lib/sepa/application_request.rb +100 -131
  10. data/lib/sepa/application_response.rb +28 -84
  11. data/lib/sepa/attribute_checks.rb +169 -0
  12. data/lib/sepa/banks/danske/danske_response.rb +19 -0
  13. data/lib/sepa/banks/danske/soap_danske.rb +132 -0
  14. data/lib/sepa/banks/nordea/nordea_response.rb +20 -0
  15. data/lib/sepa/banks/nordea/soap_nordea.rb +51 -0
  16. data/lib/sepa/client.rb +72 -60
  17. data/lib/sepa/error_messages.rb +15 -0
  18. data/lib/sepa/response.rb +88 -85
  19. data/lib/sepa/soap_builder.rb +51 -341
  20. data/lib/sepa/utilities.rb +132 -0
  21. data/lib/sepa/version.rb +1 -1
  22. data/lib/sepa/xml_schemas/PKIFactory.xsd +334 -0
  23. data/lib/sepa/xml_schemas/xml_id.xsd +9 -0
  24. data/lib/sepa/xml_templates/application_request/create_certificate.xml +15 -10
  25. data/lib/sepa/xml_templates/application_request/danske_get_bank_certificate.xml +13 -9
  26. data/lib/sepa/xml_templates/application_request/download_file.xml +32 -30
  27. data/lib/sepa/xml_templates/application_request/download_file_list.xml +29 -27
  28. data/lib/sepa/xml_templates/application_request/encrypted_request.xml +22 -0
  29. data/lib/sepa/xml_templates/application_request/get_certificate.xml +9 -8
  30. data/lib/sepa/xml_templates/application_request/get_user_info.xml +26 -24
  31. data/lib/sepa/xml_templates/application_request/upload_file.xml +29 -27
  32. data/lib/sepa/xml_templates/soap/create_certificate.xml +17 -15
  33. data/lib/sepa/xml_templates/soap/danske_get_bank_certificate.xml +15 -13
  34. data/lib/sepa/xml_templates/soap/download_file.xml +19 -15
  35. data/lib/sepa/xml_templates/soap/download_file_list.xml +19 -15
  36. data/lib/sepa/xml_templates/soap/get_certificate.xml +2 -1
  37. data/lib/sepa/xml_templates/soap/get_user_info.xml +19 -15
  38. data/lib/sepa/xml_templates/soap/header.xml +48 -37
  39. data/lib/sepa/xml_templates/soap/upload_file.xml +19 -15
  40. data/lib/sepafm.rb +20 -18
  41. data/{sepa.gemspec → sepafm.gemspec} +10 -9
  42. data/test/sepa/banks/danske/danske_cert_response_test.rb +52 -0
  43. data/test/sepa/banks/danske/danske_cert_soap_builder_test.rb +100 -0
  44. data/test/sepa/banks/danske/danske_generic_soap_builder_test.rb +278 -0
  45. data/test/sepa/banks/danske/danske_get_bank_cert_test.rb +111 -0
  46. data/{lib/sepa/danske_testing/keys/danske_encryption.crt → test/sepa/banks/danske/keys/bank_encryption_cert.pem} +0 -0
  47. data/test/sepa/{danske_test_keys/danskeroot.pem → banks/danske/keys/bank_root_cert.pem} +1 -1
  48. data/test/sepa/banks/danske/keys/bank_signing_cert.pem +24 -0
  49. data/test/sepa/banks/danske/keys/danske_encryption.crt +24 -0
  50. data/test/sepa/banks/danske/keys/enc_private_key.pem +27 -0
  51. data/test/sepa/{danske_test_keys → banks/danske/keys}/encryption_pkcs.csr +0 -0
  52. data/test/sepa/banks/danske/keys/own_enc_cert.pem +21 -0
  53. data/test/sepa/banks/danske/keys/own_signing_cert.pem +22 -0
  54. data/test/sepa/{danske_test_keys → banks/danske/keys}/signing_key.pem +0 -0
  55. data/test/sepa/{danske_test_keys → banks/danske/keys}/signing_pkcs.csr +0 -0
  56. data/test/sepa/banks/danske/keys/signing_private_key.pem +27 -0
  57. data/test/sepa/banks/danske/responses/create_cert.xml +38 -0
  58. data/test/sepa/banks/danske/responses/get_bank_cert.xml +37 -0
  59. data/{lib/sepa/nordea_testing → test/sepa/banks/nordea}/keys/nordea.crt +0 -4
  60. data/test/sepa/{nordea_test_keys → banks/nordea/keys}/nordea.key +0 -3
  61. data/test/sepa/{nordea_test_keys → banks/nordea/keys}/root_cert.cer +0 -0
  62. data/test/sepa/{nordea_test_keys → banks/nordea/keys}/testcert.csr +0 -0
  63. data/test/sepa/banks/nordea/nordea_application_request_test.rb +252 -0
  64. data/test/sepa/{application_response_test.rb → banks/nordea/nordea_application_response_test.rb} +40 -46
  65. data/test/sepa/banks/nordea/nordea_cert_application_request_test.rb +72 -0
  66. data/test/sepa/banks/nordea/nordea_cert_request_soap_builder_test.rb +65 -0
  67. data/test/sepa/banks/nordea/nordea_generic_soap_builder_test.rb +280 -0
  68. data/test/sepa/banks/nordea/nordea_response_test.rb +116 -0
  69. data/test/sepa/banks/nordea/responses/df_ktl.xml +45 -0
  70. data/test/sepa/{test_files/test_responses/df.xml → banks/nordea/responses/df_tito.xml} +1 -1
  71. data/test/sepa/{test_files/test_responses → banks/nordea/responses}/dfl.xml +0 -0
  72. data/test/sepa/banks/nordea/responses/gbc.xml +15 -0
  73. data/test/sepa/banks/nordea/responses/gc.xml +49 -0
  74. data/test/sepa/{test_files/test_responses → banks/nordea/responses}/gui.xml +0 -0
  75. data/test/sepa/{test_files/test_responses → banks/nordea/responses}/uf.xml +0 -0
  76. data/test/sepa/client_test.rb +156 -302
  77. data/test/sepa/fixtures.rb +214 -0
  78. data/test/sepa/sepa_test.rb +3 -13
  79. data/test/sepa/test_files/{invalid.wsdl → invalid_wsdl.wsdl} +0 -0
  80. data/test/test_helper.rb +29 -3
  81. metadata +140 -116
  82. data/lib/danske_get_bank_certificate_test.rb +0 -15
  83. data/lib/sepa/custom_exceptions.rb +0 -2
  84. data/lib/sepa/filedescriptor.rb +0 -7
  85. data/lib/sepa/filetypeservice.rb +0 -6
  86. data/lib/sepa/nordea_testing/keys/CSR.csr +0 -0
  87. data/lib/sepa/nordea_testing/keys/nordea.key +0 -19
  88. data/lib/sepa/nordea_testing/response/content_053.xml +0 -998
  89. data/lib/sepa/nordea_testing/response/content_054.xml +0 -1
  90. data/lib/sepa/nordea_testing/response/download_file_response.xml +0 -14
  91. data/lib/sepa/nordea_testing/response/download_filelist_response.xml +0 -14
  92. data/lib/sepa/nordea_testing/response/get_user_info_response.xml +0 -14
  93. data/lib/sepa/nordea_testing/response/upload_file_response.xml +0 -14
  94. data/lib/sepa/payload.rb +0 -109
  95. data/lib/sepa/payment.rb +0 -97
  96. data/lib/sepa/sender_verifier.rb +0 -15
  97. data/lib/sepa/signature.rb +0 -7
  98. data/lib/sepa/soap_danske.rb +0 -47
  99. data/lib/sepa/soap_nordea.rb +0 -68
  100. data/lib/sepa/transaction.rb +0 -178
  101. data/lib/sepa/userfiletype.rb +0 -16
  102. data/lib/sepa/xml_parser.rb +0 -291
  103. data/lib/sepa_client_testing_mika.rb +0 -32
  104. data/lib/sepa_client_testing_tiere.rb +0 -257
  105. data/test/sepa/application_request_test.rb +0 -423
  106. data/test/sepa/cert_application_request_test.rb +0 -99
  107. data/test/sepa/nordea_cert_request_soap_builder_test.rb +0 -112
  108. data/test/sepa/nordea_generic_soap_builder_test.rb +0 -427
  109. data/test/sepa/nordea_test_keys/nordea.crt +0 -27
  110. data/test/sepa/payload_test.rb +0 -297
  111. data/test/sepa/payment_test.rb +0 -198
  112. data/test/sepa/response_test.rb +0 -269
  113. data/test/sepa/transaction_test.rb +0 -362
  114. data/test/sepa/user_file_type_test.rb +0 -21
  115. data/test/sepa/xml_parser_test.rb +0 -73
@@ -0,0 +1,49 @@
1
+ <soapenv:Envelope xmlns:mod="http://model.bxd.fi" xmlns:cer="http://bxd.fi/CertificateService" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
2
+ <soapenv:Header>
3
+ <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
4
+ <wsu:Timestamp wsu:Id="Timestamp-dbe6014b-0fe9-43a5-a36b-f11a9e12d78f" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
5
+ <wsu:Created>2011-02-08T12:19:38Z</wsu:Created>
6
+ <wsu:Expires>2011-02-08T12:24:38Z</wsu:Expires>
7
+ </wsu:Timestamp>
8
+ <wsse:BinarySecurityToken wsu:Id="SecurityToken-9d25372f-3395-4fe6-ba56-735c6fa75788" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">MIID8TCCAtmgAwIBAgIEAPlwbDANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQGEwJTRTEeMBwGA1UEChMVTm9yZGVhIEJhbmsgQUIgKHB1YmwpMSYwJAYDVQQDEx1Ob3JkZWEgQ29ycG9yYXRlIFNlcnZlciBDQSAwMTEUMBIGA1UEBRMLNTE2NDA2LTAxMjAwHhcNMTAwOTA4MTQzNzQ5WhcNMTIwOTA4MTQzNzQ5WjB+MQswCQYDVQQGEwJTRTEeMBwGA1UECgwVTm9yZGVhIEJhbmsgQUIgKHB1YmwpMSowKAYDVQQLDCFOZXRiYW5raW5nICYgSW50ZWdyYXRpb24gU2VydmljZXMxIzAhBgNVBAMMGkZpbGUgVHJhbnNmZXIgV2ViIFNlcnZpY2VzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYg2w5rYDRBz9PHKtJPjDc2BfGl7LNaLiYbi34+O2DIptQ2WzUSg/jv5F842NYwk5wx3WXY439zByJf6l3c/c3buLReMi+M421EQpWwLgF0vy+ut+pbV7M8S+cGVgobUCoj/Y6OFTRTFL/zLbvhlp9FZHYmXfcdZqCGvAGIRr9twIDAQABo4IBDDCCAQgwCQYDVR0TBAIwADARBgNVHQ4ECgQISfXSYMRA2HUwEwYDVR0jBAwwCoAIRMeT2dl7VsEwNwYIKwYBBQUHAQEEKzApMCcGCCsGAQUFBzABhhtodHRwOi8vb2NzcC5ub3JkZWEuc2UvU0NBMDEwDgYDVR0PAQH/BAQDAgWgMIGJBgNVHR8EgYEwfzB9oHugeYZ3bGRhcDovL2xkYXAubmIuc2UvY249Tm9yZGVhJTIwQ29ycG9yYXRlJTIwU2VydmVyJTIwQ0ElMjAwMSxvPU5vcmRlYSUyMEJhbmslMjBBQiUyMChwdWJsKSxjPVNFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwDQYJKoZIhvcNAQEFBQADggEBAIdDDnXPolvbM9c+8CgYj7+A7RrRth7P1x6UgIFYpAzajyaKBi9qMYDb3/XcqOqWmkHcTJRwFOEOkHBBUKK2Od7xI54yokjaVWn+AukgAVwyW/vXgKeiTNRnkZDAnZhzXKVwEk2E2E7a3YgHhsg/9Laylej9I/mnFhgU9nNFZmHvEIFTKIGoJC1so6/N9vj8OpzQSJNjEWF9YEvAk1FZOkaK84drwckEWm3N9519+4kMEjB00trJ0cp8xtAhpyD+KgUeBCzma5IFWKkZphccutTaib7kiATD8oDXj+wmfYem+7Q8CoHl5kDvWPIBz4b/EwSnvwjWBx80nwS9ZqNc9RA=</wsse:BinarySecurityToken>
9
+ <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
10
+ <SignedInfo>
11
+ <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
12
+ <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
13
+ <Reference URI="#Timestamp-dbe6014b-0fe9-43a5-a36b-f11a9e12d78f">
14
+ <Transforms>
15
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
16
+ </Transforms>
17
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
18
+ <DigestValue>nkU/8w4xkiHdcYTb3pFOSFPJtN0=</DigestValue>
19
+ </Reference>
20
+ <Reference URI="#Body-703877af-2b33-4592-a35f-c2e26707500f">
21
+ <Transforms>
22
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
23
+ </Transforms>
24
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
25
+ <DigestValue>/I7ZIYN0sudzvBiY3jXdTGC+f3g=</DigestValue>
26
+ </Reference>
27
+ </SignedInfo>
28
+ <SignatureValue>kaz3YW90QNZo/Ieo7t5gVZHvKHjUo091cDzLdYEMdMgRahNHwqvEl1MwcK2LK2gfJsnsgLHD1XUP1YZYDY1D1kuy+MUvP9Ui4ccWyUs97b0bQfP0c9wrV8hRVl0stEGfVLvkZbFWMaxMpgUQf25tI1HuhSegDn9BGE3xzQlHufI=</SignatureValue>
29
+ <KeyInfo>
30
+ <wsse:SecurityTokenReference xmlns="">
31
+ <wsse:Reference URI="#SecurityToken-9d25372f-3395-4fe6-ba56-735c6fa75788" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
32
+ </wsse:SecurityTokenReference>
33
+ </KeyInfo>
34
+ </Signature>
35
+ </wsse:Security>
36
+ </soapenv:Header>
37
+ <soapenv:Body wsu:Id="Body-703877af-2b33-4592-a35f-c2e26707500f" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
38
+ <cer:getCertificateout>
39
+ <cer:ResponseHeader>
40
+ <cer:SenderId>1</cer:SenderId>
41
+ <cer:RequestId>2</cer:RequestId>
42
+ <cer:Timestamp>2011-02-08T13:19:38+01:00</cer:Timestamp>
43
+ <cer:ResponseCode>00</cer:ResponseCode>
44
+ <cer:ResponseText>OK</cer:ResponseText>
45
+ </cer:ResponseHeader>
46
+ <cer:ApplicationResponse>PGJ4ZDpDZXJ0QXBwbGljYXRpb25SZXNwb25zZSB4bWxuczpieGQ9Imh0dHA6Ly9maWxldHJhbnNmZXIubm9yZGVhLmNvbS94bWxkYXRhLyI+PGJ4ZDpDdXN0b21lcklkPjQ4MjQzMDAwMzwvYnhkOkN1c3RvbWVySWQ+PGJ4ZDpUaW1lc3RhbXA+MjAxMS0wMi0wOFQxMzoxOTozOCswMTowMDwvYnhkOlRpbWVzdGFtcD48YnhkOlJlc3BvbnNlQ29kZT4wMDwvYnhkOlJlc3BvbnNlQ29kZT48YnhkOlJlc3BvbnNlVGV4dD5PSzwvYnhkOlJlc3BvbnNlVGV4dD48YnhkOkNlcnRpZmljYXRlcz48YnhkOkNlcnRpZmljYXRlPjxieGQ6TmFtZS8+PGJ4ZDpDZXJ0aWZpY2F0ZT5NSUlESXpDQ0FndWdBd0lCQWdJQ2F2RXdEUVlKS29aSWh2Y05BUUVGQlFBd1JqRWVNQndHQTFVRUNoTVZUbTl5WkdWaElFSmhibXNnUVVJZ0tIQjFZbXdwTVNRd0lnWURWUVFERXh0T2IzSmtaV0VnVkdWemRDQkRiM0p3YjNKaGRHVWdRMEVnTURFd0hoY05NVEF3TkRBeE1EYzBOVE0xV2hjTk1USXdOREF4TURjME5UTTFXakEzTVFzd0NRWURWUVFHRXdKR1NURVRNQkVHQTFVRUF3d0taV2xrSUc5dVptbHNaVEVUTUJFR0ExVUVCUk1LTWpBNU5ETTNNREF3TkRDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQWdFczJLY2tnRmRKYnoxVzN2ako5VnJkWEx1TitqdmR6V01pcG4xeDdNc3YzRUpiS1RMYWtlVXpjOTB1aUkzVzFJbGUzQlo0VlI5dC9XbHRlSXllR2tVWFdvMHJXUkg1WXRCV0lKOC95WXZ1eDNqWTR3OGRkV084cFFudll2WEQ4U3c2TnJPZzJJZ1JGR3RleEJpblJZSVFJZy9LRDRLQ1d3cnAxaUlMN3JLRUNBd0VBQWFPQnJUQ0JxakFKQmdOVkhSTUVBakFBTUJFR0ExVWREZ1FLQkFoTG5OOHBhU2t4ZnpBVEJnTlZIU0FFRERBS01BZ0dCaXFGY0VjQkF6QVNCZ1lxaFhBaUFnRUVDQk1HVFVvNU5ETXdNQk1HQTFVZEl3UU1NQXFBQ0VxOTJXL0NYeVZOTUR3R0NDc0dBUVVGQndFQkJEQXdMakFzQmdnckJnRUZCUWN3QVlZZ2FIUjBjRG92TDI5amMzQXRkR1Z6ZEM1dWIzSmtaV0V1YzJVdlEwTkJNREV3RGdZRFZSMFBBUUgvQkFRREFnV2dNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUJBUUJIRWJsOWx4YXM4NS81eTJBY1ozTnhVTWZQdm9tbWFBWTFUTnlwNFVaTlJMamZzbCttV1NJV09CMFNOKzJmbVl1ajJ5RlBzSFdkTnFrYnFNYXpQMS82amhIaGg4L3BZd2JUQmZFbTBFRHBCaFkvTkVOc2pka3dQWWZGVDJxZ3FLMk1GcDJrSW1iWWZ2RHVjazRPY1JsRzhCUW93K2FxN0RMbWU4TkNWYzNGVlhGNDRQT2RlZ25LZEplWDZDZlROK3g2QWZuNXBZL2d4VW0yQTZ3Qi9QTEs5d2kySEVsb2xxdTdrL0hWMFVreUNveG1mT2hNT1dTWTRzQXErT0NHWkhucEhVTVVoSFhyQWJHd3o1RVpiSXF5a25hSFZTc2lKL1l5bkJQZEpxc3NpZ2Q4Qk5JbzRyazRyODVYRm1hM1c1TnludDlrcHBLb1ZLMWhzUEFOdkhDbzwvYnhkOkNlcnRpZmljYXRlPjxieGQ6Q2VydGlmaWNhdGVGb3JtYXQ+WDUwOXYzPC9ieGQ6Q2VydGlmaWNhdGVGb3JtYXQ+PC9ieGQ6Q2VydGlmaWNhdGU+PC9ieGQ6Q2VydGlmaWNhdGVzPjxTaWduYXR1cmUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPgo8U2lnbmVkSW5mbz4KICA8Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXhtbC1jMTRuLTIwMDEwMzE1Ii8+CiAgPFNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSIvPgogIDxSZWZlcmVuY2UgVVJJPSIiPgogICAgPFRyYW5zZm9ybXM+CiAgICAgIDxUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPgogICAgICA8VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUiLz4KICAgIDwvVHJhbnNmb3Jtcz4KICAgIDxEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPgogICAgPERpZ2VzdFZhbHVlPkZQalNaRUFWQnFTeGxMRnZiS1FsOXVxQ1Z0cz08L0RpZ2VzdFZhbHVlPgogIDwvUmVmZXJlbmNlPgo8L1NpZ25lZEluZm8+CiAgICA8U2lnbmF0dXJlVmFsdWU+WlVKQ1FCVE5vOWpndzlSTmtjSGo3Mzc1dmhUcmErUHFFTjBSQ3RXV2ZESUxDL3FXc3RRVkg4ZDAyTjhpb0dhWGFvTjVVVGJST3d0OTh4NzF2d3B1d3ZTSzIyQ0NPeTFvWDJIK0R6K0MxbFRaeEU5aXZHeE44RXJyRVJOcXJPNHhLSjk5SlB3SXdpL2hlNG1KSy82T2FCMnZsR3liZjlvdW5QRlBmRkFZeXJVPTwvU2lnbmF0dXJlVmFsdWU+PEtleUluZm8+PFg1MDlEYXRhPjxYNTA5Q2VydGlmaWNhdGU+TUlJRDhUQ0NBdG1nQXdJQkFnSUVBUGx3YkRBTkJna3Foa2lHOXcwQkFRVUZBREJyTVFzd0NRWURWUVFHRXdKVFJURWVNQndHQTFVRUNoTVZUbTl5WkdWaElFSmhibXNnUVVJZ0tIQjFZbXdwTVNZd0pBWURWUVFERXgxT2IzSmtaV0VnUTI5eWNHOXlZWFJsSUZObGNuWmxjaUJEUVNBd01URVVNQklHQTFVRUJSTUxOVEUyTkRBMkxUQXhNakF3SGhjTk1UQXdPVEE0TVRRek56UTVXaGNOTVRJd09UQTRNVFF6TnpRNVdqQitNUXN3Q1FZRFZRUUdFd0pUUlRFZU1Cd0dBMVVFQ2d3VlRtOXlaR1ZoSUVKaGJtc2dRVUlnS0hCMVltd3BNU293S0FZRFZRUUxEQ0ZPWlhSaVlXNXJhVzVuSUNZZ1NXNTBaV2R5WVhScGIyNGdVMlZ5ZG1salpYTXhJekFoQmdOVkJBTU1Ha1pwYkdVZ1ZISmhibk5tWlhJZ1YyVmlJRk5sY25acFkyVnpNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUUNZZzJ3NXJZRFJCejlQSEt0SlBqRGMyQmZHbDdMTmFMaVliaTM0K08yRElwdFEyV3pVU2cvanY1Rjg0Mk5Zd2s1d3gzV1hZNDM5ekJ5SmY2bDNjL2MzYnVMUmVNaStNNDIxRVFwV3dMZ0YwdnkrdXQrcGJWN004UytjR1Znb2JVQ29qL1k2T0ZUUlRGTC96TGJ2aGxwOUZaSFltWGZjZFpxQ0d2QUdJUnI5dHdJREFRQUJvNElCRERDQ0FRZ3dDUVlEVlIwVEJBSXdBREFSQmdOVkhRNEVDZ1FJU2ZYU1lNUkEySFV3RXdZRFZSMGpCQXd3Q29BSVJNZVQyZGw3VnNFd053WUlLd1lCQlFVSEFRRUVLekFwTUNjR0NDc0dBUVVGQnpBQmhodG9kSFJ3T2k4dmIyTnpjQzV1YjNKa1pXRXVjMlV2VTBOQk1ERXdEZ1lEVlIwUEFRSC9CQVFEQWdXZ01JR0pCZ05WSFI4RWdZRXdmekI5b0h1Z2VZWjNiR1JoY0RvdkwyeGtZWEF1Ym1JdWMyVXZZMjQ5VG05eVpHVmhKVEl3UTI5eWNHOXlZWFJsSlRJd1UyVnlkbVZ5SlRJd1EwRWxNakF3TVN4dlBVNXZjbVJsWVNVeU1FSmhibXNsTWpCQlFpVXlNQ2h3ZFdKc0tTeGpQVk5GUDJObGNuUnBabWxqWVhSbGNtVjJiMk5oZEdsdmJteHBjM1F3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUlkRERuWFBvbHZiTTljKzhDZ1lqNytBN1JyUnRoN1AxeDZVZ0lGWXBBemFqeWFLQmk5cU1ZRGIzL1hjcU9xV21rSGNUSlJ3Rk9FT2tIQkJVS0syT2Q3eEk1NHlva2phVlduK0F1a2dBVnd5Vy92WGdLZWlUTlJua1pEQW5aaHpYS1Z3RWsyRTJFN2EzWWdIaHNnLzlMYXlsZWo5SS9tbkZoZ1U5bk5GWm1IdkVJRlRLSUdvSkMxc282L045dmo4T3B6UVNKTmpFV0Y5WUV2QWsxRlpPa2FLODRkcndja0VXbTNOOTUxOSs0a01FakIwMHRySjBjcDh4dEFocHlEK0tnVWVCQ3ptYTVJRldLa1pwaGNjdXRUYWliN2tpQVREOG9EWGord21mWWVtKzdROENvSGw1a0R2V1BJQno0Yi9Fd1NudndqV0J4ODBud1M5WnFOYzlSQT08L1g1MDlDZXJ0aWZpY2F0ZT48WDUwOUlzc3VlclNlcmlhbD48WDUwOUlzc3Vlck5hbWU+c2VyaWFsTnVtYmVyPTUxNjQwNi0wMTIwLCBDTj1Ob3JkZWEgQ29ycG9yYXRlIFNlcnZlciBDQSAwMSwgTz1Ob3JkZWEgQmFuayBBQiAocHVibCksIEM9U0U8L1g1MDlJc3N1ZXJOYW1lPjxYNTA5U2VyaWFsTnVtYmVyPjE2MzQ3MjQ0PC9YNTA5U2VyaWFsTnVtYmVyPjwvWDUwOUlzc3VlclNlcmlhbD48L1g1MDlEYXRhPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48L2J4ZDpDZXJ0QXBwbGljYXRpb25SZXNwb25zZT4=</cer:ApplicationResponse>
47
+ </cer:getCertificateout>
48
+ </soapenv:Body>
49
+ </soapenv:Envelope>
@@ -1,425 +1,279 @@
1
- require File.expand_path('../../test_helper.rb', __FILE__)
1
+ require 'test_helper'
2
+
3
+ class ClientTest < ActiveSupport::TestCase
4
+ include Sepa::ErrorMessages
2
5
 
3
- class ClientTest < MiniTest::Test
4
6
  def setup
5
- @schemas_path = File.expand_path('../../../lib/sepa/xml_schemas',__FILE__)
6
-
7
- wsdl_path = File.expand_path('../../../lib/sepa/wsdl/wsdl_nordea.xml',
8
- __FILE__)
9
-
10
- keys_path = File.expand_path('../nordea_test_keys', __FILE__)
11
-
12
- danske_keys_path = File.expand_path('../danske_test_keys', __FILE__)
13
-
14
- private_key = OpenSSL::PKey::RSA.new File.read "#{keys_path}/nordea.key"
15
- cert = OpenSSL::X509::Certificate.new File.read "#{keys_path}/nordea.crt"
16
- certplain = "-----BEGIN CERTIFICATE-----
17
- MIIDwTCCAqmgAwIBAgIEAX1JuTANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJT
18
- RTEeMBwGA1UEChMVTm9yZGVhIEJhbmsgQUIgKHB1YmwpMR8wHQYDVQQDExZOb3Jk
19
- ZWEgQ29ycG9yYXRlIENBIDAxMRQwEgYDVQQFEws1MTY0MDYtMDEyMDAeFw0xMzA1
20
- MDIxMjI2MzRaFw0xNTA1MDIxMjI2MzRaMEQxCzAJBgNVBAYTAkZJMSAwHgYDVQQD
21
- DBdOb3JkZWEgRGVtbyBDZXJ0aWZpY2F0ZTETMBEGA1UEBRMKNTc4MDg2MDIzODCB
22
- nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwtFEfAtbJuGzQwwRumZkvYh2BjGY
23
- VsAMUeiKtOne3bZSeisfCq+TXqL1gI9LofyeAQ9I/sDm6tL80yrD5iaSUqVm6A73
24
- 9MsmpW/iyZcVf7ms8xAN51ESUgN6akwZCU9pH62ngJDj2gUsktY0fpsoVsARdrvO
25
- Fk0fTSUXKWd6LbcCAwEAAaOCAR0wggEZMAkGA1UdEwQCMAAwEQYDVR0OBAoECEBw
26
- 2cj7+XMAMBMGA1UdIAQMMAowCAYGKoVwRwEDMBMGA1UdIwQMMAqACEALddbbzwun
27
- MDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3Aubm9yZGVh
28
- LnNlL0NDQTAxMA4GA1UdDwEB/wQEAwIFoDCBhQYDVR0fBH4wfDB6oHigdoZ0bGRh
29
- cCUzQS8vbGRhcC5uYi5zZS9jbiUzRE5vcmRlYStDb3Jwb3JhdGUrQ0ErMDElMkNv
30
- JTNETm9yZGVhK0JhbmsrQUIrJTI4cHVibCUyOSUyQ2MlM0RTRSUzRmNlcnRpZmlj
31
- YXRlcmV2b2NhdGlvbmxpc3QwDQYJKoZIhvcNAQEFBQADggEBACLUPB1Gmq6286/s
32
- ROADo7N+w3eViGJ2fuOTLMy4R0UHOznKZNsuk4zAbS2KycbZsE5py4L8o+IYoaS8
33
- 8YHtEeckr2oqHnPpz/0Eg7wItj8Ad+AFWJqzbn6Hu/LQhlnl5JEzXzl3eZj9oiiJ
34
- 1q/2CGXvFomY7S4tgpWRmYULtCK6jode0NhgNnAgOI9uy76pSS16aDoiQWUJqQgV
35
- ydowAnqS9h9aQ6gedwbOdtkWmwKMDVXU6aRz9Gvk+JeYJhtpuP3OPNGbbC5L7NVd
36
- no+B6AtwxmG3ozd+mPcMeVuz6kKLAmQyIiBSrRNa5OrTkq/CUzxO9WUgTnm/Sri7
37
- zReR6mU=
38
- -----END CERTIFICATE-----"
39
- pkeyplain = "-----BEGIN PRIVATE KEY-----
40
- MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMLRRHwLWybhs0MM
41
- EbpmZL2IdgYxmFbADFHoirTp3t22UnorHwqvk16i9YCPS6H8ngEPSP7A5urS/NMq
42
- w+YmklKlZugO9/TLJqVv4smXFX+5rPMQDedRElIDempMGQlPaR+tp4CQ49oFLJLW
43
- NH6bKFbAEXa7zhZNH00lFylnei23AgMBAAECgYEAqt912/7x4jaQTrxlSELLFVp9
44
- eo1BesVTiPwXvPpsGbbyvGjZ/ztkXNs9zZbh1aCGzZMkiR2U7F5GlsiprlIif4cF
45
- 6Xz7rCjaAs7iDRt9PjhjVuqNGR2I+VIIlbQ9XWFJ3lJFW3v7TIZ8JbLnn0XOFz+Z
46
- BBSSGTK1zTNh4TBQtjECQQDe5M3uu9m4RwSw9R6GaDw/IFQZgr0oWSv0WIjRwvwW
47
- nFnSX2lbkNAjulP0daGsmn7vxIpqZxPxwcrU4wFqTF5dAkEA38DnbCm3YfogzwLH
48
- Nre2hBmGqjWarhtxqtRarrkgnmOd8W0Z1Hb1dSHrliUSVSrINbK5ZdEV15Rpu7VD
49
- OePzIwJAPMslS+8alANyyR0iJUC65fDYX1jkZOPldDDNqIDJJxWf/hwd7WaTDpuc
50
- mHmZDi3ZX2Y45oqUywSzYNtFoIuR1QJAZYUZuyqmSK77SdGB36K1DfSi9AFEQDC1
51
- fwPAbTwTv6mFFPAiYxLiRZXxVPtW+QtjMXH4ymh2V4y/+GnCqbZyLwJBAJQSDAME
52
- Sn4Uz7Zjk3UrBIbMYEv0u2mcCypwsb0nGE5/gzDPjGE9cxWW+rXARIs+sNQVClnh
53
- 45nhdfYxOjgYff0=
54
- -----END PRIVATE KEY-----"
55
- csrplain = "-----BEGIN CERTIFICATE REQUEST-----
56
- MIIBczCB3QIBADA0MRIwEAYDVQQDEwlEZXZsYWIgT3kxETAPBgNVBAUTCDExMTEx
57
- MTExMQswCQYDVQQGEwJGSTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo9wU
58
- c2Ys5hSso4nEanbc+RIhL71aS6GBGiWAegXjhlyb6dpwigrZBFPw4u6UZV/Vq7Y7
59
- Ku3uBq5rfZwk+lA+c/B634Eu0zWdI+EYfQxKVRrBrmhiGplKEtglHXbNmmMOn07e
60
- LPUaB0Ipx/6h/UczJGBINdtcuIbYVu0r7ZfyWbUCAwEAAaAAMA0GCSqGSIb3DQEB
61
- BQUAA4GBAIhh2o8mN4Byn+w1jdbhq6lxEXYqdqdh1F6GCajt2lQMUBgYP23I5cS/
62
- Z+SYNhu8vbj52cGQPAwEDN6mm5yLpcXu40wYzgWyfStLXV9d/b4hMy9qLMW00Dzb
63
- jo2ekdSDdw8qxKyxj1piv8oYzMd4fCjCpL+WDZtq7mdLErVZ92gH
64
- -----END CERTIFICATE REQUEST-----"
65
- @params = {
66
- bank: :nordea,
67
- private_key_plain: pkeyplain,
68
- cert_plain: certplain,
69
- command: :get_user_info,
70
- customer_id: '11111111',
71
- environment: 'PRODUCTION',
72
- status: 'NEW',
73
- target_id: '11111111A1',
74
- language: 'FI',
75
- file_type: 'TITO',
76
- content: Base64.encode64("Kurppa"),
77
- file_reference: "11111111A12006030329501800000014"
78
- }
79
-
80
- @certparams = {
81
- bank: :nordea,
82
- command: :get_certificate,
83
- customer_id: '11111111',
84
- environment: 'TEST',
85
- pin: '1234567890',
86
- csr_plain: csrplain,
87
- service: 'service'
88
- }
89
-
90
- encryptpkcsplain = "-----BEGIN CERTIFICATE REQUEST-----
91
- MIICZjCCAU4CAQAwITESMBAGA1UEAxMJRGV2bGFiIE95MQswCQYDVQQGEwJGSTCC
92
- ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKN2ceFGw+i4wAyg6WApu7/h
93
- 5Rpl8tp+QRX1eLbmftYpf6bbzj+JwspWNST/s8p8enGBRrK+HkNT8ayj7ZSubJwx
94
- g/bAn+ewxk64A984hiMqd0GMJgwFcWhGpHhwH9QiqA5CAQYXY0T1fs2UXf1mIJ1Z
95
- 675yGRhU03ZyQgyIjhdTmXLznCluSLeIGypXPi7DCfHP5w0a6Dfpy31fowqi7n9A
96
- gyoQ6JZuuXHAdEoQpNmxgpp9gBwxs9U+yBmDaBAvvB0DY3+0kMRFCn2oyCuQw5C4
97
- mRo+0eOO+kA8Svd2bLXmcbe6js/5SgjvkHvvCgIqi9J6aPiJo0XCrLsB6BjQbpsC
98
- AwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQAXepnKWQWTCiTKXhuT+e52n0/x5YHd
99
- bLB8nelPpyMf0hiNeoUdzNTZoMM2OArtzvOhh5HWZ32GbjR/RDCy+kMfAGDm/tlB
100
- /4uJNcDotMFF+MUsEAHVrAUpZh5n00mBeYDl7m098VnAEayxUxJHbQMYY1J1QdTl
101
- M62i5c2v3sNJlDlT4GidRtoGW9KAID2oCdOL94krWpwLAZDP4wLwG7ACCbOx3rST
102
- f9gDE6jFUn7ONuiiYvOBAqjwckDpyOH+vx3WkZH4cwdcp4KVeLnjJzlJZaw7yTIo
103
- z8BKfQ26LmOO/S4CFe3Vzq6FRNKl3D4nvCu06WoMi5tAAEi57tk05B32
104
- -----END CERTIFICATE REQUEST-----"
105
- signingpkcsplain = "-----BEGIN CERTIFICATE REQUEST-----
106
- MIICZjCCAU4CAQAwITESMBAGA1UEAxMJRGV2bGFiIE95MQswCQYDVQQGEwJGSTCC
107
- ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3yym5CztvmJCxbzhy6tOph
108
- wzamimFKlJt88cG0VLzwAh0EiAhFz9Yj/39n1HywL+4xOLizIAup794MzLBDs3TH
109
- OAZe7iZSrb5y4PMh5l9jwhXLPu7/tkqswcvMtstI5HZGqEqdw0kAT0BuKJBXdo+e
110
- 8nOCVsiMPhrtk5ovLY54vWMzwfAQJeBkxbr1LH6Ib4k7IlsysKpQt7+VqQcTc/lL
111
- IC+MnVfmKDA0qTXFKQsZC2hO353cu9ZfjdrnKpo5gutcPJRu+TBNS8HJNkI+3pNM
112
- MTGPvweeY461tzgOpeSzL+FkmRFSWksOmPol1Q4DDZryYHaLDv7q6lELNDxEwQ8C
113
- AwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQAIw3tbNWTsayBm4bUzugNKCFreayTo
114
- 5npG3JUiA+n5jIdj3egqSXwxkXSJ5tdXcv0xqsFkV0wq3l5wEaeG7Jd7vLD6FX2y
115
- MbtE49PHHcLwcY0U94qBj6qEleRwebGfyKwpMb2M90cAf3V/5IjZUJfvYyjOBQUT
116
- H6Xhm3JG9g7AScHhFcM8r6PhmzcL1FubYBPTcUBuotDBYc4lbql7sbww/u8OyWvl
117
- aIFd+oiwXGSYB7L8Fqg469jeIf0QtOZUtUEGOJWjM4JjTy+NnVmsj0jszMbuBZBW
118
- 7wOrp+GMBUZ9/vaY/zr7nvJTfvKz7CJQOgADeh/0imZqhIYfVKIpJxR5
119
- -----END CERTIFICATE REQUEST-----"
120
- danskebankencryptplain = "-----BEGIN CERTIFICATE-----
121
- MIIEATCCAumgAwIBAgIFAQjv8bMwDQYJKoZIhvcNAQELBQAwgZgxEDAOBgNVBAMT
122
- B0RCR1JPT1QxCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYD
123
- VQQIEwdEZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UE
124
- CxMRRGFuc2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MTExMDAwMjAe
125
- Fw0xMjA4MDEwMDAwMDBaFw0xNDEwMzEwMDAwMDBaMIGYMRAwDgYDVQQDEwdEUENS
126
- WVBUMQswCQYDVQQGEwJESzETMBEGA1UEBxMKQ29wZW5oYWdlbjEQMA4GA1UECBMH
127
- RGVubWFyazEaMBgGA1UEChMRRGFuc2tlIEJhbmsgR3JvdXAxGjAYBgNVBAsTEURh
128
- bnNrZSBCYW5rIEdyb3VwMRgwFgYDVQQFEw82MTEyNjIyODQ5MTAwMDMwggEgMA0G
129
- CSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQC/kHrOvHOueBsit9drxIHpaD7mXINy
130
- pXS/l9PbbOZ0lZKVEfW9gtG8xk9XggsPXHJMF/PXpG6mveXvPu9WW/XpryAUqGfv
131
- YsC7Px3ixaJb2EMOL+2mJYd0v5HKg5RuYkQ82k3K01hMNEGYs0OotjNVAimQcTLt
132
- VPDGBjK5BUAiwady9LpI6afo7roJWnRmsvSvinDgBqswnfCvUfSfM8cZyhnLLC2u
133
- j1kBHAD/5xpllmS3aq1M8LqFkBYcCE5PdPmFWhGUumZ/Y5qLjDgcPMAPvUaKLqOs
134
- h22jvPCZ0pm17eV0bSQzWe5e0zkgCYAepuFRazSlkJQYBdS47Mp68dY5AgEDo1Iw
135
- UDAfBgNVHSMEGDAWgBSE+uW/3pFJZt/FilLDs7ezIBzHbTAdBgNVHQ4EFgQUP6wH
136
- VNOmznu212c08M3oeYjeXW4wDgYDVR0PAQH/BAQDAgQwMA0GCSqGSIb3DQEBCwUA
137
- A4IBAQAvJBfPug+ixGL/zWUnKMweV80atZXMjHJEn4mOE+iUkCNONLImMMt6MXJy
138
- snJViL1gL5xMrka6A62PLLsVkl79kxDDbzXMPfGt5/mB9L7CMpyzaID0acDii3rs
139
- ZwT3Wxpnate6wowN4zpmXgpCpTDGbxjuVRiOArsjQblerhfxnD/UAieZ1IWozIAN
140
- s6SVms/TuOB+bODUr06ITxBkDJhizOJxjsXRIAtwZvvrH4qGjJz5qFcPb3nz4Txw
141
- swU8X6yvbtqF+q4aAKPA6ZydnGZFQSoSzNJtcF28T1ItxEHN3+xyQqXpTgFviiuL
142
- 277LaAl9YUFFnSgeh7GiFitWJPfD
143
- -----END CERTIFICATE-----"
144
- @danskecertparams = {
145
- bank: :danske,
146
- command: :create_certificate,
147
- customer_id: 'ABC123',
148
- environment: 'customertest',
149
- key_generator_type: 'software',
150
- encryption_cert_pkcs10_plain: encryptpkcsplain,
151
- signing_cert_pkcs10_plain: signingpkcsplain,
152
- cert_plain: danskebankencryptplain,
153
- pin: '1234'
154
- }
155
7
 
8
+ # Get params hashes from fixtures for different banks and for different request types
9
+ @nordea_generic_params = nordea_generic_params
10
+ @nordea_cert_params = nordea_cert_params
11
+
12
+ @danske_cert_params = danske_cert_params
13
+
14
+ # Namespaces
15
+ @cor = 'http://bxd.fi/CorporateFileService'
16
+
17
+ # Create an observer to fake sending requests to bank
156
18
  observer = Class.new {
157
19
  def notify(operation_name, builder, globals, locals)
158
20
  @operation_name = operation_name
159
21
  @builder = builder
160
22
  @globals = globals
161
23
  @locals = locals
162
-
163
- HTTPI::Response.new(200,
164
- { "Reponse is actually" => "the request, w0000t" },
165
- locals[:xml])
24
+ HTTPI::Response.new(200, { "Reponse is actually" => "the request, w0000t" }, locals[:xml])
166
25
  end
167
26
  }.new
168
27
 
169
28
  Savon.observers << observer
170
29
  end
171
30
 
172
- def test_should_get_error_if_key_gen_type_missing
173
- @danskecertparams.delete(:key_generator_type)
174
-
175
- assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
31
+ test "should initialize class" do
32
+ assert Sepa::Client.new
176
33
  end
177
34
 
178
- def test_should_raise_error_with_wrong_bank
179
- @params[:bank] = :royal_bank_of_skopje
180
- assert_raises(ArgumentError) { Sepa::Client.new(@params) }
35
+ test "should initialize with attributes" do
36
+ assert Sepa::Client.new @nordea_generic_params
181
37
  end
182
38
 
183
- def test_should_raise_error_with_wrong_command_when_bank_doesnt_support_the_command
184
- @certparams[:bank] = :danske
185
- @certparams[:command] = :get_certificate
186
- assert_raises(ArgumentError) { Sepa::Client.new(@certparams) }
39
+ test "should set attributes" do
40
+ a = Sepa::Client.new
41
+ assert a.attributes @nordea_generic_params
187
42
  end
188
43
 
189
- def test_should_not_initialize_with_unsupported_danske_params
190
- assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
44
+ test "should be valid with required params" do
45
+ sepa = Sepa::Client.new @danske_cert_params
46
+ assert sepa.valid?, sepa.errors.messages
191
47
  end
192
48
 
193
- def test_should_initialize_with_proper_params
194
- assert Sepa::Client.new(@params)
49
+ test "should not be valid with invalid bank" do
50
+ @nordea_generic_params[:bank] = :royal_bank_of_skopje
51
+ sepa = Sepa::Client.new @nordea_generic_params
52
+ refute sepa.valid?, sepa.errors.messages
195
53
  end
196
54
 
197
- def test_should_give_proper_error_if_initialized_with_something_not_hash_like
198
- not_hashes = ['Merihevonsenkenka', 1, :verhokangas]
199
-
200
- not_hashes.each do |not_hash|
201
- assert_raises(ArgumentError) { Sepa::Client.new(not_hash) }
202
- end
55
+ test "banks supported commands" do
56
+ @nordea_cert_params[:bank] = :danske
57
+ @nordea_cert_params[:command] = :get_certificate
58
+ sepa = Sepa::Client.new @nordea_cert_params
59
+ refute sepa.valid?, sepa.errors.messages
203
60
  end
204
61
 
205
- def test_should_raise_error_if_private_key_plain_is_wrong
62
+ test "private keys are checked" do
206
63
  wrong_pks = ['Im not a key', :leppakerttu, nil]
207
64
 
208
65
  wrong_pks.each do |wrong_pk|
209
- @params[:private_key_plain] = wrong_pk
210
- assert_raises(ArgumentError) { Sepa::Client.new(@params) }
66
+ @nordea_generic_params[:private_key] = wrong_pk
67
+ sepa = Sepa::Client.new @nordea_generic_params
68
+ refute sepa.valid?, sepa.errors.messages
211
69
  end
212
70
  end
213
71
 
214
- def test_should_raise_error_if_cert_plain_file_is_wrong
72
+ test "certificates are checked" do
215
73
  wrong_certs = ['Im not a cert', 99, :leppakerttu, nil]
216
74
 
217
75
  wrong_certs.each do |wrong_cert|
218
- @params[:cert_plain] = wrong_cert
219
- assert_raises(ArgumentError) { Sepa::Client.new(@params) }
76
+ @nordea_generic_params[:cert] = wrong_cert
77
+ sepa = Sepa::Client.new @nordea_generic_params
78
+ refute sepa.valid?, sepa.errors.messages
220
79
  end
221
80
  end
222
81
 
223
- def test_should_raise_error_if_command_wrong_or_missing
224
- wrong_commands = ['string is not a command', 1337, :symbol_but_not_proper,
225
- nil]
226
-
227
- wrong_commands.each do |wrong_command|
228
- @params[:command] = wrong_command
229
-
230
- assert_raises(ArgumentError) { Sepa::Client.new(@params) }
231
- end
232
- end
233
-
234
- def test_should_raise_error_if_customer_id_wrong_or_missing
235
- wrong_ids = ["I'm a way too long a string and probably also not valid", nil]
82
+ test "customer id is correct" do
83
+ wrong_ids = ["a"*17, nil]
236
84
 
237
85
  wrong_ids.each do |wrong_id|
238
- @params[:customer_id] = wrong_id
239
-
240
- assert_raises(ArgumentError) { Sepa::Client.new(@params) }
86
+ @nordea_generic_params[:customer_id] = wrong_id
87
+ sepa = Sepa::Client.new @nordea_generic_params
88
+ refute sepa.valid?, sepa.errors.messages
89
+ assert_includes sepa.errors.messages.to_s, CUSTOMER_ID_ERROR_MESSAGE
241
90
  end
242
91
  end
243
92
 
244
- def test_should_raise_error_if_environment_wrong_or_missing
245
- wrong_envs = ["not proper", 5, :protuction, nil]
93
+ test "environment is checked" do
94
+ wrong_envs = ["not proper", 5, :protuction]
246
95
 
247
96
  wrong_envs.each do |wrong_env|
248
- @params[:environment] = wrong_env
249
-
250
- assert_raises(ArgumentError) { Sepa::Client.new(@params) }
97
+ @nordea_generic_params[:environment] = wrong_env
98
+ sepa = Sepa::Client.new @nordea_generic_params
99
+ refute sepa.valid?, sepa.errors.messages
100
+ assert_includes sepa.errors.messages.to_s, ENVIRONMENT_ERROR_MESSAGE
251
101
  end
252
102
  end
253
103
 
254
- def test_should_raise_error_if_status_wrong
255
- commands = [:download_file, :download_file_list]
256
-
257
- commands.each do |command|
258
- @params[:command] = command
259
-
260
- wrong_statuses = ["ready", 'steady', 5, :nipsu]
104
+ test 'environment defaults to production' do
105
+ @nordea_generic_params.delete :environment
106
+ sepa = Sepa::Client.new @nordea_generic_params
107
+ assert sepa.environment == 'PRODUCTION'
108
+ assert sepa.valid?
109
+ end
261
110
 
262
- wrong_statuses.each do |wrong_status|
263
- @params[:status] = wrong_status
111
+ test "status values are checked" do
112
+ wrong_statuses = ["ready", 'steady', 5, :nipsu]
264
113
 
265
- assert_raises(ArgumentError) { Sepa::Client.new(@params) }
266
- end
114
+ wrong_statuses.each do |wrong_status|
115
+ @nordea_generic_params[:command] = :download_file_list
116
+ @nordea_generic_params[:status] = wrong_status
117
+ sepa = Sepa::Client.new @nordea_generic_params
118
+ refute sepa.valid?, sepa.errors.messages
267
119
  end
268
120
  end
269
121
 
270
- def test_should_raise_error_if_target_id_wrong
271
- commands = [:download_file, :download_file_list, :upload_file]
272
-
273
- commands.each do |command|
274
- @params[:command] = command
122
+ test "should not be valid without target id" do
123
+ wrong_ids = ["ready"*81, nil]
124
+ @nordea_generic_params[:command] = :upload_file
275
125
 
276
- wrong_ids = ["ready"*81, nil]
277
-
278
- wrong_ids.each do |wrong_id|
279
- @params[:target_id] = wrong_id
280
-
281
- assert_raises(ArgumentError) { Sepa::Client.new(@params) }
282
- end
126
+ wrong_ids.each do |wrong_id|
127
+ @nordea_generic_params[:target_id] = wrong_id
128
+ sepa = Sepa::Client.new @nordea_generic_params
129
+ refute sepa.valid?, sepa.errors.messages
130
+ assert_includes sepa.errors.messages.to_s, TARGET_ID_ERROR_MESSAGE
283
131
  end
284
132
  end
285
133
 
286
- def test_should_raise_error_if_language_wrong
134
+ test "language values are valid" do
287
135
  wrong_langs = ["Joo", 7, :protuction]
288
136
 
289
137
  wrong_langs.each do |wrong_lang|
290
- @params[:language] = wrong_lang
291
-
292
- assert_raises(ArgumentError) { Sepa::Client.new(@params) }
138
+ @nordea_generic_params[:language] = wrong_lang
139
+ sepa = Sepa::Client.new @nordea_generic_params
140
+ refute sepa.valid?, sepa.errors.messages
293
141
  end
294
142
  end
295
143
 
296
- def test_should_raise_error_if_file_type_wrong_or_missing
297
- commands = [:download_file, :download_file_list, :upload_file]
298
-
299
- commands.each do |command|
300
- @params[:command] = command
301
-
302
- wrong_types = ["kalle"*41, nil]
303
-
304
- wrong_types.each do |wrong_type|
305
- @params[:file_type] = wrong_type
144
+ test "file type is checked" do
145
+ wrong_types = ["kalle"*36, nil]
306
146
 
307
- assert_raises(ArgumentError) { Sepa::Client.new(@params) }
147
+ wrong_types.each do |wrong_type|
148
+ [:upload_file, :download_file_list].each do |command|
149
+ @nordea_generic_params[:command] = command
150
+ @nordea_generic_params[:file_type] = wrong_type
151
+ sepa = Sepa::Client.new @nordea_generic_params
152
+ refute sepa.valid?, sepa.errors.messages
153
+ assert_includes sepa.errors.messages.to_s, FILE_TYPE_ERROR_MESSAGE
308
154
  end
309
155
  end
310
156
  end
311
157
 
312
- def test_should_raise_error_if_content_missing
313
- @params[:command] = :upload_file
314
- @params.delete(:content)
158
+ test "content is required for upload file" do
159
+ @nordea_generic_params[:command] = :upload_file
160
+ @nordea_generic_params.delete(:content)
161
+ sepa = Sepa::Client.new @nordea_generic_params
162
+ refute sepa.valid?, sepa.errors.messages
163
+ assert_includes sepa.errors.messages.to_s, CONTENT_ERROR_MESSAGE
164
+ end
315
165
 
316
- assert_raises(ArgumentError) { Sepa::Client.new(@params) }
166
+ test 'file reference is required for download file' do
167
+ @nordea_generic_params.delete :file_reference
168
+ sepa = Sepa::Client.new @nordea_generic_params
169
+ refute sepa.valid?, sepa.errors.messages
170
+ assert_includes sepa.errors.messages.to_s, FILE_REFERENCE_ERROR_MESSAGE
317
171
  end
318
172
 
319
- # The response from savon will be the request to check that a proper request
320
- # was made in the following four tests
173
+ # # The response from savon will be the request to check that a proper request
174
+ # # was made in the following four tests
321
175
  def test_should_send_proper_request_with_get_user_info
322
- client = Sepa::Client.new(@params)
323
- response = client.send
176
+ @nordea_generic_params[:command] = :get_user_info
177
+ client = Sepa::Client.new(@nordea_generic_params)
178
+ response = client.send_request
324
179
 
325
- assert_equal response.body.keys[0], :get_user_infoin
180
+ assert response.soap.at_css('cor|getUserInfoin', cor: @cor)
326
181
 
327
- Dir.chdir(@schemas_path) do
182
+ Dir.chdir(SCHEMA_PATH) do
328
183
  xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
329
- assert xsd.valid?(Nokogiri::XML(response.to_xml))
184
+ assert xsd.valid?(response.soap)
330
185
  end
331
186
  end
332
187
 
333
188
  def test_should_send_proper_request_with_download_file_list
334
- @params[:command] = :download_file_list
335
- client = Sepa::Client.new(@params)
336
- response = client.send
189
+ @nordea_generic_params[:command] = :download_file_list
190
+ client = Sepa::Client.new(@nordea_generic_params)
191
+ response = client.send_request
337
192
 
338
- assert_equal response.body.keys[0], :download_file_listin
193
+ assert response.soap.at_css('cor|downloadFileListin', cor: @cor)
339
194
 
340
- Dir.chdir(@schemas_path) do
195
+ Dir.chdir(SCHEMA_PATH) do
341
196
  xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
342
- assert xsd.valid?(Nokogiri::XML(response.to_xml))
197
+ assert xsd.valid?(response.soap)
343
198
  end
344
199
  end
345
200
 
346
201
  def test_should_send_proper_request_with_download_file
347
- @params[:command] = :download_file
348
- client = Sepa::Client.new(@params)
349
- response = client.send
202
+ @nordea_generic_params[:command] = :download_file
203
+ client = Sepa::Client.new(@nordea_generic_params)
204
+ response = client.send_request
350
205
 
351
- assert_equal response.body.keys[0], :download_filein
206
+ assert response.soap.at_css('cor|downloadFilein', cor: @cor)
352
207
 
353
- Dir.chdir(@schemas_path) do
208
+ Dir.chdir(SCHEMA_PATH) do
354
209
  xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
355
- assert xsd.valid?(Nokogiri::XML(response.to_xml))
210
+ assert xsd.valid?(response.soap)
356
211
  end
357
212
  end
358
213
 
359
214
  def test_should_send_proper_request_with_upload_file
360
- @params[:command] = :upload_file
361
- client = Sepa::Client.new(@params)
362
- response = client.send
215
+ @nordea_generic_params[:command] = :upload_file
216
+ client = Sepa::Client.new(@nordea_generic_params)
217
+ response = client.send_request
363
218
 
364
- assert_equal response.body.keys[0], :upload_filein
219
+ assert response.soap.at_css('cor|uploadFilein', cor: @cor)
365
220
 
366
- Dir.chdir(@schemas_path) do
221
+ Dir.chdir(SCHEMA_PATH) do
367
222
  xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
368
- assert xsd.valid?(Nokogiri::XML(response.to_xml))
223
+ assert xsd.valid?(response.soap)
369
224
  end
370
225
  end
371
226
 
372
227
  def test_should_initialize_with_proper_cert_params
373
- assert Sepa::Client.new(@certparams)
228
+ assert Sepa::Client.new(@nordea_cert_params)
374
229
  end
375
230
 
376
231
  def test_should_send_proper_request_with_get_certificate
377
- client = Sepa::Client.new(@certparams)
378
- response = client.send
232
+ client = Sepa::Client.new(@nordea_cert_params)
233
+ response = client.send_request
379
234
 
380
- assert_equal response.body.keys[0], :get_certificatein
235
+ assert response.soap.at_css('cer|getCertificatein')
381
236
 
382
- Dir.chdir(@schemas_path) do
237
+ Dir.chdir(SCHEMA_PATH) do
383
238
  xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
384
- assert xsd.valid?(Nokogiri::XML(response.to_xml))
239
+ assert xsd.valid?(response.soap)
385
240
  end
386
241
  end
387
242
 
388
- def test_should_raise_error_if_cert_service_missing
389
- @certparams[:command] = :get_certificate
390
- @certparams.delete(:service)
243
+ def test_should_check_signing_cert_request_with_create_certificate
244
+ @danske_cert_params[:command] = :create_certificate
245
+ @danske_cert_params.delete(:signing_cert_pkcs10)
391
246
 
392
- assert_raises(ArgumentError) { Sepa::Client.new(@certparams) }
247
+ sepa = Sepa::Client.new(@danske_cert_params)
248
+ refute sepa.valid?
249
+ assert_includes sepa.errors.messages.to_s, SIGNING_CERT_REQUEST_ERROR_MESSAGE
393
250
  end
394
251
 
395
- def test_should_raise_error_if_signing_pkcs_plain_and_path_missing_with_create_certificate
396
- @danskecertparams[:command] = :create_certificate
397
- @danskecertparams.delete(:signing_cert_pkcs10_plain)
398
- @danskecertparams.delete(:signing_cert_pkcs10_path)
252
+ def test_should_check_encryption_cert_request_with_create_certificate
253
+ @danske_cert_params[:command] = :create_certificate
254
+ @danske_cert_params.delete(:encryption_cert_pkcs10)
399
255
 
400
- assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
256
+ sepa = Sepa::Client.new(@danske_cert_params)
257
+ refute sepa.valid?
258
+ assert_includes sepa.errors.messages.to_s, ENCRYPTION_CERT_REQUEST_ERROR_MESSAGE
401
259
  end
402
260
 
403
- def test_should_raise_error_if_encryption_pkcs_plain_and_path_missing_with_create_certificate
404
- @danskecertparams[:command] = :create_certificate
405
- @danskecertparams.delete(:encryption_cert_pkcs10_plain)
406
- @danskecertparams.delete(:encryption_cert_pkcs10_path)
261
+ def test_should_check_pin_with_create_certificate
262
+ @danske_cert_params[:command] = :create_certificate
263
+ @danske_cert_params.delete(:pin)
407
264
 
408
- assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
265
+ sepa = Sepa::Client.new(@danske_cert_params)
266
+ refute sepa.valid?
267
+ assert_includes sepa.errors.messages.to_s, PIN_ERROR_MESSAGE
409
268
  end
410
269
 
411
- def test_should_raise_error_if_pin_missing_with_create_certificate
412
- @danskecertparams[:command] = :create_certificate
413
- @danskecertparams.delete(:pin)
270
+ def test_should_check_encryption_cert_with_create_certificate
271
+ @danske_cert_params[:command] = :create_certificate
272
+ @danske_cert_params.delete(:enc_cert)
414
273
 
415
- assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
274
+ sepa = Sepa::Client.new(@danske_cert_params)
275
+ refute sepa.valid?
276
+ assert_includes sepa.errors.messages.to_s, ENCRYPTION_CERT_ERROR_MESSAGE
416
277
  end
417
278
 
418
- def test_should_raise_error_if_cert_plain_and_cert_path_missing_with_create_certificate
419
- @danskecertparams[:command] = :create_certificate
420
- @danskecertparams.delete(:cert_plain)
421
- @danskecertparams.delete(:cert_path)
422
-
423
- assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
424
- end
425
279
  end