@@ -3062,14 +3062,148 @@ public void russiapayment_generator_can_generate_payload_mandatory_fields()
3062
3062
{
3063
3063
var account = "40702810138250123017" ;
3064
3064
var bic = "044525225" ;
3065
- var bankName = "=ОАО \" БАНК\" " ;
3065
+ var bankName = "ОАО \" БАНК\" " ;
3066
+ var name = "ООО «Три кита»" ;
3067
+ var correspAcc = "30101810965770000413" ;
3068
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc ) ;
3069
+
3070
+ generator
3071
+ . ToString ( )
3072
+ . ShouldBe ( $ "ST00012|Name={ name } |PersonalAcc={ account } |BankName={ bankName } |BIC={ bic } |CorrespAcc={ correspAcc } |") ;
3073
+ }
3074
+
3075
+ [ Fact ]
3076
+ [ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3077
+ public void russiapayment_generator_can_generate_payload_encoding_win1251 ( )
3078
+ {
3079
+ var account = "40702810138250123017" ;
3080
+ var bic = "044525225" ;
3081
+ var bankName = "ОАО \" БАНК\" " ;
3082
+ var name = "ООО «Три кита»" ;
3083
+ var correspAcc = "30101810965770000413" ;
3084
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc , null , PayloadGenerator . RussiaPaymentOrder . CharacterSets . windows_1251 ) ;
3085
+
3086
+ byte [ ] targetBytes = new byte [ ] { 83 , 84 , 48 , 48 , 48 , 49 , 49 , 124 , 78 , 97 , 109 , 101 , 61 , 206 , 206 , 206 , 32 , 171 , 210 , 240 , 232 , 32 , 234 , 232 , 242 , 224 , 187 , 124 , 80 , 101 , 114 , 115 , 111 , 110 , 97 , 108 , 65 , 99 , 99 , 61 , 52 , 48 , 55 , 48 , 50 , 56 , 49 , 48 , 49 , 51 , 56 , 50 , 53 , 48 , 49 , 50 , 51 , 48 , 49 , 55 , 124 , 66 , 97 , 110 , 107 , 78 , 97 , 109 , 101 , 61 , 206 , 192 , 206 , 32 , 34 , 193 , 192 , 205 , 202 , 34 , 124 , 66 , 73 , 67 , 61 , 48 , 52 , 52 , 53 , 50 , 53 , 50 , 50 , 53 , 124 , 67 , 111 , 114 , 114 , 101 , 115 , 112 , 65 , 99 , 99 , 61 , 51 , 48 , 49 , 48 , 49 , 56 , 49 , 48 , 57 , 54 , 53 , 55 , 55 , 48 , 48 , 48 , 48 , 52 , 49 , 51 , 124 } ;
3087
+ var payloadBytes = generator . ToBytes ( ) ;
3088
+
3089
+ Assert . True ( targetBytes . Length == payloadBytes . Length , $ "Byte array lengths different. Expected: { targetBytes . Length } , Actual: { payloadBytes . Length } ") ;
3090
+ for ( int i = 0 ; i < targetBytes . Length ; i ++ )
3091
+ {
3092
+ Assert . True ( targetBytes [ i ] == payloadBytes [ i ] ,
3093
+ $ "Expected: '{ targetBytes [ i ] } ', Actual: '{ payloadBytes [ i ] } ' at offset { i } ."
3094
+ ) ;
3095
+ }
3096
+ }
3097
+
3098
+ [ Fact ]
3099
+ [ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3100
+ public void russiapayment_generator_can_generate_payload_encoding_koi8 ( )
3101
+ {
3102
+ var account = "40702810138250123017" ;
3103
+ var bic = "044525225" ;
3104
+ var bankName = "ОАО \" БАНК\" " ;
3105
+ var name = "ООО «Три кита»" ;
3106
+ var correspAcc = "30101810965770000413" ;
3107
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc , null , PayloadGenerator . RussiaPaymentOrder . CharacterSets . koi8_r ) ;
3108
+
3109
+ byte [ ] targetBytes = new byte [ ] { 83 , 84 , 48 , 48 , 48 , 49 , 51 , 124 , 78 , 97 , 109 , 101 , 61 , 239 , 239 , 239 , 32 , 60 , 244 , 210 , 201 , 32 , 203 , 201 , 212 , 193 , 62 , 124 , 80 , 101 , 114 , 115 , 111 , 110 , 97 , 108 , 65 , 99 , 99 , 61 , 52 , 48 , 55 , 48 , 50 , 56 , 49 , 48 , 49 , 51 , 56 , 50 , 53 , 48 , 49 , 50 , 51 , 48 , 49 , 55 , 124 , 66 , 97 , 110 , 107 , 78 , 97 , 109 , 101 , 61 , 239 , 225 , 239 , 32 , 34 , 226 , 225 , 238 , 235 , 34 , 124 , 66 , 73 , 67 , 61 , 48 , 52 , 52 , 53 , 50 , 53 , 50 , 50 , 53 , 124 , 67 , 111 , 114 , 114 , 101 , 115 , 112 , 65 , 99 , 99 , 61 , 51 , 48 , 49 , 48 , 49 , 56 , 49 , 48 , 57 , 54 , 53 , 55 , 55 , 48 , 48 , 48 , 48 , 52 , 49 , 51 , 124 } ;
3110
+ var payloadBytes = generator . ToBytes ( ) ;
3111
+
3112
+ Assert . True ( targetBytes . Length == payloadBytes . Length , $ "Byte array lengths different. Expected: { targetBytes . Length } , Actual: { payloadBytes . Length } ") ;
3113
+ for ( int i = 0 ; i < targetBytes . Length ; i ++ )
3114
+ {
3115
+ Assert . True ( targetBytes [ i ] == payloadBytes [ i ] ,
3116
+ $ "Expected: '{ targetBytes [ i ] } ', Actual: '{ payloadBytes [ i ] } ' at offset { i } ."
3117
+ ) ;
3118
+ }
3119
+ }
3120
+
3121
+ [ Fact ]
3122
+ [ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3123
+ public void russiapayment_generator_can_generate_payload_custom_separator ( )
3124
+ {
3125
+ var account = "40702810138250123017" ;
3126
+ var bic = "044525225" ;
3127
+ var bankName = "ОАО | \" БАНК\" " ;
3066
3128
var name = "ООО «Три кита»" ;
3067
3129
var correspAcc = "30101810400000000225" ;
3068
- var generator = new PayloadGenerator . RussiaPaymentOrder ( PayloadGenerator . RussiaPaymentOrder . CharacterSets . utf_8 , name , account , bankName , bic , correspAcc ) ;
3130
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc ) ;
3069
3131
3070
3132
generator
3071
3133
. ToString ( )
3072
- . ShouldBe ( $ "ST00012|Name={ name } |PersonalAcc={ account } |BankName={ bankName } |BIC={ bic } |CorrespAcc={ correspAcc } ") ;
3134
+ . ShouldBe ( $ "ST00012#Name={ name } #PersonalAcc={ account } #BankName={ bankName } #BIC={ bic } #CorrespAcc={ correspAcc } #") ;
3135
+ }
3136
+
3137
+ [ Fact ]
3138
+ [ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3139
+ public void russiapayment_generator_should_throw_no_separator_exception ( )
3140
+ {
3141
+ var account = "40702810138250123017" ;
3142
+ var bic = "044525225" ;
3143
+ var bankName = "ОАО | \" БАНК\" " ;
3144
+ var name = "|@;:^_~{}!#$%&()*+,/" ; //All chars that could be used as separator
3145
+ var correspAcc = "30101810400000000225" ;
3146
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc ) ;
3147
+
3148
+ var exception = Record . Exception ( ( ) => generator . ToString ( ) ) ;
3149
+ Assert . NotNull ( exception ) ;
3150
+ Assert . IsType < PayloadGenerator . RussiaPaymentOrder . RussiaPaymentOrderException > ( exception ) ;
3151
+ exception . Message . ShouldBe ( "No valid separator found." ) ;
3152
+ }
3153
+
3154
+ [ Fact ]
3155
+ [ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3156
+ public void russiapayment_generator_should_throw_data_too_long_exception ( )
3157
+ {
3158
+ var account = "40702810138250123017" ;
3159
+ var bic = "044525225" ;
3160
+ var bankName = "ОАО | \" БАНК\" " ;
3161
+ var name = "A very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long name" ;
3162
+ var correspAcc = "30101810400000000225" ;
3163
+ var optionalFields = new PayloadGenerator . RussiaPaymentOrder . OptionalFields ( )
3164
+ {
3165
+ FirstName = "Another long long long long long long long long long long long long long long firstname" ,
3166
+ LastName = "Another long long long long long long long long long long long long long long lastname" ,
3167
+ Sum = "125000"
3168
+ } ;
3169
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc , optionalFields ) ;
3170
+
3171
+ var exception = Record . Exception ( ( ) => generator . ToString ( ) ) ;
3172
+ Assert . NotNull ( exception ) ;
3173
+ Assert . IsType < PayloadGenerator . RussiaPaymentOrder . RussiaPaymentOrderException > ( exception ) ;
3174
+ exception . Message . ShouldStartWith ( "Data too long" ) ;
3175
+ }
3176
+
3177
+ [ Fact ]
3178
+ [ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3179
+ public void russiapayment_generator_should_throw_must_not_be_null_exception ( )
3180
+ {
3181
+ string account = null ;
3182
+ var bic = "044525225" ;
3183
+ var bankName = "ОАО | \" БАНК\" " ;
3184
+ var name = "|@;:^_~{}!#$%&()*+,/" ;
3185
+ var correspAcc = "30101810400000000225" ;
3186
+
3187
+ var exception = Record . Exception ( ( ) => new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc ) ) ;
3188
+ Assert . NotNull ( exception ) ;
3189
+ Assert . IsType < PayloadGenerator . RussiaPaymentOrder . RussiaPaymentOrderException > ( exception ) ;
3190
+ exception . Message . ShouldBe ( $ "The input for 'PersonalAcc' must not be null.") ;
3191
+ }
3192
+
3193
+ [ Fact ]
3194
+ [ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3195
+ public void russiapayment_generator_should_throw_unmatched_pattern_exception ( )
3196
+ {
3197
+ string account = "40702810138250123017" ;
3198
+ var bic = "abcd" ; //Invalid BIC
3199
+ var bankName = "ОАО | \" БАНК\" " ;
3200
+ var name = "|@;:^_~{}!#$%&()*+,/" ;
3201
+ var correspAcc = "30101810400000000225" ;
3202
+
3203
+ var exception = Record . Exception ( ( ) => new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc ) ) ;
3204
+ Assert . NotNull ( exception ) ;
3205
+ Assert . IsType < PayloadGenerator . RussiaPaymentOrder . RussiaPaymentOrderException > ( exception ) ;
3206
+ exception . Message . ShouldBe ( "The input for 'BIC' (abcd) doesn't match the pattern ^\\ d{9}$" ) ;
3073
3207
}
3074
3208
3075
3209
[ Fact ]
@@ -3088,35 +3222,157 @@ public void russiapayment_generator_can_generate_payload_some_additional_fields(
3088
3222
Sum = "125000"
3089
3223
} ;
3090
3224
3091
- var generator = new PayloadGenerator . RussiaPaymentOrder ( PayloadGenerator . RussiaPaymentOrder . CharacterSets . utf_8 , name , account , bankName , bic , correspAcc , optionalFields : optionalFields ) ;
3225
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc , optionalFields ) ;
3226
+
3227
+ generator
3228
+ . ToString ( )
3229
+ . ShouldBe ( $ "ST00012|Name={ name } |PersonalAcc={ account } |BankName={ bankName } |BIC={ bic } |CorrespAcc={ correspAcc } |Sum={ optionalFields . Sum } |LastName={ optionalFields . LastName } |FirstName={ optionalFields . FirstName } |") ;
3230
+ }
3231
+
3232
+ [ Fact ]
3233
+ [ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3234
+ public void russiapayment_generator_can_generate_payload_all_additional_fields_pt1 ( )
3235
+ {
3236
+ var account = "40702810138250123017" ;
3237
+ var bic = "044525225" ;
3238
+ var bankName = "=ОАО \" БАНК\" " ;
3239
+ var name = "ООО «Три кита»" ;
3240
+ var correspAcc = "30101810400000000225" ;
3241
+ var optionalFields = new PayloadGenerator . RussiaPaymentOrder . OptionalFields ( )
3242
+ {
3243
+ FirstName = "R" ,
3244
+ MiddleName = "C" ,
3245
+ LastName = "Hann" ,
3246
+ Sum = "1250" ,
3247
+ AddAmount = "10" ,
3248
+ BirthDate = new DateTime ( 1990 , 1 , 1 ) ,
3249
+ Category = "1" ,
3250
+ CBC = "CBC1" ,
3251
+ ChildFio = "J Doe" ,
3252
+ ClassNum = "1" ,
3253
+ Contract = "99" ,
3254
+ } ;
3255
+
3256
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc , optionalFields ) ;
3257
+
3258
+ generator
3259
+ . ToString ( )
3260
+ . ShouldBe ( $ "ST00012|Name={ name } |PersonalAcc={ account } |BankName={ bankName } |BIC={ bic } |CorrespAcc={ correspAcc } |Sum={ optionalFields . Sum } |CBC=CBC1|LastName=Hann|FirstName=R|MiddleName=C|Contract=99|ChildFio=J Doe|BirthDate=01.01.1990|Category=1|ClassNum=1|AddAmount=10|") ;
3261
+ }
3262
+
3263
+ [ Fact ]
3264
+ [ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3265
+ public void russiapayment_generator_can_generate_payload_all_additional_fields_pt2 ( )
3266
+ {
3267
+ var account = "40702810138250123017" ;
3268
+ var bic = "044525225" ;
3269
+ var bankName = "=ОАО \" БАНК\" " ;
3270
+ var name = "ООО «Три кита»" ;
3271
+ var correspAcc = "30101810400000000225" ;
3272
+ var optionalFields = new PayloadGenerator . RussiaPaymentOrder . OptionalFields ( )
3273
+ {
3274
+ CounterId = "1234" ,
3275
+ CounterVal = "9999" ,
3276
+ DocDate = new DateTime ( 2021 , 11 , 8 ) ,
3277
+ DocIdx = "A1" ,
3278
+ DocNo = "11" ,
3279
+ DrawerStatus = "D1" ,
3280
+ ExecId = "77" ,
3281
+ Flat = "5a" ,
3282
+ InstNum = "987" ,
3283
+ KPP = "KPP1" ,
3284
+ OKTMO = "112233"
3285
+ } ;
3286
+
3287
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc , optionalFields ) ;
3092
3288
3093
3289
generator
3094
3290
. ToString ( )
3095
- . ShouldBe ( $ "ST00012|Name={ name } |PersonalAcc={ account } |BankName={ bankName } |BIC={ bic } |CorrespAcc={ correspAcc } |Sum={ optionalFields . Sum } |LastName={ optionalFields . LastName } |FirstName={ optionalFields . FirstName } ") ;
3291
+ . ShouldBe ( $ "ST00012|Name={ name } |PersonalAcc={ account } |BankName={ bankName } |BIC={ bic } |CorrespAcc={ correspAcc } |DrawerStatus=D1|KPP=KPP1|OKTMO=112233|DocNo=11|DocDate=08.11.2021|DocIdx=A1|Flat=5a|CounterId=1234|CounterVal=9999|InstNum=987|ExecId=77|") ;
3292
+ }
3293
+
3294
+
3295
+ [ Fact ]
3296
+ [ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3297
+ public void russiapayment_generator_can_generate_payload_all_additional_fields_pt3 ( )
3298
+ {
3299
+ var account = "40702810138250123017" ;
3300
+ var bic = "044525225" ;
3301
+ var bankName = "=ОАО \" БАНК\" " ;
3302
+ var name = "ООО «Три кита»" ;
3303
+ var correspAcc = "30101810400000000225" ;
3304
+ var optionalFields = new PayloadGenerator . RussiaPaymentOrder . OptionalFields ( )
3305
+ {
3306
+ PayeeINN = "INN1" ,
3307
+ PayerAddress = "Street 1, 123 City" ,
3308
+ PayerIdNum = "555" ,
3309
+ PayerIdType = "X" ,
3310
+ PayerINN = "INN2" ,
3311
+ PaymPeriod = "12" ,
3312
+ PaymTerm = "A" ,
3313
+ PaytReason = "01" ,
3314
+ PensAcc = "SNILS_NO"
3315
+ } ;
3316
+
3317
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc , optionalFields ) ;
3318
+
3319
+ generator
3320
+ . ToString ( )
3321
+ . ShouldBe ( $ "ST00012|Name={ name } |PersonalAcc={ account } |BankName={ bankName } |BIC={ bic } |CorrespAcc={ correspAcc } |PayeeINN=INN1|PayerINN=INN2|PaytReason=01|PayerAddress=Street 1, 123 City|PensAcc=SNILS_NO|PayerIdType=X|PayerIdNum=555|PaymTerm=A|PaymPeriod=12|") ;
3096
3322
}
3097
3323
3098
3324
[ Fact ]
3099
3325
[ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3100
- public void russiapayment_generator_can_generate_payload_all_additional_fields ( )
3326
+ public void russiapayment_generator_can_generate_payload_all_additional_fields_pt4 ( )
3101
3327
{
3102
3328
var account = "40702810138250123017" ;
3103
3329
var bic = "044525225" ;
3104
3330
var bankName = "=ОАО \" БАНК\" " ;
3105
3331
var name = "ООО «Три кита»" ;
3106
3332
var correspAcc = "30101810400000000225" ;
3107
3333
var optionalFields = new PayloadGenerator . RussiaPaymentOrder . OptionalFields ( )
3108
- {
3109
- Sum = "50000" ,
3110
- Purpose = "Your loan" ,
3111
- PayeeINN = "9909373824" ,
3112
- PayerINN = "1832090230"
3334
+ {
3335
+ PersAcc = "2222" ,
3336
+ PersonalAccount = "3333" ,
3337
+ Phone = "0012345" ,
3338
+ Purpose = "Test" ,
3339
+ QuittDate = new DateTime ( 2021 , 2 , 1 ) ,
3340
+ QuittId = "7" ,
3341
+ RegType = "y" ,
3342
+ RuleId = "2" ,
3343
+ ServiceName = "Bank"
3344
+ } ;
3345
+
3346
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc , optionalFields ) ;
3347
+
3348
+ generator
3349
+ . ToString ( )
3350
+ . ShouldBe ( $ "ST00012|Name={ name } |PersonalAcc={ account } |BankName={ bankName } |BIC={ bic } |CorrespAcc={ correspAcc } |Purpose=Test|PersonalAccount=3333|PersAcc=2222|Phone=0012345|ServiceName=Bank|QuittId=7|QuittDate=01.02.2021|RuleId=2|RegType=y|") ;
3351
+ }
3352
+
3353
+ [ Fact ]
3354
+ [ Category ( "PayloadGenerator/RussiaPaymentOrder" ) ]
3355
+ public void russiapayment_generator_can_generate_payload_all_additional_fields_pt5 ( )
3356
+ {
3357
+ var account = "40702810138250123017" ;
3358
+ var bic = "044525225" ;
3359
+ var bankName = "=ОАО \" БАНК\" " ;
3360
+ var name = "ООО «Три кита»" ;
3361
+ var correspAcc = "30101810400000000225" ;
3362
+ var optionalFields = new PayloadGenerator . RussiaPaymentOrder . OptionalFields ( )
3363
+ {
3364
+ SpecFio = "T. Eacher" ,
3365
+ TaxPaytKind = "99" ,
3366
+ TaxPeriod = "31" ,
3367
+ TechCode = PayloadGenerator . RussiaPaymentOrder . TechCode . ГИБДД_налоги_пошлины_бюджетные_платежи ,
3368
+ UIN = "1a2b"
3113
3369
} ;
3114
3370
3115
- var generator = new PayloadGenerator . RussiaPaymentOrder ( PayloadGenerator . RussiaPaymentOrder . CharacterSets . utf_8 , name , account , bankName , bic , correspAcc , optionalFields : optionalFields ) ;
3371
+ var generator = new PayloadGenerator . RussiaPaymentOrder ( name , account , bankName , bic , correspAcc , optionalFields ) ;
3116
3372
3117
3373
generator
3118
3374
. ToString ( )
3119
- . ShouldBe ( $ "ST00012|Name={ name } |PersonalAcc={ account } |BankName={ bankName } |BIC={ bic } |CorrespAcc={ correspAcc } |Sum= { optionalFields . Sum } |LastName= { optionalFields . LastName } |FirstName= { optionalFields . FirstName } ") ;
3375
+ . ShouldBe ( $ "ST00012|Name={ name } |PersonalAcc={ account } |BankName={ bankName } |BIC={ bic } |CorrespAcc={ correspAcc } |TaxPeriod=31|TaxPaytKind=99|SpecFio=T. Eacher|UIN=1a2b|TechCode=ГИБДД_налоги_пошлины_бюджетные_платежи| ") ;
3120
3376
}
3121
3377
}
3122
3378
}
0 commit comments