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
@@ -1,21 +1,74 @@
1
1
  RSpec.describe Epics::C2S do
2
-
3
- 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') }
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', version:) }
4
3
  let(:document) { File.read( File.join( File.dirname(__FILE__), '..', 'fixtures', 'xml', 'cdb.xml') ) }
4
+
5
5
  subject { described_class.new(client, document) }
6
6
 
7
7
  describe 'order attributes' do
8
- it { expect(subject.header.to_s).to include('<OrderAttribute>DZHNN</OrderAttribute>') }
9
- it { expect(subject.header.to_s).to include('<OrderType>C2S</OrderType>') }
8
+ let(:version) { Epics::Keyring::VERSION_25 }
9
+
10
+ it { expect(subject.to_xml).to include('<OrderAttribute>DZHNN</OrderAttribute>') }
11
+ it { expect(subject.to_xml).to include('<OrderType>C2S</OrderType>') }
10
12
  end
11
13
 
12
- describe '#to_xml' do
13
- specify { expect(subject.to_xml).to be_a_valid_ebics_doc }
14
+ include_examples '#to_xml'
15
+ include_examples '#to_transfer_xml'
16
+
17
+ describe 'H005 request structure' do
18
+ let(:version) { Epics::Keyring::VERSION_30 }
19
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
20
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
21
+
22
+ include_examples 'a valid ebicsRequest H005 upload',
23
+ service_name: 'SDD', msg_name: 'pain.008', scope: 'BIL'
24
+ end
25
+
26
+ describe 'H005 transfer structure' do
27
+ let(:version) { Epics::Keyring::VERSION_30 }
28
+ let(:xml) do
29
+ subject.transaction_id = SecureRandom.hex(16)
30
+ Nokogiri::XML(subject.to_transfer_xml)
31
+ end
32
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
33
+
34
+ include_examples 'a valid ebicsRequest H005 transfer'
35
+ end
36
+
37
+ describe 'H004 request structure' do
38
+ let(:version) { Epics::Keyring::VERSION_25 }
39
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
40
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
41
+
42
+ include_examples 'a valid ebicsRequest upload', order_type: 'C2S', order_attribute: 'DZHNN'
43
+ end
44
+
45
+ describe 'H004 transfer structure' do
46
+ let(:version) { Epics::Keyring::VERSION_25 }
47
+ let(:xml) do
48
+ subject.transaction_id = SecureRandom.hex(16)
49
+ Nokogiri::XML(subject.to_transfer_xml)
50
+ end
51
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
52
+
53
+ include_examples 'a valid ebicsRequest transfer'
54
+ end
55
+
56
+ describe 'H003 request structure' do
57
+ let(:version) { Epics::Keyring::VERSION_24 }
58
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
59
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
60
+
61
+ include_examples 'a valid ebicsRequest upload', order_type: 'C2S', order_attribute: 'DZHNN', ebics_version: 'H003'
14
62
  end
15
63
 
16
- describe '#to_transfer_xml' do
17
- before { subject.transaction_id = SecureRandom.hex(16) }
64
+ describe 'H003 transfer structure' do
65
+ let(:version) { Epics::Keyring::VERSION_24 }
66
+ let(:xml) do
67
+ subject.transaction_id = SecureRandom.hex(16)
68
+ Nokogiri::XML(subject.to_transfer_xml)
69
+ end
70
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
18
71
 
19
- specify { expect(subject.to_transfer_xml).to be_a_valid_ebics_doc }
72
+ include_examples 'a valid ebicsRequest transfer', ebics_version: 'H003'
20
73
  end
21
74
  end
@@ -1,11 +1,41 @@
1
1
  RSpec.describe Epics::C52 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', version:) }
2
3
 
3
- 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') }
4
+ subject { described_class.new(client, from: Date.parse('2014-09-01'), to: Date.parse('2014-09-30')) }
4
5
 
5
- subject { described_class.new(client, from: "2014-09-01", to: "2014-09-30") }
6
+ describe 'order attributes' do
7
+ let(:version) { Epics::Keyring::VERSION_25 }
6
8
 
7
- describe '#to_xml' do
8
- specify { expect(subject.to_xml).to be_a_valid_ebics_doc }
9
+ it { expect(subject.to_xml).to include('<OrderAttribute>DZHNN</OrderAttribute>') }
10
+ it { expect(subject.to_xml).to include('<OrderType>C52</OrderType>') }
9
11
  end
10
12
 
13
+ include_examples '#to_xml'
14
+
15
+ describe 'H005 request structure' do
16
+ let(:version) { Epics::Keyring::VERSION_30 }
17
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
18
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
19
+
20
+ include_examples 'a valid ebicsRequest H005 download with date range',
21
+ service_name: 'STM', msg_name: 'camt.052', from: '2014-09-01', to: '2014-09-30'
22
+ end
23
+
24
+ describe 'H004 request structure' do
25
+ let(:version) { Epics::Keyring::VERSION_25 }
26
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
27
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
28
+
29
+ include_examples 'a valid ebicsRequest download with date range',
30
+ order_type: 'C52', from: '2014-09-01', to: '2014-09-30'
31
+ end
32
+
33
+ describe 'H003 request structure' do
34
+ let(:version) { Epics::Keyring::VERSION_24 }
35
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
36
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
37
+
38
+ include_examples 'a valid ebicsRequest download with date range',
39
+ order_type: 'C52', from: '2014-09-01', to: '2014-09-30', ebics_version: 'H003'
40
+ end
11
41
  end
@@ -1,11 +1,41 @@
1
1
  RSpec.describe Epics::C53 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', version:) }
2
3
 
3
- 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') }
4
+ subject { described_class.new(client, from: Date.parse('2014-09-01'), to: Date.parse('2014-09-30')) }
4
5
 
5
- subject { described_class.new(client, from: "2014-09-01", to: "2014-09-30") }
6
+ describe 'order attributes' do
7
+ let(:version) { Epics::Keyring::VERSION_25 }
6
8
 
7
- describe '#to_xml' do
8
- specify { expect(subject.to_xml).to be_a_valid_ebics_doc }
9
+ it { expect(subject.to_xml).to include('<OrderAttribute>DZHNN</OrderAttribute>') }
10
+ it { expect(subject.to_xml).to include('<OrderType>C53</OrderType>') }
9
11
  end
10
12
 
13
+ include_examples '#to_xml'
14
+
15
+ describe 'H005 request structure' do
16
+ let(:version) { Epics::Keyring::VERSION_30 }
17
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
18
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
19
+
20
+ include_examples 'a valid ebicsRequest H005 download with date range',
21
+ service_name: 'EOP', msg_name: 'camt.053', from: '2014-09-01', to: '2014-09-30'
22
+ end
23
+
24
+ describe 'H004 request structure' do
25
+ let(:version) { Epics::Keyring::VERSION_25 }
26
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
27
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
28
+
29
+ include_examples 'a valid ebicsRequest download with date range',
30
+ order_type: 'C53', from: '2014-09-01', to: '2014-09-30'
31
+ end
32
+
33
+ describe 'H003 request structure' do
34
+ let(:version) { Epics::Keyring::VERSION_24 }
35
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
36
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
37
+
38
+ include_examples 'a valid ebicsRequest download with date range',
39
+ order_type: 'C53', from: '2014-09-01', to: '2014-09-30', ebics_version: 'H003'
40
+ end
11
41
  end
@@ -1,9 +1,41 @@
1
1
  RSpec.describe Epics::C54 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') }
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', version:) }
3
3
 
4
- subject { described_class.new(client, from: "2014-09-01", to: "2014-09-30") }
4
+ subject { described_class.new(client, from: Date.parse('2014-09-01'), to: Date.parse('2014-09-30')) }
5
5
 
6
- describe '#to_xml' do
7
- specify { expect(subject.to_xml).to be_a_valid_ebics_doc }
6
+ describe 'order attributes' do
7
+ let(:version) { Epics::Keyring::VERSION_25 }
8
+
9
+ it { expect(subject.to_xml).to include('<OrderAttribute>DZHNN</OrderAttribute>') }
10
+ it { expect(subject.to_xml).to include('<OrderType>C54</OrderType>') }
11
+ end
12
+
13
+ include_examples '#to_xml'
14
+
15
+ describe 'H005 request structure' do
16
+ let(:version) { Epics::Keyring::VERSION_30 }
17
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
18
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
19
+
20
+ include_examples 'a valid ebicsRequest H005 download with date range',
21
+ service_name: 'REP', msg_name: 'camt.054', from: '2014-09-01', to: '2014-09-30'
22
+ end
23
+
24
+ describe 'H004 request structure' do
25
+ let(:version) { Epics::Keyring::VERSION_25 }
26
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
27
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
28
+
29
+ include_examples 'a valid ebicsRequest download with date range',
30
+ order_type: 'C54', from: '2014-09-01', to: '2014-09-30'
31
+ end
32
+
33
+ describe 'H003 request structure' do
34
+ let(:version) { Epics::Keyring::VERSION_24 }
35
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
36
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
37
+
38
+ include_examples 'a valid ebicsRequest download with date range',
39
+ order_type: 'C54', from: '2014-09-01', to: '2014-09-30', ebics_version: 'H003'
8
40
  end
9
41
  end
@@ -1,9 +1,41 @@
1
1
  RSpec.describe Epics::C5N 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') }
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', version:) }
3
3
 
4
- subject { described_class.new(client, from: "2014-09-01", to: "2014-09-01") }
4
+ subject { described_class.new(client, from: Date.parse('2014-09-01'), to: Date.parse('2014-09-01')) }
5
5
 
6
- describe '#to_xml' do
7
- specify { expect(subject.to_xml).to be_a_valid_ebics_doc }
6
+ describe 'order attributes' do
7
+ let(:version) { Epics::Keyring::VERSION_25 }
8
+
9
+ it { expect(subject.to_xml).to include('<OrderAttribute>DZHNN</OrderAttribute>') }
10
+ it { expect(subject.to_xml).to include('<OrderType>C5N</OrderType>') }
11
+ end
12
+
13
+ include_examples '#to_xml'
14
+
15
+ describe 'H005 request structure' do
16
+ let(:version) { Epics::Keyring::VERSION_30 }
17
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
18
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
19
+
20
+ include_examples 'a valid ebicsRequest H005 download with date range',
21
+ service_name: 'STM', msg_name: 'camt.054', scope: 'DE', service_option: 'SCI', from: '2014-09-01', to: '2014-09-01'
22
+ end
23
+
24
+ describe 'H004 request structure' do
25
+ let(:version) { Epics::Keyring::VERSION_25 }
26
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
27
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
28
+
29
+ include_examples 'a valid ebicsRequest download with date range',
30
+ order_type: 'C5N', from: '2014-09-01', to: '2014-09-01'
31
+ end
32
+
33
+ describe 'H003 request structure' do
34
+ let(:version) { Epics::Keyring::VERSION_24 }
35
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
36
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
37
+
38
+ include_examples 'a valid ebicsRequest download with date range',
39
+ order_type: 'C5N', from: '2014-09-01', to: '2014-09-01', ebics_version: 'H003'
8
40
  end
9
41
  end
@@ -0,0 +1,80 @@
1
+ RSpec.describe 'C52/C53/C54 parameter parity' 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(:range) { { from: Date.new(2026, 1, 1), to: Date.new(2026, 1, 31) } }
8
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
9
+
10
+ # The three camt statement retrievals differ only in service name and message type.
11
+ types = { Epics::C52 => { service: 'STM', msg: 'camt.052' },
12
+ Epics::C53 => { service: 'EOP', msg: 'camt.053' },
13
+ Epics::C54 => { service: 'REP', msg: 'camt.054' } }
14
+
15
+ def service(order, ns)
16
+ Nokogiri::XML(order.to_xml).at_xpath('//e:Service', ns)
17
+ end
18
+
19
+ types.each do |type, expected|
20
+ describe type do
21
+ context 'on H005' do
22
+ let(:version) { Epics::Keyring::VERSION_30 }
23
+
24
+ it 'defaults to its own service and a ZIP container' do
25
+ node = service(type.new(client, **range), ns)
26
+
27
+ expect(node.at_xpath('e:ServiceName', ns).text).to eq(expected[:service])
28
+ expect(node.at_xpath('e:MsgName', ns).text).to eq(expected[:msg])
29
+ expect(node.at_xpath('e:Container', ns)['containerType']).to eq('ZIP')
30
+ expect(node.at_xpath('e:Scope', ns)).to be_nil
31
+ end
32
+
33
+ it 'accepts scope' do
34
+ node = service(type.new(client, **range, scope: 'CH'), ns)
35
+
36
+ expect(node.at_xpath('e:Scope', ns).text).to eq('CH')
37
+ end
38
+
39
+ it 'accepts msg_name_version' do
40
+ node = service(type.new(client, **range, msg_name_version: '08'), ns)
41
+
42
+ expect(node.at_xpath('e:MsgName', ns)['version']).to eq('08')
43
+ end
44
+
45
+ it 'accepts container_type' do
46
+ node = service(type.new(client, **range, container_type: 'XML'), ns)
47
+
48
+ expect(node.at_xpath('e:Container', ns)['containerType']).to eq('XML')
49
+ end
50
+ end
51
+
52
+ # H003/H004 address the same data by order type, so the BTF parameters have
53
+ # nowhere to go and are ignored rather than rejected.
54
+ [Epics::Keyring::VERSION_24, Epics::Keyring::VERSION_25].each do |older|
55
+ context "on #{older}" do
56
+ let(:version) { older }
57
+
58
+ it 'ignores the H005 service parameters' do
59
+ expect { type.new(client, **range, scope: 'CH', container_type: 'XML').to_xml }
60
+ .not_to raise_error
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ describe 'Epics::Client' do
68
+ let(:version) { Epics::Keyring::VERSION_30 }
69
+
70
+ # C54 took only from/to while its two siblings took three more options.
71
+ it 'exposes the same keywords on all three' do
72
+ %i[C52 C53 C54].each do |method|
73
+ keywords = Epics::Client.instance_method(method).parameters
74
+ .select { |kind, _| kind == :key }.map(&:last)
75
+
76
+ expect(keywords).to match_array(%i[scope msg_name_version container_type])
77
+ end
78
+ end
79
+ end
80
+ end
@@ -1,21 +1,74 @@
1
1
  RSpec.describe Epics::CCS do
2
-
3
- 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') }
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', version:) }
4
3
  let(:document) { File.read( File.join( File.dirname(__FILE__), '..', 'fixtures', 'xml', 'cd1.xml') ) }
4
+
5
5
  subject { described_class.new(client, document) }
6
6
 
7
7
  describe 'order attributes' do
8
- it { expect(subject.header.to_s).to include('<OrderAttribute>DZHNN</OrderAttribute>') }
9
- it { expect(subject.header.to_s).to include('<OrderType>CCS</OrderType>') }
8
+ let(:version) { Epics::Keyring::VERSION_25 }
9
+
10
+ it { expect(subject.to_xml).to include('<OrderAttribute>DZHNN</OrderAttribute>') }
11
+ it { expect(subject.to_xml).to include('<OrderType>CCS</OrderType>') }
10
12
  end
11
13
 
12
- describe '#to_xml' do
13
- specify { expect(subject.to_xml).to be_a_valid_ebics_doc }
14
+ include_examples '#to_xml'
15
+ include_examples '#to_transfer_xml'
16
+
17
+ describe 'H005 request structure' do
18
+ let(:version) { Epics::Keyring::VERSION_30 }
19
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
20
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
21
+
22
+ include_examples 'a valid ebicsRequest H005 upload',
23
+ service_name: 'SCT', msg_name: 'pain.001', scope: 'DE'
24
+ end
25
+
26
+ describe 'H005 transfer structure' do
27
+ let(:version) { Epics::Keyring::VERSION_30 }
28
+ let(:xml) do
29
+ subject.transaction_id = SecureRandom.hex(16)
30
+ Nokogiri::XML(subject.to_transfer_xml)
31
+ end
32
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
33
+
34
+ include_examples 'a valid ebicsRequest H005 transfer'
35
+ end
36
+
37
+ describe 'H004 request structure' do
38
+ let(:version) { Epics::Keyring::VERSION_25 }
39
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
40
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
41
+
42
+ include_examples 'a valid ebicsRequest upload', order_type: 'CCS', order_attribute: 'DZHNN'
43
+ end
44
+
45
+ describe 'H004 transfer structure' do
46
+ let(:version) { Epics::Keyring::VERSION_25 }
47
+ let(:xml) do
48
+ subject.transaction_id = SecureRandom.hex(16)
49
+ Nokogiri::XML(subject.to_transfer_xml)
50
+ end
51
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
52
+
53
+ include_examples 'a valid ebicsRequest transfer'
54
+ end
55
+
56
+ describe 'H003 request structure' do
57
+ let(:version) { Epics::Keyring::VERSION_24 }
58
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
59
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
60
+
61
+ include_examples 'a valid ebicsRequest upload', order_type: 'CCS', order_attribute: 'DZHNN', ebics_version: 'H003'
14
62
  end
15
63
 
16
- describe '#to_transfer_xml' do
17
- before { subject.transaction_id = SecureRandom.hex(16) }
64
+ describe 'H003 transfer structure' do
65
+ let(:version) { Epics::Keyring::VERSION_24 }
66
+ let(:xml) do
67
+ subject.transaction_id = SecureRandom.hex(16)
68
+ Nokogiri::XML(subject.to_transfer_xml)
69
+ end
70
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
18
71
 
19
- specify { expect(subject.to_transfer_xml).to be_a_valid_ebics_doc }
72
+ include_examples 'a valid ebicsRequest transfer', ebics_version: 'H003'
20
73
  end
21
74
  end
@@ -1,21 +1,95 @@
1
1
  RSpec.describe Epics::CCT do
2
-
3
- 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') }
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', version:) }
4
3
  let(:document) { File.read( File.join( File.dirname(__FILE__), '..', 'fixtures', 'xml', 'cd1.xml') ) }
4
+
5
5
  subject { described_class.new(client, document) }
6
6
 
7
7
  describe 'order attributes' do
8
- it { expect(subject.header.to_s).to include('<OrderAttribute>OZHNN</OrderAttribute>') }
9
- it { expect(subject.header.to_s).to include('<OrderType>CCT</OrderType>') }
8
+ let(:version) { Epics::Keyring::VERSION_25 }
9
+
10
+ it { expect(subject.to_xml).to include('<OrderAttribute>OZHNN</OrderAttribute>') }
11
+ it { expect(subject.to_xml).to include('<OrderType>CCT</OrderType>') }
12
+ end
13
+
14
+ include_examples '#to_xml'
15
+ include_examples '#to_transfer_xml'
16
+
17
+ describe 'H005 request structure' do
18
+ let(:version) { Epics::Keyring::VERSION_30 }
19
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
20
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
21
+
22
+ include_examples 'a valid ebicsRequest H005 upload',
23
+ service_name: 'SCT', msg_name: 'pain.001', scope: 'DE'
24
+ end
25
+
26
+ describe 'H005 transfer structure' do
27
+ let(:version) { Epics::Keyring::VERSION_30 }
28
+ let(:xml) do
29
+ subject.transaction_id = SecureRandom.hex(16)
30
+ Nokogiri::XML(subject.to_transfer_xml)
31
+ end
32
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
33
+
34
+ include_examples 'a valid ebicsRequest H005 transfer'
10
35
  end
11
36
 
12
- describe '#to_xml' do
13
- specify { expect(subject.to_xml).to be_a_valid_ebics_doc }
37
+ describe 'H004 request structure' do
38
+ let(:version) { Epics::Keyring::VERSION_25 }
39
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
40
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
41
+
42
+ include_examples 'a valid ebicsRequest upload', order_type: 'CCT', order_attribute: 'OZHNN'
14
43
  end
15
44
 
16
- describe '#to_transfer_xml' do
17
- before { subject.transaction_id = SecureRandom.hex(16) }
45
+ describe 'H004 transfer structure' do
46
+ let(:version) { Epics::Keyring::VERSION_25 }
47
+ let(:xml) do
48
+ subject.transaction_id = SecureRandom.hex(16)
49
+ Nokogiri::XML(subject.to_transfer_xml)
50
+ end
51
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
52
+
53
+ include_examples 'a valid ebicsRequest transfer'
54
+ end
55
+
56
+ describe 'H003 request structure' do
57
+ let(:version) { Epics::Keyring::VERSION_24 }
58
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
59
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
60
+
61
+ include_examples 'a valid ebicsRequest upload', order_type: 'CCT', order_attribute: 'OZHNN', ebics_version: 'H003'
62
+ end
63
+
64
+ describe 'H003 transfer structure' do
65
+ let(:version) { Epics::Keyring::VERSION_24 }
66
+ let(:xml) do
67
+ subject.transaction_id = SecureRandom.hex(16)
68
+ Nokogiri::XML(subject.to_transfer_xml)
69
+ end
70
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
71
+
72
+ include_examples 'a valid ebicsRequest transfer', ebics_version: 'H003'
73
+ end
74
+
75
+ describe 'H005 request with service_option override' do
76
+ let(:version) { Epics::Keyring::VERSION_30 }
77
+
78
+ subject { described_class.new(client, document, service_option: 'VOO') }
79
+
80
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
81
+ let(:ns) { { 'e' => 'urn:org:ebics:H005' } }
82
+
83
+ it 'includes ServiceOption in BTU params' do
84
+ xml.remove_namespaces!
85
+ expect(xml.at('//BTUOrderParams/Service/ServiceOption').text).to eq('VOO')
86
+ end
18
87
 
19
- specify { expect(subject.to_transfer_xml).to be_a_valid_ebics_doc }
88
+ it 'preserves default service params' do
89
+ xml.remove_namespaces!
90
+ expect(xml.at('//BTUOrderParams/Service/ServiceName').text).to eq('SCT')
91
+ expect(xml.at('//BTUOrderParams/Service/Scope').text).to eq('DE')
92
+ expect(xml.at('//BTUOrderParams/Service/MsgName').text).to eq('pain.001')
93
+ end
20
94
  end
21
95
  end
@@ -1,17 +1,60 @@
1
1
  RSpec.describe Epics::CD1 do
2
-
3
- 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') }
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', version:) }
4
3
  let(:document) { File.read( File.join( File.dirname(__FILE__), '..', 'fixtures', 'xml', 'cd1.xml') ) }
4
+
5
5
  subject { described_class.new(client, document) }
6
6
 
7
- describe '#to_xml' do
8
- specify { expect(subject.to_xml).to be_a_valid_ebics_doc }
7
+ describe 'order attributes' do
8
+ let(:version) { Epics::Keyring::VERSION_25 }
9
+
10
+ it { expect(subject.to_xml).to include('<OrderAttribute>OZHNN</OrderAttribute>') }
11
+ it { expect(subject.to_xml).to include('<OrderType>CD1</OrderType>') }
12
+ end
13
+
14
+ include_examples '#to_xml', versions: [Epics::Keyring::VERSION_24, Epics::Keyring::VERSION_25]
15
+ include_examples '#to_transfer_xml', versions: [Epics::Keyring::VERSION_24, Epics::Keyring::VERSION_25]
16
+
17
+ describe '#to_xml H005' do
18
+ let(:version) { Epics::Keyring::VERSION_30 }
19
+ it('raises VersionSupportError') { expect { subject.to_xml }.to raise_error(Epics::VersionSupportError) }
9
20
  end
10
21
 
11
- describe '#to_transfer_xml' do
12
- before { subject.transaction_id = SecureRandom.hex(16) }
13
22
 
14
- specify { expect(subject.to_transfer_xml).to be_a_valid_ebics_doc }
23
+ describe 'H004 request structure' do
24
+ let(:version) { Epics::Keyring::VERSION_25 }
25
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
26
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
27
+
28
+ include_examples 'a valid ebicsRequest upload', order_type: 'CD1', order_attribute: 'OZHNN'
15
29
  end
16
30
 
31
+ describe 'H004 transfer structure' do
32
+ let(:version) { Epics::Keyring::VERSION_25 }
33
+ let(:xml) do
34
+ subject.transaction_id = SecureRandom.hex(16)
35
+ Nokogiri::XML(subject.to_transfer_xml)
36
+ end
37
+ let(:ns) { { 'e' => 'urn:org:ebics:H004' } }
38
+
39
+ include_examples 'a valid ebicsRequest transfer'
40
+ end
41
+
42
+ describe 'H003 request structure' do
43
+ let(:version) { Epics::Keyring::VERSION_24 }
44
+ let(:xml) { Nokogiri::XML(subject.to_xml) }
45
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
46
+
47
+ include_examples 'a valid ebicsRequest upload', order_type: 'CD1', order_attribute: 'OZHNN', ebics_version: 'H003'
48
+ end
49
+
50
+ describe 'H003 transfer structure' do
51
+ let(:version) { Epics::Keyring::VERSION_24 }
52
+ let(:xml) do
53
+ subject.transaction_id = SecureRandom.hex(16)
54
+ Nokogiri::XML(subject.to_transfer_xml)
55
+ end
56
+ let(:ns) { { 'e' => 'http://www.ebics.org/H003' } }
57
+
58
+ include_examples 'a valid ebicsRequest transfer', ebics_version: 'H003'
59
+ end
17
60
  end