epics 2.10.0 → 3.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.semaphore/semaphore.yml +17 -8
  4. data/CHANGELOG.md +97 -0
  5. data/EBICS_REFERENCES.md +169 -0
  6. data/README.md +219 -50
  7. data/lib/epics/azv.rb +3 -10
  8. data/lib/epics/b2b.rb +3 -10
  9. data/lib/epics/bka.rb +3 -14
  10. data/lib/epics/builders/body_builder/base.rb +26 -0
  11. data/lib/epics/builders/body_builder/v2.rb +9 -0
  12. data/lib/epics/builders/body_builder/v3.rb +9 -0
  13. data/lib/epics/builders/body_builder.rb +6 -0
  14. data/lib/epics/builders/data_encryption_info_builder.rb +29 -0
  15. data/lib/epics/builders/data_transfer_builder/base.rb +52 -0
  16. data/lib/epics/builders/data_transfer_builder/v2.rb +9 -0
  17. data/lib/epics/builders/data_transfer_builder/v3.rb +12 -0
  18. data/lib/epics/builders/data_transfer_builder.rb +6 -0
  19. data/lib/epics/builders/header_builder/base.rb +26 -0
  20. data/lib/epics/builders/header_builder/v2.rb +9 -0
  21. data/lib/epics/builders/header_builder/v3.rb +9 -0
  22. data/lib/epics/builders/header_builder.rb +6 -0
  23. data/lib/epics/builders/mutable_builder.rb +28 -0
  24. data/lib/epics/builders/order_details_builder/base.rb +100 -0
  25. data/lib/epics/builders/order_details_builder/v2.rb +21 -0
  26. data/lib/epics/builders/order_details_builder/v3.rb +51 -0
  27. data/lib/epics/builders/order_details_builder.rb +10 -0
  28. data/lib/epics/builders/request_builder.rb +25 -0
  29. data/lib/epics/builders/static_builder/base.rb +75 -0
  30. data/lib/epics/builders/static_builder/v2.rb +9 -0
  31. data/lib/epics/builders/static_builder/v3.rb +9 -0
  32. data/lib/epics/builders/static_builder.rb +9 -0
  33. data/lib/epics/builders/transfer_receipt_builder.rb +19 -0
  34. data/lib/epics/builders/xml_builder/base.rb +92 -0
  35. data/lib/epics/builders/xml_builder/v24.rb +31 -0
  36. data/lib/epics/builders/xml_builder/v25.rb +31 -0
  37. data/lib/epics/builders/xml_builder/v3.rb +31 -0
  38. data/lib/epics/builders/xml_builder.rb +7 -0
  39. data/lib/epics/builders.rb +13 -0
  40. data/lib/epics/c2s.rb +3 -10
  41. data/lib/epics/c52.rb +2 -14
  42. data/lib/epics/c53.rb +2 -14
  43. data/lib/epics/c54.rb +2 -14
  44. data/lib/epics/c5n.rb +3 -14
  45. data/lib/epics/ccs.rb +3 -10
  46. data/lib/epics/cct.rb +3 -10
  47. data/lib/epics/cd1.rb +3 -10
  48. data/lib/epics/cdb.rb +3 -10
  49. data/lib/epics/cdd.rb +3 -10
  50. data/lib/epics/cds.rb +3 -10
  51. data/lib/epics/cdz.rb +3 -14
  52. data/lib/epics/cip.rb +3 -10
  53. data/lib/epics/client.rb +491 -123
  54. data/lib/epics/crypt/aes.rb +56 -0
  55. data/lib/epics/crypt/x_509.rb +52 -0
  56. data/lib/epics/crypt.rb +5 -0
  57. data/lib/epics/crz.rb +3 -14
  58. data/lib/epics/factories/crypt/aes_factory.rb +5 -0
  59. data/lib/epics/factories/crypt.rb +4 -0
  60. data/lib/epics/factories/request_factory/base.rb +236 -0
  61. data/lib/epics/factories/request_factory/v2.rb +194 -0
  62. data/lib/epics/factories/request_factory/v24.rb +32 -0
  63. data/lib/epics/factories/request_factory/v25.rb +31 -0
  64. data/lib/epics/factories/request_factory/v3.rb +305 -0
  65. data/lib/epics/factories/request_factory.rb +8 -0
  66. data/lib/epics/factories.rb +5 -0
  67. data/lib/epics/fdl.rb +3 -18
  68. data/lib/epics/ful.rb +6 -0
  69. data/lib/epics/generic_request.rb +31 -92
  70. data/lib/epics/generic_upload_request.rb +14 -67
  71. data/lib/epics/haa.rb +3 -9
  72. data/lib/epics/hac.rb +3 -14
  73. data/lib/epics/handlers/auth_signature_handler.rb +102 -0
  74. data/lib/epics/handlers/order_data_handler/base.rb +98 -0
  75. data/lib/epics/handlers/order_data_handler/v2.rb +39 -0
  76. data/lib/epics/handlers/order_data_handler/v24.rb +11 -0
  77. data/lib/epics/handlers/order_data_handler/v25.rb +11 -0
  78. data/lib/epics/handlers/order_data_handler/v3.rb +41 -0
  79. data/lib/epics/handlers/order_data_handler.rb +8 -0
  80. data/lib/epics/handlers/user_signature_handler/base.rb +10 -0
  81. data/lib/epics/handlers/user_signature_handler/v2.rb +17 -0
  82. data/lib/epics/handlers/user_signature_handler/v3.rb +17 -0
  83. data/lib/epics/handlers/user_signature_handler.rb +6 -0
  84. data/lib/epics/handlers.rb +6 -0
  85. data/lib/epics/hev.rb +2 -15
  86. data/lib/epics/hia.rb +4 -55
  87. data/lib/epics/hkd.rb +3 -9
  88. data/lib/epics/hpb.rb +3 -13
  89. data/lib/epics/hpd.rb +3 -9
  90. data/lib/epics/htd.rb +3 -9
  91. data/lib/epics/ini.rb +4 -46
  92. data/lib/epics/keyring.rb +17 -0
  93. data/lib/epics/letter_renderer.rb +17 -22
  94. data/lib/epics/ptk.rb +3 -14
  95. data/lib/epics/response.rb +34 -29
  96. data/lib/epics/services/crypt_service.rb +62 -0
  97. data/lib/epics/services/digest_resolver/base.rb +30 -0
  98. data/lib/epics/services/digest_resolver/v2.rb +13 -0
  99. data/lib/epics/services/digest_resolver/v3.rb +19 -0
  100. data/lib/epics/services/digest_resolver.rb +6 -0
  101. data/lib/epics/services.rb +5 -0
  102. data/lib/epics/signature.rb +50 -0
  103. data/lib/epics/{key.rb → signature_algorithm/base.rb} +14 -21
  104. data/lib/epics/signature_algorithm/rsa.rb +50 -0
  105. data/lib/epics/signature_algorithm/rsapkcs1.rb +16 -0
  106. data/lib/epics/signature_algorithm/rsapss.rb +20 -0
  107. data/lib/epics/signature_algorithm.rb +2 -0
  108. data/lib/epics/sta.rb +3 -14
  109. data/lib/epics/version.rb +1 -1
  110. data/lib/epics/vmk.rb +3 -14
  111. data/lib/epics/wss.rb +3 -9
  112. data/lib/epics/xct.rb +3 -10
  113. data/lib/epics/xds.rb +3 -10
  114. data/lib/epics/xe2.rb +3 -10
  115. data/lib/epics/xe3.rb +3 -10
  116. data/lib/epics/xek.rb +5 -0
  117. data/lib/epics/yct.rb +6 -0
  118. data/lib/epics/z01.rb +2 -14
  119. data/lib/epics/z52.rb +2 -14
  120. data/lib/epics/z53.rb +2 -14
  121. data/lib/epics/z54.rb +2 -14
  122. data/lib/epics/zsr.rb +5 -0
  123. data/lib/epics.rb +69 -5
  124. data/lib/letter/ini.erb +27 -6
  125. data/spec/aes_spec.rb +46 -0
  126. data/spec/auth_signature_handler_spec.rb +58 -0
  127. data/spec/builders_spec.rb +616 -0
  128. data/spec/certificate_handling_spec.rb +189 -0
  129. data/spec/client_setup_block_spec.rb +41 -0
  130. data/spec/client_spec.rb +143 -91
  131. data/spec/crypt_service_spec.rb +132 -0
  132. data/spec/date_range_spec.rb +46 -0
  133. data/spec/digest_resolver_spec.rb +164 -0
  134. data/spec/fixtures/bank_x509.pem +3 -0
  135. data/spec/fixtures/xml/haa.xml +40 -1
  136. data/spec/fixtures/xml/haa_receipt.xml +33 -30
  137. data/spec/fixtures/xml/haa_response_h004.xml +4 -0
  138. data/spec/fixtures/xml/haa_response_h005.xml +38 -0
  139. data/spec/fixtures/xml/hia_request_order_data.xml +24 -1
  140. data/spec/fixtures/xml/hpb_request.xml +1 -1
  141. data/spec/fixtures/xml/hpb_response_x509.xml +16 -0
  142. data/spec/fixtures/xml/htd_order_data_h005.xml +55 -0
  143. data/spec/fixtures/xml/jruby/hia.xml +20 -22
  144. data/spec/fixtures/xml/jruby/ini.xml +1 -3
  145. data/spec/fixtures/xml/ruby/hia.xml +21 -1
  146. data/spec/fixtures/xml/ruby/ini.xml +21 -1
  147. data/spec/handlers_spec.rb +267 -0
  148. data/spec/hpb_malformed_certificate_spec.rb +36 -0
  149. data/spec/key_file_decryption_spec.rb +27 -0
  150. data/spec/key_file_preservation_spec.rb +78 -0
  151. data/spec/keyring_spec.rb +349 -0
  152. data/spec/middleware/parse_ebics_spec.rb +2 -1
  153. data/spec/order_id_spec.rb +65 -0
  154. data/spec/orders/azv_spec.rb +63 -7
  155. data/spec/orders/b2b_spec.rb +68 -3
  156. data/spec/orders/bka_spec.rb +34 -4
  157. data/spec/orders/c2s_spec.rb +62 -9
  158. data/spec/orders/c52_spec.rb +34 -4
  159. data/spec/orders/c53_spec.rb +34 -4
  160. data/spec/orders/c54_spec.rb +36 -4
  161. data/spec/orders/c5n_spec.rb +36 -4
  162. data/spec/orders/camt_parity_spec.rb +80 -0
  163. data/spec/orders/ccs_spec.rb +62 -9
  164. data/spec/orders/cct_spec.rb +83 -9
  165. data/spec/orders/cd1_spec.rb +50 -7
  166. data/spec/orders/cdb_spec.rb +64 -7
  167. data/spec/orders/cdd_spec.rb +64 -7
  168. data/spec/orders/cds_spec.rb +74 -0
  169. data/spec/orders/cdz_spec.rb +67 -4
  170. data/spec/orders/cip_spec.rb +61 -9
  171. data/spec/orders/crz_spec.rb +67 -4
  172. data/spec/orders/fdl_spec.rb +143 -13
  173. data/spec/orders/ful_spec.rb +63 -0
  174. data/spec/orders/haa_spec.rb +115 -9
  175. data/spec/orders/hac_spec.rb +89 -10
  176. data/spec/orders/hev_spec.rb +1 -6
  177. data/spec/orders/hia_spec.rb +25 -22
  178. data/spec/orders/hkd_spec.rb +23 -4
  179. data/spec/orders/hpb_spec.rb +7 -4
  180. data/spec/orders/hpd_spec.rb +23 -4
  181. data/spec/orders/htd_spec.rb +23 -4
  182. data/spec/orders/ini_spec.rb +23 -18
  183. data/spec/orders/ptk_spec.rb +27 -4
  184. data/spec/orders/sta_spec.rb +129 -11
  185. data/spec/orders/vmk_spec.rb +36 -4
  186. data/spec/orders/wss_spec.rb +29 -3
  187. data/spec/orders/x_509_certificate_spec.rb +9 -1
  188. data/spec/orders/xct_spec.rb +63 -0
  189. data/spec/orders/xds_spec.rb +13 -6
  190. data/spec/orders/xe2_spec.rb +64 -7
  191. data/spec/orders/xe3_spec.rb +64 -7
  192. data/spec/orders/xek_spec.rb +31 -0
  193. data/spec/orders/yct_spec.rb +43 -0
  194. data/spec/orders/z01_spec.rb +34 -4
  195. data/spec/orders/z52_spec.rb +34 -4
  196. data/spec/orders/z53_spec.rb +34 -4
  197. data/spec/orders/z54_spec.rb +36 -4
  198. data/spec/orders/zsr_spec.rb +31 -0
  199. data/spec/request_factory_spec.rb +444 -0
  200. data/spec/response_business_error_spec.rb +45 -0
  201. data/spec/response_validation_spec.rb +23 -0
  202. data/spec/{key_spec.rb → signature_algorithm/rsa_pss_spec.rb} +4 -13
  203. data/spec/support/ebics_matcher.rb +17 -9
  204. data/spec/support/ebics_shared_examples.rb +642 -0
  205. data/spec/support/h005_client_helper.rb +23 -0
  206. data/spec/upload_digest_spec.rb +69 -0
  207. data/spec/user_signature_handler_spec.rb +25 -0
  208. data/spec/version_support_error_spec.rb +76 -0
  209. data/spec/xsd/{ebics_hev.xsd → H000/ebics_hev.xsd} +0 -0
  210. data/spec/xsd/H003/ebics.xsd +11 -0
  211. data/spec/xsd/H003/ebics_keymgmt_request.xsd +555 -0
  212. data/spec/xsd/H003/ebics_keymgmt_response.xsd +131 -0
  213. data/spec/xsd/H003/ebics_orders.xsd +1811 -0
  214. data/spec/xsd/H003/ebics_request.xsd +354 -0
  215. data/spec/xsd/H003/ebics_response.xsd +161 -0
  216. data/spec/xsd/{ebics_signature.xsd → H003/ebics_signature.xsd} +0 -0
  217. data/spec/xsd/H003/ebics_types.xsd +2361 -0
  218. data/spec/xsd/H003/xmldsig-core-schema.xsd +318 -0
  219. data/spec/xsd/H004/ebics_signature.xsd +217 -0
  220. data/spec/xsd/H005/ebics_H005.xsd +11 -0
  221. data/spec/xsd/H005/ebics_keymgmt_request_H005.xsd +523 -0
  222. data/spec/xsd/H005/ebics_keymgmt_response_H005.xsd +137 -0
  223. data/spec/xsd/H005/ebics_orders_H005.xsd +2094 -0
  224. data/spec/xsd/H005/ebics_request_H005.xsd +349 -0
  225. data/spec/xsd/H005/ebics_response_H005.xsd +167 -0
  226. data/spec/xsd/H005/ebics_signature_S002.xsd +177 -0
  227. data/spec/xsd/H005/ebics_types_H005.xsd +1885 -0
  228. data/spec/xsd/H005/xmldsig-core-schema.xsd +318 -0
  229. metadata +200 -36
  230. data/lib/epics/header_request.rb +0 -58
  231. data/lib/epics/middleware/xmlsig.rb +0 -16
  232. data/lib/epics/signer.rb +0 -40
  233. data/lib/epics/x_509_certificate.rb +0 -15
  234. data/lib/letter/ini_with_certs.erb +0 -335
  235. data/spec/generic_upload_spec.rb +0 -58
  236. data/spec/hpb_spec.rb +0 -15
  237. data/spec/signer_spec.rb +0 -34
  238. /data/spec/xsd/{ebics_H004.xsd → H004/ebics_H004.xsd} +0 -0
  239. /data/spec/xsd/{ebics_keymgmt_request_H004.xsd → H004/ebics_keymgmt_request_H004.xsd} +0 -0
  240. /data/spec/xsd/{ebics_keymgmt_response_H004.xsd → H004/ebics_keymgmt_response_H004.xsd} +0 -0
  241. /data/spec/xsd/{ebics_orders_H004.xsd → H004/ebics_orders_H004.xsd} +0 -0
  242. /data/spec/xsd/{ebics_request_H004.xsd → H004/ebics_request_H004.xsd} +0 -0
  243. /data/spec/xsd/{ebics_response_H004.xsd → H004/ebics_response_H004.xsd} +0 -0
  244. /data/spec/xsd/{ebics_types_H004.xsd → H004/ebics_types_H004.xsd} +0 -0
  245. /data/spec/xsd/{xmldsig-core-schema.xsd → H004/xmldsig-core-schema.xsd} +0 -0
@@ -0,0 +1,69 @@
1
+ RSpec.describe 'upload order data digests' do
2
+ let(:key_file) { File.open(File.join(File.dirname(__FILE__), 'fixtures', 'SIZBN001.key')) }
3
+ let(:document) { File.read(File.join(File.dirname(__FILE__), 'fixtures', 'xml', 'cd1.xml')) }
4
+ let(:client) do
5
+ Epics::Client.new(key_file, 'secret', 'https://194.180.18.30/ebicsweb/ebicsweb',
6
+ 'SIZBN001', 'EBIX', 'EBICS', version:)
7
+ end
8
+
9
+ describe '#document_digest' do
10
+ let(:version) { Epics::Keyring::VERSION_25 }
11
+
12
+ subject { Epics::CCT.new(client, document) }
13
+
14
+ # Pinned: the hash basis determines the ES for every upload.
15
+ it 'hashes the document with CR and LF removed' do
16
+ expect(subject.document_digest)
17
+ .to eq(OpenSSL::Digest.digest('sha256', document.gsub(/\n|\r/, '')))
18
+ end
19
+
20
+ it 'does not hash the raw document' do
21
+ expect(subject.document_digest)
22
+ .not_to eq(OpenSSL::Digest.digest('sha256', document))
23
+ end
24
+
25
+ # Hashed bytes must equal transmitted bytes.
26
+ it 'normalizes once, so the digest covers exactly what is transmitted' do
27
+ expect(subject.document).not_to include("\n")
28
+ expect(subject.document_digest)
29
+ .to eq(OpenSSL::Digest.digest('sha256', subject.document))
30
+ end
31
+
32
+ it 'is identical for CRLF and LF encodings of the same document' do
33
+ lf = "<Doc>\n <A>1</A>\n</Doc>"
34
+ crlf = "<Doc>\r\n <A>1</A>\r\n</Doc>"
35
+
36
+ expect(Epics::CCT.new(client, crlf).document_digest)
37
+ .to eq(Epics::CCT.new(client, lf).document_digest)
38
+ end
39
+ end
40
+
41
+ describe 'H005 DataDigest' do
42
+ let(:version) { Epics::Keyring::VERSION_30 }
43
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
44
+
45
+ def data_digest_of(order)
46
+ Nokogiri::XML(order.to_xml).at_xpath('//e:DataDigest', ns)
47
+ end
48
+
49
+ # EBICS 3.0.2 §5.5.1.1: DataDigest is the "Hashwert der Auftragsdaten";
50
+ # @SignatureVersion names the hash algorithm, not a signature.
51
+ it 'carries the SHA-256 hash of the order data, not a signature' do
52
+ order = Epics::CCT.new(client, document)
53
+
54
+ expect(Base64.decode64(data_digest_of(order).text).bytesize).to eq(32)
55
+ expect(Base64.strict_encode64(order.document_digest))
56
+ .to eq(data_digest_of(order).text)
57
+ end
58
+
59
+ it 'is reproducible across two builds of the same document' do
60
+ expect(data_digest_of(Epics::CCT.new(client, document)).text)
61
+ .to eq(data_digest_of(Epics::CCT.new(client, document)).text)
62
+ end
63
+
64
+ it 'names the signature version used to form it' do
65
+ expect(data_digest_of(Epics::CCT.new(client, document))['SignatureVersion'])
66
+ .to eq(client.keyring.user_signature.version)
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,25 @@
1
+ RSpec.describe Epics::Handlers::UserSignatureHandler do
2
+ let(:client) { Epics::Client.new( File.open(File.join( File.dirname(__FILE__), 'fixtures', 'SIZBN001.key')), 'secret' , 'https://194.180.18.30/ebicsweb/ebicsweb', 'SIZBN001', 'EBIX', 'EBICS') }
3
+ let(:document) { "\x01" * 12 }
4
+ let(:cct) { Epics::CCT.new(client, document) }
5
+
6
+ before { allow_any_instance_of(OpenSSL::Cipher::AES).to receive(:random_key).and_return(Base64.strict_decode64('NoG3dD6eHqtYTYrJn6TIzA==')) }
7
+
8
+ let(:crypt_service) { cct.instance_variable_get(:@crypt_service) }
9
+ let(:digest) { crypt_service.hash(document) }
10
+ subject { Nokogiri::XML(cct.to_xml) }
11
+ let(:signature_data_encrypted_node) { subject.xpath("//ebics:SignatureData", ebics: 'urn:org:ebics:H004').first }
12
+ let(:signature_data_node) { Nokogiri::XML(Zlib::Inflate.inflate(crypt_service.decrypt_by_key(cct.transaction_key, Base64.strict_decode64(signature_data_encrypted_node.content)))) }
13
+ let(:signature_value_node) { signature_data_node.xpath("//ebics:SignatureValue", ebics: 'http://www.ebics.org/S001').first }
14
+
15
+ describe '#signature_value' do
16
+
17
+ # it 'will be the signed document' do
18
+ # expect(signature_value_node.content).to eq('cD3DF2ytthmdj/7m53JWZK6IOo26nmaGP4LHdwUqMh3zRTlc7EiidC8oxKqVIFWC3dq7/EaZvKUFrAEc/h64IwlBFyFHOBUW9Xfl...I5KXr1dmWD1mhWYotpdIFXzORS1Bd14C2zh0vpDBhSz7rWu1uNaFy2CxfjEg0tyeapMKsaO8P9MX0SL6dEWE2cOL12hVJu+0Q==')
19
+ # end
20
+
21
+ it 'can be verified with the same key' do
22
+ expect(client.keyring.user_signature.key.verify(signature_value_node.content, digest)).to eq(true)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,76 @@
1
+ RSpec.describe Epics::VersionSupportError do
2
+ let(:client) do
3
+ Epics::Client.new(File.open(File.join(File.dirname(__FILE__), 'fixtures', 'SIZBN001.key')),
4
+ 'secret', 'https://194.180.18.30/ebicsweb/ebicsweb', 'SIZBN001', 'EBIX', 'EBICS',
5
+ version: version)
6
+ end
7
+ let(:document) { File.read(File.join(File.dirname(__FILE__), 'fixtures', 'xml', 'cd1.xml')) }
8
+
9
+ describe 'a 2.x-only order type on H005' do
10
+ let(:version) { Epics::Keyring::VERSION_30 }
11
+
12
+ it 'reports the direction it means' do
13
+ expect { Epics::FUL.new(client, document, file_format: 'x').to_xml }
14
+ .to raise_error(described_class, 'Support for versions below 3.0')
15
+ end
16
+
17
+ # `raise Class, arg, backtrace` puts a third argument in the backtrace slot, so a
18
+ # direction passed that way is silently dropped and the trace destroyed.
19
+ it 'keeps its backtrace' do
20
+ Epics::FUL.new(client, document, file_format: 'x').to_xml
21
+ rescue described_class => e
22
+ expect(e.backtrace.first).to include('request_factory/v3.rb')
23
+ end
24
+ end
25
+
26
+ # "below 3.0" is only accurate if these work on 2.4 as well as 2.5.
27
+ describe 'the 2.x-only order types' do
28
+ builders = {
29
+ 'FUL' => ->(c, doc) { Epics::FUL.new(c, doc, file_format: 'pain.001') },
30
+ 'FDL' => ->(c, _doc) { Epics::FDL.new(c, file_format: 'camt.053') },
31
+ 'CD1' => ->(c, doc) { Epics::CD1.new(c, doc) },
32
+ 'WSS' => ->(c, _doc) { Epics::WSS.new(c) },
33
+ 'XDS' => ->(c, doc) { Epics::XDS.new(c, doc) },
34
+ 'XCT' => ->(c, doc) { Epics::XCT.new(c, doc) }
35
+ }
36
+
37
+ builders.each do |type, build|
38
+ [Epics::Keyring::VERSION_24, Epics::Keyring::VERSION_25].each do |supported|
39
+ context "#{type} on #{supported}" do
40
+ let(:version) { supported }
41
+
42
+ it 'builds a request' do
43
+ expect { build.call(client, document).to_xml }.not_to raise_error
44
+ end
45
+ end
46
+ end
47
+
48
+ context "#{type} on #{Epics::Keyring::VERSION_30}" do
49
+ let(:version) { Epics::Keyring::VERSION_30 }
50
+
51
+ it 'raises' do
52
+ expect { build.call(client, document).to_xml }
53
+ .to raise_error(described_class, 'Support for versions below 3.0')
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ describe 'an H005-only concept on 2.x' do
60
+ let(:version) { Epics::Keyring::VERSION_25 }
61
+
62
+ it 'reports the direction it means' do
63
+ expect { Epics::CCT.new(client, document).request_factory.create_btd }
64
+ .to raise_error(described_class, 'Supported from version 3.0')
65
+ end
66
+ end
67
+
68
+ describe 'an unknown direction' do
69
+ let(:version) { Epics::Keyring::VERSION_25 }
70
+
71
+ it 'raises rather than rendering a wrong message' do
72
+ expect { described_class.new(3.0, 'sideways') }
73
+ .to raise_error(ArgumentError, /Invalid direction/)
74
+ end
75
+ end
76
+ end
File without changes
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ebics="http://www.ebics.org/H003" targetNamespace="http://www.ebics.org/H003" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
3
+ <annotation>
4
+ <documentation xml:lang="de">ebics.xsd inkludiert alle Schemadateien des EBICS-Protokolls, um die Eindeutigkeit von Element- und Typnamen im EBCIS Namespace zu erzwingen.</documentation>
5
+ <documentation xml:lang="en">ebics.xsd includes all schema files for the EBICS protocol in order to enforce unique element and type names in the EBICS namespace.</documentation>
6
+ </annotation>
7
+ <include schemaLocation="ebics_request.xsd"/>
8
+ <include schemaLocation="ebics_response.xsd"/>
9
+ <include schemaLocation="ebics_keymgmt_request.xsd"/>
10
+ <include schemaLocation="ebics_keymgmt_response.xsd"/>
11
+ </schema>