payment_dta 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README.rdoc +45 -0
- data/VERSION +1 -0
- data/generators/payment/USAGE +5 -0
- data/generators/payment/payment_generator.rb +76 -0
- data/generators/payment/templates/model.rb.erb +39 -0
- data/generators/payment/templates/spec.rb.erb +48 -0
- data/lib/payment_dta.rb +4 -0
- data/lib/payment_dta/character_conversion.rb +251 -0
- data/lib/payment_dta/dta_file.rb +55 -0
- data/lib/payment_dta/payment_sorting.rb +19 -0
- data/lib/payment_dta/payments/bank_cheque_payment.rb +60 -0
- data/lib/payment_dta/payments/base.rb +288 -0
- data/lib/payment_dta/payments/domestic_chf_payment.rb +67 -0
- data/lib/payment_dta/payments/esr_payment.rb +48 -0
- data/lib/payment_dta/payments/financial_institution_payment.rb +56 -0
- data/lib/payment_dta/payments/iban_payment.rb +76 -0
- data/lib/payment_dta/payments/special_financial_institution_payment.rb +64 -0
- data/lib/payment_dta/payments/total_record.rb +31 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/factory.rb +82 -0
- data/spec/lib/bank_cheque_payment_spec.rb +178 -0
- data/spec/lib/character_conversion_spec.rb +280 -0
- data/spec/lib/domestic_chf_payment_spec.rb +189 -0
- data/spec/lib/dta_file_spec.rb +81 -0
- data/spec/lib/esr_payment_spec.rb +157 -0
- data/spec/lib/financial_institution_payment_spec.rb +229 -0
- data/spec/lib/iban_payment_spec.rb +201 -0
- data/spec/lib/payment_header_spec.rb +221 -0
- data/spec/lib/payment_spec.rb +15 -0
- data/spec/lib/special_financial_institution_payment_spec.rb +238 -0
- data/spec/lib/total_record_spec.rb +20 -0
- data/spec/spec_helper.rb +9 -0
- metadata +107 -0
@@ -0,0 +1,280 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
require 'character_conversion'
|
3
|
+
|
4
|
+
CONVERSION_MAP_UTF8 = {
|
5
|
+
32 => {:name => "SPACE", :convert_to => " "},
|
6
|
+
33 => {:name => "EXCLAMATION MARK", :convert_to => "."},
|
7
|
+
34 => {:name => "QUOTATION MARK", :convert_to => "."},
|
8
|
+
35 => {:name => "NUMBER SIGN", :convert_to => "."},
|
9
|
+
36 => {:name => "DOLLAR SIGN", :convert_to => "."},
|
10
|
+
37 => {:name => "PERCENT SIGN", :convert_to => "."},
|
11
|
+
38 => {:name => "AMPERSAND", :convert_to => "+"},
|
12
|
+
39 => {:name => "APOSTROPHE", :convert_to => "'"},
|
13
|
+
40 => {:name => "LEFT PARENTHESIS", :convert_to => "("},
|
14
|
+
41 => {:name => "RIGHT PARENTHESIS", :convert_to => ")"},
|
15
|
+
42 => {:name => "ASTERISK", :convert_to => "."},
|
16
|
+
43 => {:name => "PLUS SIGN", :convert_to => "+"},
|
17
|
+
44 => {:name => "COMMA", :convert_to => ","},
|
18
|
+
45 => {:name => "HYPHEN-MINUS", :convert_to => "-"},
|
19
|
+
46 => {:name => "FULL STOP", :convert_to => "."},
|
20
|
+
47 => {:name => "SOLIDUS", :convert_to => "/"},
|
21
|
+
48 => {:name => "DIGIT ZERO", :convert_to => "0"},
|
22
|
+
49 => {:name => "DIGIT ONE", :convert_to => "1"},
|
23
|
+
50 => {:name => "DIGIT TWO", :convert_to => "2"},
|
24
|
+
51 => {:name => "DIGIT THREE", :convert_to => "3"},
|
25
|
+
52 => {:name => "DIGIT FOUR", :convert_to => "4"},
|
26
|
+
53 => {:name => "DIGIT FIVE", :convert_to => "5"},
|
27
|
+
54 => {:name => "DIGIT SIX", :convert_to => "6"},
|
28
|
+
55 => {:name => "DIGIT SEVEN", :convert_to => "7"},
|
29
|
+
56 => {:name => "DIGIT EIGHT", :convert_to => "8"},
|
30
|
+
57 => {:name => "DIGIT NINE", :convert_to => "9"},
|
31
|
+
58 => {:name => "COLON", :convert_to => ":"},
|
32
|
+
59 => {:name => "SEMICOLON", :convert_to => "."},
|
33
|
+
60 => {:name => "LESS-THAN SIGN", :convert_to => "."},
|
34
|
+
61 => {:name => "EQUALS SIGN", :convert_to => "."},
|
35
|
+
62 => {:name => "GREATER-THAN SIGN", :convert_to => "."},
|
36
|
+
63 => {:name => "QUESTION MARK", :convert_to => "?"},
|
37
|
+
64 => {:name => "COMMERCIAL AT", :convert_to => "."},
|
38
|
+
65 => {:name => "LATIN CAPITAL LETTER A", :convert_to => "A"},
|
39
|
+
66 => {:name => "LATIN CAPITAL LETTER B", :convert_to => "B"},
|
40
|
+
67 => {:name => "LATIN CAPITAL LETTER C", :convert_to => "C"},
|
41
|
+
68 => {:name => "LATIN CAPITAL LETTER D", :convert_to => "D"},
|
42
|
+
69 => {:name => "LATIN CAPITAL LETTER E", :convert_to => "E"},
|
43
|
+
70 => {:name => "LATIN CAPITAL LETTER F", :convert_to => "F"},
|
44
|
+
71 => {:name => "LATIN CAPITAL LETTER G", :convert_to => "G"},
|
45
|
+
72 => {:name => "LATIN CAPITAL LETTER H", :convert_to => "H"},
|
46
|
+
73 => {:name => "LATIN CAPITAL LETTER I", :convert_to => "I"},
|
47
|
+
74 => {:name => "LATIN CAPITAL LETTER J", :convert_to => "J"},
|
48
|
+
75 => {:name => "LATIN CAPITAL LETTER K", :convert_to => "K"},
|
49
|
+
76 => {:name => "LATIN CAPITAL LETTER L", :convert_to => "L"},
|
50
|
+
77 => {:name => "LATIN CAPITAL LETTER M", :convert_to => "M"},
|
51
|
+
78 => {:name => "LATIN CAPITAL LETTER N", :convert_to => "N"},
|
52
|
+
79 => {:name => "LATIN CAPITAL LETTER O", :convert_to => "O"},
|
53
|
+
80 => {:name => "LATIN CAPITAL LETTER P", :convert_to => "P"},
|
54
|
+
81 => {:name => "LATIN CAPITAL LETTER Q", :convert_to => "Q"},
|
55
|
+
82 => {:name => "LATIN CAPITAL LETTER R", :convert_to => "R"},
|
56
|
+
83 => {:name => "LATIN CAPITAL LETTER S", :convert_to => "S"},
|
57
|
+
84 => {:name => "LATIN CAPITAL LETTER T", :convert_to => "T"},
|
58
|
+
85 => {:name => "LATIN CAPITAL LETTER U", :convert_to => "U"},
|
59
|
+
86 => {:name => "LATIN CAPITAL LETTER V", :convert_to => "V"},
|
60
|
+
87 => {:name => "LATIN CAPITAL LETTER W", :convert_to => "W"},
|
61
|
+
88 => {:name => "LATIN CAPITAL LETTER X", :convert_to => "X"},
|
62
|
+
89 => {:name => "LATIN CAPITAL LETTER Y", :convert_to => "Y"},
|
63
|
+
90 => {:name => "LATIN CAPITAL LETTER Z", :convert_to => "Z"},
|
64
|
+
91 => {:name => "LEFT SQUARE BRACKET", :convert_to => "."},
|
65
|
+
92 => {:name => "REVERSE SOLIDUS", :convert_to => "."},
|
66
|
+
93 => {:name => "RIGHT SQUARE BRACKET", :convert_to => "."},
|
67
|
+
94 => {:name => "CIRCUMFLEX ACCENT", :convert_to => "."},
|
68
|
+
95 => {:name => "LOW LINE", :convert_to => "."},
|
69
|
+
96 => {:name => "GRAVE ACCENT", :convert_to => "."},
|
70
|
+
97 => {:name => "LATIN SMALL LETTER A", :convert_to => "a"},
|
71
|
+
98 => {:name => "LATIN SMALL LETTER B", :convert_to => "b"},
|
72
|
+
99 => {:name => "LATIN SMALL LETTER C", :convert_to => "c"},
|
73
|
+
100 => {:name => "LATIN SMALL LETTER D", :convert_to => "d"},
|
74
|
+
101 => {:name => "LATIN SMALL LETTER E", :convert_to => "e"},
|
75
|
+
102 => {:name => "LATIN SMALL LETTER F", :convert_to => "f"},
|
76
|
+
103 => {:name => "LATIN SMALL LETTER G", :convert_to => "g"},
|
77
|
+
104 => {:name => "LATIN SMALL LETTER H", :convert_to => "h"},
|
78
|
+
105 => {:name => "LATIN SMALL LETTER I", :convert_to => "i"},
|
79
|
+
106 => {:name => "LATIN SMALL LETTER J", :convert_to => "j"},
|
80
|
+
107 => {:name => "LATIN SMALL LETTER K", :convert_to => "k"},
|
81
|
+
108 => {:name => "LATIN SMALL LETTER L", :convert_to => "l"},
|
82
|
+
109 => {:name => "LATIN SMALL LETTER M", :convert_to => "m"},
|
83
|
+
110 => {:name => "LATIN SMALL LETTER N", :convert_to => "n"},
|
84
|
+
111 => {:name => "LATIN SMALL LETTER O", :convert_to => "o"},
|
85
|
+
112 => {:name => "LATIN SMALL LETTER P", :convert_to => "p"},
|
86
|
+
113 => {:name => "LATIN SMALL LETTER Q", :convert_to => "q"},
|
87
|
+
114 => {:name => "LATIN SMALL LETTER R", :convert_to => "r"},
|
88
|
+
115 => {:name => "LATIN SMALL LETTER S", :convert_to => "s"},
|
89
|
+
116 => {:name => "LATIN SMALL LETTER T", :convert_to => "t"},
|
90
|
+
117 => {:name => "LATIN SMALL LETTER U", :convert_to => "u"},
|
91
|
+
118 => {:name => "LATIN SMALL LETTER V", :convert_to => "v"},
|
92
|
+
119 => {:name => "LATIN SMALL LETTER W", :convert_to => "w"},
|
93
|
+
120 => {:name => "LATIN SMALL LETTER X", :convert_to => "x"},
|
94
|
+
121 => {:name => "LATIN SMALL LETTER Y", :convert_to => "y"},
|
95
|
+
122 => {:name => "LATIN SMALL LETTER Z", :convert_to => "z"},
|
96
|
+
123 => {:name => "LEFT CURLY BRACKET", :convert_to => "."},
|
97
|
+
124 => {:name => "VERTICAL LINE", :convert_to => "."},
|
98
|
+
125 => {:name => "RIGHT CURLY BRACKET", :convert_to => "."},
|
99
|
+
126 => {:name => "TILDE", :convert_to => "."},
|
100
|
+
127 => {:name => "CONTROL", :convert_to => ' '},
|
101
|
+
194128 => {:name => "CONTROL", :convert_to => ' '},
|
102
|
+
194129 => {:name => "CONTROL", :convert_to => ' '},
|
103
|
+
194130 => {:name => "CONTROL", :convert_to => ' '},
|
104
|
+
194131 => {:name => "CONTROL", :convert_to => ' '},
|
105
|
+
194132 => {:name => "CONTROL", :convert_to => ' '},
|
106
|
+
194133 => {:name => "CONTROL", :convert_to => ' '},
|
107
|
+
194134 => {:name => "CONTROL", :convert_to => ' '},
|
108
|
+
194135 => {:name => "CONTROL", :convert_to => ' '},
|
109
|
+
194136 => {:name => "CONTROL", :convert_to => ' '},
|
110
|
+
194137 => {:name => "CONTROL", :convert_to => ' '},
|
111
|
+
194138 => {:name => "CONTROL", :convert_to => ' '},
|
112
|
+
194139 => {:name => "CONTROL", :convert_to => ' '},
|
113
|
+
194140 => {:name => "CONTROL", :convert_to => ' '},
|
114
|
+
194141 => {:name => "CONTROL", :convert_to => ' '},
|
115
|
+
194142 => {:name => "CONTROL", :convert_to => ' '},
|
116
|
+
194143 => {:name => "CONTROL", :convert_to => ' '},
|
117
|
+
194144 => {:name => "CONTROL", :convert_to => ' '},
|
118
|
+
194145 => {:name => "CONTROL", :convert_to => ' '},
|
119
|
+
194146 => {:name => "CONTROL", :convert_to => ' '},
|
120
|
+
194147 => {:name => "CONTROL", :convert_to => ' '},
|
121
|
+
194148 => {:name => "CONTROL", :convert_to => ' '},
|
122
|
+
194149 => {:name => "CONTROL", :convert_to => ' '},
|
123
|
+
194150 => {:name => "CONTROL", :convert_to => ' '},
|
124
|
+
194151 => {:name => "CONTROL", :convert_to => ' '},
|
125
|
+
194152 => {:name => "CONTROL", :convert_to => ' '},
|
126
|
+
194153 => {:name => "CONTROL", :convert_to => ' '},
|
127
|
+
194154 => {:name => "CONTROL", :convert_to => ' '},
|
128
|
+
194155 => {:name => "CONTROL", :convert_to => ' '},
|
129
|
+
194156 => {:name => "CONTROL", :convert_to => ' '},
|
130
|
+
194157 => {:name => "CONTROL", :convert_to => ' '},
|
131
|
+
194158 => {:name => "CONTROL", :convert_to => ' '},
|
132
|
+
194159 => {:name => "CONTROL", :convert_to => ' '},
|
133
|
+
194160 => {:name => "NO-BREAK SPACE", :convert_to => '.'},
|
134
|
+
194161 => {:name => "INVERTED EXCLAMATION MARK", :convert_to => '.'},
|
135
|
+
194162 => {:name => "CENT SIGN", :convert_to => '.'},
|
136
|
+
194163 => {:name => "POUND SIGN", :convert_to => '.'},
|
137
|
+
194164 => {:name => "CURRENCY SIGN", :convert_to => '.'},
|
138
|
+
194165 => {:name => "YEN SIGN", :convert_to => '.'},
|
139
|
+
194166 => {:name => "BROKEN BAR", :convert_to => '.'},
|
140
|
+
194167 => {:name => "SECTION SIGN", :convert_to => '.'},
|
141
|
+
194168 => {:name => "DIAERESIS", :convert_to => '.'},
|
142
|
+
194169 => {:name => "COPYRIGHT SIGN", :convert_to => '.'},
|
143
|
+
194170 => {:name => "FEMININE ORDINAL INDICATOR", :convert_to => '.'},
|
144
|
+
194171 => {:name => "LEFT-POINTING DOUBLE ANGLE QUOTATION MARK", :convert_to => '.'},
|
145
|
+
194172 => {:name => "NOT SIGN", :convert_to => '.'},
|
146
|
+
194173 => {:name => "SOFT HYPHEN", :convert_to => '.'},
|
147
|
+
194174 => {:name => "REGISTERED SIGN", :convert_to => '.'},
|
148
|
+
194175 => {:name => "MACRON", :convert_to => '.'},
|
149
|
+
194176 => {:name => "DEGREE SIGN", :convert_to => '.'},
|
150
|
+
194177 => {:name => "PLUS-MINUS SIGN", :convert_to => '.'},
|
151
|
+
194178 => {:name => "SUPERSCRIPT TWO", :convert_to => '.'},
|
152
|
+
194179 => {:name => "SUPERSCRIPT THREE", :convert_to => '.'},
|
153
|
+
194180 => {:name => "ACUTE ACCENT", :convert_to => '.'},
|
154
|
+
194181 => {:name => "MICRO SIGN", :convert_to => '.'},
|
155
|
+
194182 => {:name => "PILCROW SIGN", :convert_to => '.'},
|
156
|
+
194183 => {:name => "MIDDLE DOT", :convert_to => '.'},
|
157
|
+
194184 => {:name => "CEDILLA", :convert_to => '.'},
|
158
|
+
194185 => {:name => "SUPERSCRIPT ONE", :convert_to => '.'},
|
159
|
+
194186 => {:name => "MASCULINE ORDINAL INDICATOR", :convert_to => '.'},
|
160
|
+
194187 => {:name => "RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK", :convert_to => '.'},
|
161
|
+
194188 => {:name => "VULGAR FRACTION ONE QUARTER", :convert_to => '.'},
|
162
|
+
194189 => {:name => "VULGAR FRACTION ONE HALF", :convert_to => '.'},
|
163
|
+
194190 => {:name => "VULGAR FRACTION THREE QUARTERS", :convert_to => '.'},
|
164
|
+
194191 => {:name => "INVERTED QUESTION MARK", :convert_to => '.'},
|
165
|
+
195128 => {:name => "LATIN CAPITAL LETTER A WITH GRAVE", :convert_to => 'A'},
|
166
|
+
195129 => {:name => "LATIN CAPITAL LETTER A WITH ACUTE", :convert_to => 'A'},
|
167
|
+
195130 => {:name => "LATIN CAPITAL LETTER A WITH CIRCUMFLEX", :convert_to => 'A'},
|
168
|
+
195131 => {:name => "LATIN CAPITAL LETTER A WITH TILDE", :convert_to => 'A'},
|
169
|
+
195132 => {:name => "LATIN CAPITAL LETTER A WITH DIAERESIS", :convert_to => 'AE'},
|
170
|
+
195133 => {:name => "LATIN CAPITAL LETTER A WITH RING ABOVE", :convert_to => 'A'},
|
171
|
+
195134 => {:name => "LATIN CAPITAL LETTER AE", :convert_to => 'AE'},
|
172
|
+
195135 => {:name => "LATIN CAPITAL LETTER C WITH CEDILLA", :convert_to => 'C'},
|
173
|
+
195136 => {:name => "LATIN CAPITAL LETTER E WITH GRAVE", :convert_to => 'E'},
|
174
|
+
195137 => {:name => "LATIN CAPITAL LETTER E WITH ACUTE", :convert_to => 'E'},
|
175
|
+
195138 => {:name => "LATIN CAPITAL LETTER E WITH CIRCUMFLEX", :convert_to => 'E'},
|
176
|
+
195139 => {:name => "LATIN CAPITAL LETTER E WITH DIAERES", :convert_to => 'E'},
|
177
|
+
195140 => {:name => "LATIN CAPITAL LETTER I WITH GRAVE", :convert_to => 'I'},
|
178
|
+
195141 => {:name => "LATIN CAPITAL LETTER I WITH ACUTE", :convert_to => 'I'},
|
179
|
+
195142 => {:name => "LATIN CAPITAL LETTER I WITH CIRCUMFLEX", :convert_to => 'I'},
|
180
|
+
195143 => {:name => "LATIN CAPITAL LETTER I WITH DIAERESIS", :convert_to => 'I'},
|
181
|
+
195144 => {:name => "LATIN CAPITAL LETTER ETH", :convert_to => '.'},
|
182
|
+
195145 => {:name => "LATIN CAPITAL LETTER N WITH TILDE", :convert_to => 'N'},
|
183
|
+
195146 => {:name => "LATIN CAPITAL LETTER O WITH GRAVE", :convert_to => 'O'},
|
184
|
+
195147 => {:name => "LATIN CAPITAL LETTER O WITH ACUTE", :convert_to => 'O'},
|
185
|
+
195148 => {:name => "LATIN CAPITAL LETTER O WITH CIRCUMFLEX", :convert_to => 'O'},
|
186
|
+
195149 => {:name => "LATIN CAPITAL LETTER O WITH TILDE", :convert_to => 'O'},
|
187
|
+
195150 => {:name => "LATIN CAPITAL LETTER O WITH DIAERESIS", :convert_to => 'OE'},
|
188
|
+
195151 => {:name => "MULTIPLICATION SIGN", :convert_to => '.'},
|
189
|
+
195152 => {:name => "LATIN CAPITAL LETTER O WITH STROKE", :convert_to => '.'},
|
190
|
+
195153 => {:name => "LATIN CAPITAL LETTER U WITH GRAVE", :convert_to => 'U'},
|
191
|
+
195154 => {:name => "LATIN CAPITAL LETTER U WITH ACUTE", :convert_to => 'U'},
|
192
|
+
195155 => {:name => "LATIN CAPITAL LETTER U WITH CIRCUMFLEX", :convert_to => 'U'},
|
193
|
+
195156 => {:name => "LATIN CAPITAL LETTER U WITH DIAERESIS", :convert_to => 'UE'},
|
194
|
+
195157 => {:name => "LATIN CAPITAL LETTER Y WITH ACUTE", :convert_to => 'Y'},
|
195
|
+
195158 => {:name => "LATIN CAPITAL LETTER THORN", :convert_to => '.'},
|
196
|
+
195159 => {:name => "LATIN SMALL LETTER SHARP S", :convert_to => 'ss'},
|
197
|
+
195160 => {:name => "LATIN SMALL LETTER A WITH GRAVE", :convert_to => 'a'},
|
198
|
+
195161 => {:name => "LATIN SMALL LETTER A WITH ACUTE", :convert_to => 'a'},
|
199
|
+
195162 => {:name => "LATIN SMALL LETTER A WITH CIRCUMFLEX", :convert_to => 'a'},
|
200
|
+
195163 => {:name => "LATIN SMALL LETTER A WITH TILDE", :convert_to => 'a'},
|
201
|
+
195164 => {:name => "LATIN SMALL LETTER A WITH DIAERESIS", :convert_to => 'ae'},
|
202
|
+
195165 => {:name => "LATIN SMALL LETTER A WITH RING ABOVE", :convert_to => 'a'},
|
203
|
+
195166 => {:name => "LATIN SMALL LETTER AE", :convert_to => 'ae'},
|
204
|
+
195167 => {:name => "LATIN SMALL LETTER C WITH CEDILLA", :convert_to => 'c'},
|
205
|
+
195168 => {:name => "LATIN SMALL LETTER E WITH GRAVE", :convert_to => 'e'},
|
206
|
+
195169 => {:name => "LATIN SMALL LETTER E WITH ACUTE", :convert_to => 'e'},
|
207
|
+
195170 => {:name => "LATIN SMALL LETTER E WITH CIRCUMFLEX", :convert_to => 'e'},
|
208
|
+
195171 => {:name => "LATIN SMALL LETTER E WITH DIAERESIS", :convert_to => 'e'},
|
209
|
+
195172 => {:name => "LATIN SMALL LETTER I WITH GRAVE", :convert_to => 'i'},
|
210
|
+
195173 => {:name => "LATIN SMALL LETTER I WITH ACUTE", :convert_to => 'i'},
|
211
|
+
195174 => {:name => "LATIN SMALL LETTER I WITH CIRCUMFLEX", :convert_to => 'i'},
|
212
|
+
195175 => {:name => "LATIN SMALL LETTER I WITH DIAERESIS", :convert_to => 'i'},
|
213
|
+
195176 => {:name => "LATIN SMALL LETTER ETH", :convert_to => '.'},
|
214
|
+
195177 => {:name => "LATIN SMALL LETTER N WITH TILE", :convert_to => 'n'},
|
215
|
+
195178 => {:name => "LATIN SMALL LETTER O WITH GRAVE", :convert_to => 'o'},
|
216
|
+
195179 => {:name => "LATIN SMALL LETTER O WITH ACUTE", :convert_to => 'o'},
|
217
|
+
195180 => {:name => "LATIN SMALL LETTER O WITH CIRCUMFLEX", :convert_to => 'o'},
|
218
|
+
195181 => {:name => "LATIN SMALL LETTER O WITH TILDE", :convert_to => 'o'},
|
219
|
+
195182 => {:name => "LATIN SMALL LETTER O WITH DIAERESIS", :convert_to => 'oe'},
|
220
|
+
195183 => {:name => "DIVISION SIGN", :convert_to => '.'},
|
221
|
+
195184 => {:name => "LATIN SMALL LETTER O WITH STROKE", :convert_to => '.'},
|
222
|
+
195185 => {:name => "LATIN SMALL LETTER U WITH GRAVE", :convert_to => 'u'},
|
223
|
+
195186 => {:name => "LATIN SMALL LETTER U WITH ACUTE", :convert_to => 'u'},
|
224
|
+
195187 => {:name => "LATIN SMALL LETTER U WITH CIRCUMFLEX", :convert_to => 'u'},
|
225
|
+
195188 => {:name => "LATIN SMALL LETTER U WITH DIAERESIS", :convert_to => 'ue'},
|
226
|
+
195189 => {:name => "LATIN SMALL LETTER Y WITH ACUTE", :convert_to => 'y'},
|
227
|
+
195190 => {:name => "LATIN SMALL LETTER THORN", :convert_to => '.'},
|
228
|
+
195191 => {:name => "LATIN SMALL LETTER Y WITH DIAERESIS", :convert_to => 'y'},
|
229
|
+
}
|
230
|
+
|
231
|
+
|
232
|
+
class Converter
|
233
|
+
extend DTA::CharacterConversion
|
234
|
+
end
|
235
|
+
|
236
|
+
def create_character_from_ut8_decimal_code(code)
|
237
|
+
if code < 128
|
238
|
+
code.chr
|
239
|
+
else
|
240
|
+
[code.to_s[0,3].to_i,code.to_s[3,3].to_i].pack("C*")
|
241
|
+
end
|
242
|
+
end
|
243
|
+
describe "dta character conversion and encoding" do
|
244
|
+
# UTF-8 encoding uses 2 bytes for non US-ASCII characters
|
245
|
+
# ISO Latincode 8859-1 uses 1 byte
|
246
|
+
it "should map the string before encoding it" do
|
247
|
+
Converter.should_receive(:map_characters).with("Äöü").and_return("AEoeue")
|
248
|
+
Converter.dta_string("Äöü")
|
249
|
+
end
|
250
|
+
|
251
|
+
it "should encode the strings" do
|
252
|
+
Converter.should_receive(:encode_characters).with("AEoeue").and_return(Iconv.conv("ISO-8859-1", "UTF8","Äöü"))
|
253
|
+
Converter.dta_string("Äöü")
|
254
|
+
end
|
255
|
+
|
256
|
+
describe "character mapping/reduction" do
|
257
|
+
CONVERSION_MAP_UTF8.each do |id,conversion|
|
258
|
+
it "should map #{conversion[:name]} to '#{conversion[:convert_to]}'" do
|
259
|
+
character = create_character_from_ut8_decimal_code(id)
|
260
|
+
Converter.map_characters(character).should == conversion[:convert_to]
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
it "should map strings" do
|
265
|
+
Converter.map_characters("ÄäÜüÖö").should == "AEaeUEueOEoe"
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
describe 'DTA character encoding' do
|
270
|
+
|
271
|
+
it "should have a default system encoding of utf8" do
|
272
|
+
$KCODE.should == 'UTF8'
|
273
|
+
end
|
274
|
+
|
275
|
+
it "should convert the encoding from UTF8 to ISO Latincode 8859-1" do
|
276
|
+
encoded_string = Converter.encode_characters("Ä")
|
277
|
+
encoded_string.size.should == 1
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
@@ -0,0 +1,189 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
require 'payments/domestic_chf_payment'
|
3
|
+
|
4
|
+
describe DomesticCHFPayment do
|
5
|
+
|
6
|
+
it "should have a total length of 640 characters" do
|
7
|
+
Factory.create_domestic_chf_payment.record.size.should == 640
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'segment 1' do
|
11
|
+
it 'should set the segment field to 01' do
|
12
|
+
Factory.create_domestic_chf_payment.segment1[0,2].should == '01'
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should have a reference number' do
|
16
|
+
Factory.create_domestic_chf_payment(:issuer_identification => 'ABC01', :transaction_number => '00123478901').segment1[53,16].should == "ABC0100123478901"
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should have an account to be debited without IBAN justified left filled with blanks' do
|
20
|
+
Factory.create_domestic_chf_payment(:account_to_be_debited => '10235678').segment1[69,24].should == '10235678 '
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should have an account to be debited with IBAN' do
|
24
|
+
Factory.create_domestic_chf_payment(:account_to_be_debited => 'CH9300762011623852957').segment1[69,24].should == 'CH9300762011623852957 '
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should have a blank payment amount valuta (6 blanks)' do
|
28
|
+
Factory.create_domestic_chf_payment.segment1[93,6].should == ' '
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should have a payment amount currency code' do
|
32
|
+
Factory.create_domestic_chf_payment(:payment_amount_currency => 'CHF').segment1[99,3].should == 'CHF'
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should have a payment amount justified left filled with blanks' do
|
36
|
+
Factory.create_domestic_chf_payment(:payment_amount => '3949.75').segment1[102,12].should == '3949.75 '
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should have a reserve field' do
|
40
|
+
Factory.create_domestic_chf_payment.segment1[114,14].should == ' '.ljust(14)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should have a total length of 128 characters' do
|
44
|
+
Factory.create_domestic_chf_payment.segment1.size.should == 128
|
45
|
+
end
|
46
|
+
end
|
47
|
+
describe 'segment 2' do
|
48
|
+
it 'should set the segment field to 02' do
|
49
|
+
Factory.create_domestic_chf_payment.segment2[0,2].should == '02'
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should have an ordering partys address line 1' do
|
53
|
+
Factory.create_domestic_chf_payment(:ordering_partys_address_line1 => 'John Doe').segment2[2,24].should == 'John Doe'.ljust(24)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should have an ordering partys address line 2' do
|
57
|
+
Factory.create_domestic_chf_payment(:ordering_partys_address_line2 => 'Bahnhofstrasse 1').segment2[26,24].should == 'Bahnhofstrasse 1'.ljust(24)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should have an ordering partys address line 3' do
|
61
|
+
Factory.create_domestic_chf_payment(:ordering_partys_address_line3 => '8000 Zurich').segment2[50,24].should == '8000 Zurich'.ljust(24)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should have an ordering partys address line 4' do
|
65
|
+
Factory.create_domestic_chf_payment(:ordering_partys_address_line4 => 'Schweiz').segment2[74,24].should == 'Schweiz'.ljust(24)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should have a reserve field' do
|
69
|
+
Factory.create_domestic_chf_payment.segment2[98,30].should == ''.ljust(30)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should have a length of 128 characters' do
|
73
|
+
Factory.create_domestic_chf_payment.segment2.size.should == 128
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe 'segment 3' do
|
78
|
+
it 'should set the segment field to 03' do
|
79
|
+
Factory.create_domestic_chf_payment.segment3[0,2].should == '03'
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'should have the beneficiarys bank account number' do
|
83
|
+
Factory.create_domestic_chf_payment(:beneficiarys_bank_account_number =>'111222333').segment3[2,30].should == '/C/111222333'.ljust(30)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should have a address line 1' do
|
87
|
+
Factory.create_domestic_chf_payment(:beneficiary_address_line1 => 'Michael Recipient').segment3[32,24].should == 'Michael Recipient'.ljust(24)
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'should have a beneficiary address line 2' do
|
91
|
+
Factory.create_domestic_chf_payment(:beneficiary_address_line2 => 'Empfaengerstrasse 1').segment3[56,24].should == 'Empfaengerstrasse 1'.ljust(24)
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'should have a beneficiary address line 3' do
|
95
|
+
Factory.create_domestic_chf_payment(:beneficiary_address_line3 => '8640 Rapperswil').segment3[80,24].should == '8640 Rapperswil'.ljust(24)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'should have a beneficiary address line 4' do
|
99
|
+
Factory.create_domestic_chf_payment(:beneficiary_address_line4 => 'Schweiz').segment3[104,24].should == 'Schweiz'.ljust(24)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'should have a length of 128 characters' do
|
103
|
+
Factory.create_domestic_chf_payment.segment3.size.should == 128
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe 'segment 4' do
|
108
|
+
it 'should set the segment field to 04' do
|
109
|
+
Factory.create_domestic_chf_payment.segment4[0,2].should == '04'
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should have a reson for payment message line 1" do
|
113
|
+
Factory.create_domestic_chf_payment(:reason_for_payment_message_line1 => 'LINE1').segment4[2,28].should == 'LINE1'.ljust(28)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should have a reson for payment message line 2" do
|
117
|
+
Factory.create_domestic_chf_payment(:reason_for_payment_message_line2 => 'LINE2').segment4[30,28].should == 'LINE2'.ljust(28)
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should have a reson for payment message line 3" do
|
121
|
+
Factory.create_domestic_chf_payment(:reason_for_payment_message_line3 => 'LINE3').segment4[58,28].should == 'LINE3'.ljust(28)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should have a reson for payment message line 4" do
|
125
|
+
Factory.create_domestic_chf_payment(:reason_for_payment_message_line4 => 'LINE4').segment4[86,28].should == 'LINE4'.ljust(28)
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'should have a reserve field' do
|
129
|
+
Factory.create_domestic_chf_payment.segment4[114,14].should == ' '.ljust(14)
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'should have a length of 128 characters' do
|
133
|
+
Factory.create_domestic_chf_payment.segment4.size.should == 128
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
describe 'segment 5' do
|
138
|
+
it 'should set the segment field to 05' do
|
139
|
+
Factory.create_domestic_chf_payment.segment5[0,2].should == '05'
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'should have the end beneficiarys bank account number' do
|
143
|
+
Factory.create_domestic_chf_payment(:end_beneficiarys_bank_account_number =>'111222333').segment5[2,30].should == '/C/111222333'.ljust(30)
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'should have an end beneficiary address line 1' do
|
147
|
+
Factory.create_domestic_chf_payment(:end_beneficiary_address_line1 => 'Michael Recipient').segment5[32,24].should == 'Michael Recipient'.ljust(24)
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'should have an beneficiary address line 2' do
|
151
|
+
Factory.create_domestic_chf_payment(:end_beneficiary_address_line2 => 'Empfaengerstrasse 1').segment5[56,24].should == 'Empfaengerstrasse 1'.ljust(24)
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'should have an end beneficiary address line 3' do
|
155
|
+
Factory.create_domestic_chf_payment(:end_beneficiary_address_line3 => '8640 Rapperswil').segment5[80,24].should == '8640 Rapperswil'.ljust(24)
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'should have an end beneficiary address line 4' do
|
159
|
+
Factory.create_domestic_chf_payment(:end_beneficiary_address_line4 => 'Schweiz').segment5[104,24].should == 'Schweiz'.ljust(24)
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'should have a length of 128 characters' do
|
163
|
+
Factory.create_domestic_chf_payment.segment5.size.should == 128
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
describe 'comparison' do
|
168
|
+
it 'should sort by execution date ascending' do
|
169
|
+
@record1 = Factory.create_domestic_chf_payment(:requested_processing_date => "091026")
|
170
|
+
@record2 = Factory.create_domestic_chf_payment(:requested_processing_date => "091027")
|
171
|
+
|
172
|
+
(@record1 < @record2).should be_true
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should sort by issuer identification when the execution date is equal" do
|
176
|
+
@record1 = Factory.create_domestic_chf_payment(:requested_processing_date => "091026", :issuer_identification => "AAAAA")
|
177
|
+
@record2 = Factory.create_domestic_chf_payment(:requested_processing_date => "091026",:issuer_identification => "BBBBB")
|
178
|
+
|
179
|
+
(@record1 < @record2).should be_true
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should sort by issuers clearing number when execution date and issuer identification are equal" do
|
183
|
+
@record1 = Factory.create_domestic_chf_payment(:requested_processing_date => "091026", :issuer_identification => "AAAAA", :ordering_party_bank_clearing_number => '253')
|
184
|
+
@record2 = Factory.create_domestic_chf_payment(:requested_processing_date => "091026",:issuer_identification => "AAAAA", :ordering_party_bank_clearing_number => '254')
|
185
|
+
|
186
|
+
(@record1 < @record2).should be_true
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|