sepa_king 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +38 -0
- data/{MIT-LICENSE → LICENSE.txt} +2 -2
- data/README.md +174 -0
- data/Rakefile +1 -1
- data/lib/sepa_king.rb +1 -0
- data/lib/sepa_king/account.rb +8 -7
- data/lib/sepa_king/account/creditor_account.rb +2 -2
- data/lib/sepa_king/message.rb +14 -4
- data/lib/sepa_king/message/credit_transfer.rb +67 -60
- data/lib/sepa_king/message/direct_debit.rb +83 -73
- data/lib/sepa_king/transaction.rb +24 -11
- data/lib/sepa_king/transaction/direct_debit_transaction.rb +10 -2
- data/lib/sepa_king/validator.rb +36 -0
- data/lib/sepa_king/version.rb +1 -1
- data/sepa_king.gemspec +6 -4
- data/spec/account_spec.rb +8 -32
- data/spec/credit_transfer_spec.rb +170 -37
- data/spec/credit_transfer_transaction_spec.rb +6 -6
- data/spec/creditor_account_spec.rb +7 -15
- data/spec/debtor_account_spec.rb +3 -3
- data/spec/direct_debit_spec.rb +258 -43
- data/spec/direct_debit_transaction_spec.rb +14 -30
- data/spec/message_spec.rb +10 -3
- data/spec/spec_helper.rb +8 -3
- data/spec/support/custom_matcher.rb +46 -3
- data/spec/support/factories.rb +23 -0
- data/spec/support/validations.rb +1 -1
- data/spec/transaction_spec.rb +36 -60
- data/spec/validation_spec.rb +10 -2
- metadata +15 -11
- data/README.markdown +0 -91
@@ -4,12 +4,12 @@ require 'spec_helper'
|
|
4
4
|
describe SEPA::CreditTransferTransaction do
|
5
5
|
it 'should initialize a new transaction' do
|
6
6
|
expect(
|
7
|
-
SEPA::CreditTransferTransaction.new :
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
7
|
+
SEPA::CreditTransferTransaction.new name: 'Telekomiker AG',
|
8
|
+
iban: 'DE37112589611964645802',
|
9
|
+
bic: 'PBNKDEFF370',
|
10
|
+
amount: 102.50,
|
11
|
+
reference: 'XYZ-1234/123',
|
12
|
+
remittance_information: 'Rechnung 123 vom 22.08.2013'
|
13
13
|
).to be_valid
|
14
14
|
end
|
15
15
|
end
|
@@ -4,28 +4,20 @@ require 'spec_helper'
|
|
4
4
|
describe SEPA::CreditorAccount do
|
5
5
|
it 'should initialize a new account' do
|
6
6
|
expect(
|
7
|
-
SEPA::CreditorAccount.new :
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
7
|
+
SEPA::CreditorAccount.new name: 'Gläubiger GmbH',
|
8
|
+
bic: 'BANKDEFFXXX',
|
9
|
+
iban: 'DE87200500001234567890',
|
10
|
+
creditor_identifier: 'DE98ZZZ09999999999'
|
11
11
|
).to be_valid
|
12
12
|
end
|
13
13
|
|
14
|
-
describe :
|
14
|
+
describe :creditor_identifier do
|
15
15
|
it 'should accept valid value' do
|
16
|
-
|
17
|
-
expect(
|
18
|
-
SEPA::CreditorAccount.new :identifier => value_value
|
19
|
-
).to have(:no).errors_on(:identifier)
|
20
|
-
end
|
16
|
+
SEPA::CreditorAccount.should accept('DE98ZZZ09999999999', 'AT12ZZZ00000000001', 'IT97ZZZA1B2C3D4E5F6G7H8', 'NL97ZZZ123456780001', 'FR12ZZZ123456', for: :creditor_identifier)
|
21
17
|
end
|
22
18
|
|
23
19
|
it 'should not accept invalid value' do
|
24
|
-
|
25
|
-
expect(
|
26
|
-
SEPA::CreditorAccount.new :identifier => invalue_value
|
27
|
-
).to have_at_least(1).errors_on(:identifier)
|
28
|
-
end
|
20
|
+
SEPA::CreditorAccount.should_not accept('', 'invalid', 'DE98ZZZ099999999990', 'DEAAAAAAAAAAAAAAAA', for: :creditor_identifier)
|
29
21
|
end
|
30
22
|
end
|
31
23
|
end
|
data/spec/debtor_account_spec.rb
CHANGED
@@ -4,9 +4,9 @@ require 'spec_helper'
|
|
4
4
|
describe SEPA::DebtorAccount do
|
5
5
|
it 'should initialize a new account' do
|
6
6
|
expect(
|
7
|
-
SEPA::DebtorAccount.new :
|
8
|
-
:
|
9
|
-
:
|
7
|
+
SEPA::DebtorAccount.new name: 'Gläubiger GmbH',
|
8
|
+
bic: 'BANKDEFFXXX',
|
9
|
+
iban: 'DE87200500001234567890'
|
10
10
|
).to be_valid
|
11
11
|
end
|
12
12
|
end
|
data/spec/direct_debit_spec.rb
CHANGED
@@ -3,10 +3,10 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
describe SEPA::DirectDebit do
|
5
5
|
let(:direct_debit) {
|
6
|
-
SEPA::DirectDebit.new :
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
6
|
+
SEPA::DirectDebit.new name: 'Gläubiger GmbH',
|
7
|
+
bic: 'BANKDEFFXXX',
|
8
|
+
iban: 'DE87200500001234567890',
|
9
|
+
creditor_identifier: 'DE98ZZZ09999999999'
|
10
10
|
}
|
11
11
|
|
12
12
|
describe :new do
|
@@ -19,58 +19,273 @@ describe SEPA::DirectDebit do
|
|
19
19
|
|
20
20
|
describe :add_transaction do
|
21
21
|
it 'should add valid transactions' do
|
22
|
-
3.times
|
23
|
-
direct_debit.add_transaction
|
24
|
-
|
25
|
-
:iban => 'DE21500500009876543210',
|
26
|
-
:amount => 39.99,
|
27
|
-
:reference => 'XYZ/2013-08-ABO/12345',
|
28
|
-
:remittance_information => 'Unsere Rechnung vom 10.08.2013',
|
29
|
-
:mandate_id => 'K-02-2011-12345',
|
30
|
-
:mandate_date_of_signature => Date.new(2011,1,25)
|
31
|
-
}
|
22
|
+
3.times do
|
23
|
+
direct_debit.add_transaction(direct_debt_transaction)
|
24
|
+
end
|
32
25
|
|
33
26
|
expect(direct_debit).to have(3).transactions
|
34
27
|
end
|
35
28
|
|
36
29
|
it 'should fail for invalid transaction' do
|
37
30
|
expect {
|
38
|
-
direct_debit.add_transaction :
|
31
|
+
direct_debit.add_transaction name: ''
|
39
32
|
}.to raise_error(ArgumentError)
|
40
33
|
end
|
41
34
|
end
|
42
35
|
|
43
36
|
describe :to_xml do
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
37
|
+
context 'for invalid creditor' do
|
38
|
+
it 'should fail' do
|
39
|
+
expect {
|
40
|
+
SEPA::DirectDebit.new.to_xml
|
41
|
+
}.to raise_error(RuntimeError)
|
42
|
+
end
|
48
43
|
end
|
49
44
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
45
|
+
context 'for valid creditor' do
|
46
|
+
context 'without requested_date given' do
|
47
|
+
subject do
|
48
|
+
sdd = direct_debit
|
49
|
+
|
50
|
+
sdd.add_transaction name: 'Zahlemann & Söhne GbR',
|
51
|
+
bic: 'SPUEDE2UXXX',
|
52
|
+
iban: 'DE21500500009876543210',
|
53
|
+
amount: 39.99,
|
54
|
+
reference: 'XYZ/2013-08-ABO/12345',
|
55
|
+
remittance_information: 'Unsere Rechnung vom 10.08.2013',
|
56
|
+
mandate_id: 'K-02-2011-12345',
|
57
|
+
mandate_date_of_signature: Date.new(2011,1,25)
|
58
|
+
|
59
|
+
sdd.add_transaction name: 'Meier & Schulze oHG',
|
60
|
+
bic: 'GENODEF1JEV',
|
61
|
+
iban: 'DE68210501700012345678',
|
62
|
+
amount: 750.00,
|
63
|
+
reference: 'XYZ/2013-08-ABO/6789',
|
64
|
+
remittance_information: 'Vielen Dank für Ihren Einkauf!',
|
65
|
+
mandate_id: 'K-08-2010-42123',
|
66
|
+
mandate_date_of_signature: Date.new(2010,7,25)
|
67
|
+
|
68
|
+
sdd.to_xml
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should create valid XML file' do
|
72
|
+
expect(subject).to validate_against('pain.008.002.02.xsd')
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'should contain <ReqdColltnDt>' do
|
76
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/ReqdColltnDt', Date.today.next.iso8601)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should contain <PmtMtd>' do
|
80
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/PmtMtd', 'DD')
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should contain <BtchBookg>' do
|
84
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/BtchBookg', 'true')
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should contain <NbOfTxs>' do
|
88
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/NbOfTxs', '2')
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'should contain <CtrlSum>' do
|
92
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/CtrlSum', '789.99')
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'should contain <Cdtr>' do
|
96
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/Cdtr/Nm', 'Glaeubiger GmbH')
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should contain <CdtrAcct>' do
|
100
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/CdtrAcct/Id/IBAN', 'DE87200500001234567890')
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should contain <CdtrAgt>' do
|
104
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/CdtrAgt/FinInstnId/BIC', 'BANKDEFFXXX')
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should contain <CdtrAgt>' do
|
108
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/CdtrSchmeId/Id/PrvtId/Othr/Id', 'DE98ZZZ09999999999')
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should contain <EndToEndId>' do
|
112
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[1]/PmtId/EndToEndId', 'XYZ/2013-08-ABO/12345')
|
113
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[2]/PmtId/EndToEndId', 'XYZ/2013-08-ABO/6789')
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should contain <InstdAmt>' do
|
117
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[1]/InstdAmt', '39.99')
|
118
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[2]/InstdAmt', '750.00')
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'should contain <MndtId>' do
|
122
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[1]/DrctDbtTx/MndtRltdInf/MndtId', 'K-02-2011-12345')
|
123
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[2]/DrctDbtTx/MndtRltdInf/MndtId', 'K-08-2010-42123')
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'should contain <DtOfSgntr>' do
|
127
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[1]/DrctDbtTx/MndtRltdInf/DtOfSgntr', '2011-01-25')
|
128
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[2]/DrctDbtTx/MndtRltdInf/DtOfSgntr', '2010-07-25')
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'should contain <DbtrAgt>' do
|
132
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[1]/DbtrAgt/FinInstnId/BIC', 'SPUEDE2UXXX')
|
133
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[2]/DbtrAgt/FinInstnId/BIC', 'GENODEF1JEV')
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'should contain <Dbtr>' do
|
137
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[1]/Dbtr/Nm', 'Zahlemann Soehne GbR')
|
138
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[2]/Dbtr/Nm', 'Meier Schulze oHG')
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'should contain <DbtrAcct>' do
|
142
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[1]/DbtrAcct/Id/IBAN', 'DE21500500009876543210')
|
143
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[2]/DbtrAcct/Id/IBAN', 'DE68210501700012345678')
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'should contain <RmtInf>' do
|
147
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[1]/RmtInf/Ustrd', 'Unsere Rechnung vom 10.08.2013')
|
148
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[2]/RmtInf/Ustrd', 'Vielen Dank fuer Ihren Einkauf')
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
context 'with different requested_date given' do
|
153
|
+
subject do
|
154
|
+
sdd = direct_debit
|
155
|
+
|
156
|
+
sdd.add_transaction(direct_debt_transaction.merge requested_date: Date.today + 1)
|
157
|
+
sdd.add_transaction(direct_debt_transaction.merge requested_date: Date.today + 2)
|
158
|
+
sdd.add_transaction(direct_debt_transaction.merge requested_date: Date.today + 2)
|
159
|
+
|
160
|
+
sdd.to_xml
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'should contain two payment_informations with <ReqdColltnDt>' do
|
164
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[1]/ReqdColltnDt', (Date.today + 1).iso8601)
|
165
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[2]/ReqdColltnDt', (Date.today + 2).iso8601)
|
166
|
+
|
167
|
+
subject.should_not have_xml('//Document/CstmrDrctDbtInitn/PmtInf[3]')
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
context 'with different local_instrument given' do
|
172
|
+
subject do
|
173
|
+
sdd = direct_debit
|
174
|
+
|
175
|
+
sdd.add_transaction(direct_debt_transaction.merge local_instrument: 'CORE')
|
176
|
+
sdd.add_transaction(direct_debt_transaction.merge local_instrument: 'B2B')
|
177
|
+
sdd.add_transaction(direct_debt_transaction.merge local_instrument: 'B2B')
|
178
|
+
|
179
|
+
sdd.to_xml
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'should contain two payment_informations with <LclInstrm>' do
|
183
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[1]/PmtTpInf/LclInstrm/Cd', 'CORE')
|
184
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[2]/PmtTpInf/LclInstrm/Cd', 'B2B')
|
185
|
+
|
186
|
+
subject.should_not have_xml('//Document/CstmrDrctDbtInitn/PmtInf[3]')
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
context 'with different sequence_type given' do
|
191
|
+
subject do
|
192
|
+
sdd = direct_debit
|
193
|
+
|
194
|
+
sdd.add_transaction(direct_debt_transaction.merge sequence_type: 'OOFF')
|
195
|
+
sdd.add_transaction(direct_debt_transaction.merge sequence_type: 'FRST')
|
196
|
+
sdd.add_transaction(direct_debt_transaction.merge sequence_type: 'FRST')
|
197
|
+
|
198
|
+
sdd.to_xml
|
199
|
+
end
|
200
|
+
|
201
|
+
it 'should contain two payment_informations with <LclInstrm>' do
|
202
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[1]/PmtTpInf/SeqTp', 'OOFF')
|
203
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[2]/PmtTpInf/SeqTp', 'FRST')
|
204
|
+
|
205
|
+
subject.should_not have_xml('//Document/CstmrDrctDbtInitn/PmtInf[3]')
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
context 'with different batch_booking given' do
|
210
|
+
subject do
|
211
|
+
sdd = direct_debit
|
212
|
+
|
213
|
+
sdd.add_transaction(direct_debt_transaction.merge batch_booking: false)
|
214
|
+
sdd.add_transaction(direct_debt_transaction.merge batch_booking: true)
|
215
|
+
sdd.add_transaction(direct_debt_transaction.merge batch_booking: true)
|
216
|
+
|
217
|
+
sdd.to_xml
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'should contain two payment_informations with <BtchBookg>' do
|
221
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[1]/BtchBookg', 'false')
|
222
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[2]/BtchBookg', 'true')
|
223
|
+
|
224
|
+
subject.should_not have_xml('//Document/CstmrDrctDbtInitn/PmtInf[3]')
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
context 'with transactions containing different group criteria' do
|
229
|
+
subject do
|
230
|
+
sdd = direct_debit
|
231
|
+
|
232
|
+
sdd.add_transaction(direct_debt_transaction.merge requested_date: Date.today + 1, local_instrument: 'CORE', sequence_type: 'OOFF', amount: 1)
|
233
|
+
sdd.add_transaction(direct_debt_transaction.merge requested_date: Date.today + 1, local_instrument: 'CORE', sequence_type: 'FNAL', amount: 2)
|
234
|
+
sdd.add_transaction(direct_debt_transaction.merge requested_date: Date.today + 1, local_instrument: 'B2B', sequence_type: 'OOFF', amount: 4)
|
235
|
+
sdd.add_transaction(direct_debt_transaction.merge requested_date: Date.today + 1, local_instrument: 'B2B', sequence_type: 'FNAL', amount: 8)
|
236
|
+
sdd.add_transaction(direct_debt_transaction.merge requested_date: Date.today + 2, local_instrument: 'CORE', sequence_type: 'OOFF', amount: 16)
|
237
|
+
sdd.add_transaction(direct_debt_transaction.merge requested_date: Date.today + 2, local_instrument: 'CORE', sequence_type: 'FNAL', amount: 32)
|
238
|
+
sdd.add_transaction(direct_debt_transaction.merge requested_date: Date.today + 2, local_instrument: 'B2B', sequence_type: 'OOFF', amount: 64)
|
239
|
+
sdd.add_transaction(direct_debt_transaction.merge requested_date: Date.today + 2, local_instrument: 'B2B', sequence_type: 'FNAL', amount: 128)
|
240
|
+
|
241
|
+
sdd.to_xml
|
242
|
+
end
|
243
|
+
|
244
|
+
it 'should contain multiple payment_informations' do
|
245
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[1]/ReqdColltnDt', (Date.today + 1).iso8601)
|
246
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[1]/PmtTpInf/LclInstrm/Cd', 'CORE')
|
247
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[1]/PmtTpInf/SeqTp', 'OOFF')
|
248
|
+
|
249
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[2]/ReqdColltnDt', (Date.today + 1).iso8601)
|
250
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[2]/PmtTpInf/LclInstrm/Cd', 'CORE')
|
251
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[2]/PmtTpInf/SeqTp', 'FNAL')
|
252
|
+
|
253
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[3]/ReqdColltnDt', (Date.today + 1).iso8601)
|
254
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[3]/PmtTpInf/LclInstrm/Cd', 'B2B')
|
255
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[3]/PmtTpInf/SeqTp', 'OOFF')
|
256
|
+
|
257
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[4]/ReqdColltnDt', (Date.today + 1).iso8601)
|
258
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[4]/PmtTpInf/LclInstrm/Cd', 'B2B')
|
259
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[4]/PmtTpInf/SeqTp', 'FNAL')
|
260
|
+
|
261
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[5]/ReqdColltnDt', (Date.today + 2).iso8601)
|
262
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[5]/PmtTpInf/LclInstrm/Cd', 'CORE')
|
263
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[5]/PmtTpInf/SeqTp', 'OOFF')
|
264
|
+
|
265
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[6]/ReqdColltnDt', (Date.today + 2).iso8601)
|
266
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[6]/PmtTpInf/LclInstrm/Cd', 'CORE')
|
267
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[6]/PmtTpInf/SeqTp', 'FNAL')
|
268
|
+
|
269
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[7]/ReqdColltnDt', (Date.today + 2).iso8601)
|
270
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[7]/PmtTpInf/LclInstrm/Cd', 'B2B')
|
271
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[7]/PmtTpInf/SeqTp', 'OOFF')
|
272
|
+
|
273
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[8]/ReqdColltnDt', (Date.today + 2).iso8601)
|
274
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[8]/PmtTpInf/LclInstrm/Cd', 'B2B')
|
275
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[8]/PmtTpInf/SeqTp', 'FNAL')
|
276
|
+
end
|
277
|
+
|
278
|
+
it 'should have multiple control sums' do
|
279
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[1]/CtrlSum', '1.00')
|
280
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[2]/CtrlSum', '2.00')
|
281
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[3]/CtrlSum', '4.00')
|
282
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[4]/CtrlSum', '8.00')
|
283
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[5]/CtrlSum', '16.00')
|
284
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[6]/CtrlSum', '32.00')
|
285
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[7]/CtrlSum', '64.00')
|
286
|
+
subject.should have_xml('//Document/CstmrDrctDbtInitn/PmtInf[8]/CtrlSum', '128.00')
|
287
|
+
end
|
288
|
+
end
|
74
289
|
end
|
75
290
|
end
|
76
291
|
end
|
@@ -4,50 +4,34 @@ require 'spec_helper'
|
|
4
4
|
describe SEPA::DirectDebitTransaction do
|
5
5
|
it 'should initialize a new transaction' do
|
6
6
|
expect(
|
7
|
-
SEPA::DirectDebitTransaction.new :
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
7
|
+
SEPA::DirectDebitTransaction.new name: 'Zahlemann & Söhne Gbr',
|
8
|
+
bic: 'SPUEDE2UXXX',
|
9
|
+
iban: 'DE21500500009876543210',
|
10
|
+
amount: 39.99,
|
11
|
+
reference: 'XYZ-1234/123',
|
12
|
+
remittance_information: 'Vielen Dank für Ihren Einkauf!',
|
13
|
+
mandate_id: 'K-02-2011-12345',
|
14
|
+
mandate_date_of_signature: Date.new(2011,1,25)
|
15
15
|
).to be_valid
|
16
16
|
end
|
17
17
|
|
18
18
|
context 'Mandate Date of Signature' do
|
19
|
-
it 'should
|
20
|
-
|
21
|
-
expect(
|
22
|
-
SEPA::DirectDebitTransaction.new :mandate_date_of_signature => valid_value
|
23
|
-
).to have(:no).errors_on(:mandate_date_of_signature)
|
24
|
-
end
|
19
|
+
it 'should accept valid value' do
|
20
|
+
SEPA::DirectDebitTransaction.should accept(Date.today, Date.today - 1, for: :mandate_date_of_signature)
|
25
21
|
end
|
26
22
|
|
27
|
-
it 'should not
|
28
|
-
|
29
|
-
expect(
|
30
|
-
SEPA::DirectDebitTransaction.new :mandate_date_of_signature => invalid_value
|
31
|
-
).to have_at_least(1).errors_on(:mandate_date_of_signature)
|
32
|
-
end
|
23
|
+
it 'should not accept invalid value' do
|
24
|
+
SEPA::DirectDebitTransaction.should_not accept(nil, '2010-12-01', Date.today + 1, for: :mandate_date_of_signature)
|
33
25
|
end
|
34
26
|
end
|
35
27
|
|
36
28
|
context 'Mandate ID' do
|
37
29
|
it 'should allow valid value' do
|
38
|
-
|
39
|
-
expect(
|
40
|
-
SEPA::DirectDebitTransaction.new :mandate_id => valid_value
|
41
|
-
).to have(:no).errors_on(:mandate_id)
|
42
|
-
end
|
30
|
+
SEPA::DirectDebitTransaction.should accept('XYZ-123', 'X' * 35, for: :mandate_id)
|
43
31
|
end
|
44
32
|
|
45
33
|
it 'should not allow invalid value' do
|
46
|
-
|
47
|
-
expect(
|
48
|
-
SEPA::DirectDebitTransaction.new :mandate_id => invalid_value
|
49
|
-
).to have_at_least(1).errors_on(:mandate_id)
|
50
|
-
end
|
34
|
+
SEPA::DirectDebitTransaction.should_not accept(nil, '', 'X' * 36, for: :mandate_id)
|
51
35
|
end
|
52
36
|
end
|
53
37
|
end
|