Skip to content

Commit c6c511a

Browse files
committed
More RussiaPaymentOrder test cases (100% coverage)
1 parent 76df56f commit c6c511a

File tree

1 file changed

+269
-13
lines changed

1 file changed

+269
-13
lines changed

QRCoderTests/PayloadGeneratorTests.cs

Lines changed: 269 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3062,14 +3062,148 @@ public void russiapayment_generator_can_generate_payload_mandatory_fields()
30623062
{
30633063
var account = "40702810138250123017";
30643064
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 = "ОАО | \"БАНК\"";
30663128
var name = "ООО «Три кита»";
30673129
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);
30693131

30703132
generator
30713133
.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}$");
30733207
}
30743208

30753209
[Fact]
@@ -3088,35 +3222,157 @@ public void russiapayment_generator_can_generate_payload_some_additional_fields(
30883222
Sum = "125000"
30893223
};
30903224

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);
30923288

30933289
generator
30943290
.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|");
30963322
}
30973323

30983324
[Fact]
30993325
[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()
31013327
{
31023328
var account = "40702810138250123017";
31033329
var bic = "044525225";
31043330
var bankName = "=ОАО \"БАНК\"";
31053331
var name = "ООО «Три кита»";
31063332
var correspAcc = "30101810400000000225";
31073333
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"
31133369
};
31143370

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);
31163372

31173373
generator
31183374
.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=ГИБДД_налоги_пошлины_бюджетные_платежи|");
31203376
}
31213377
}
31223378
}

0 commit comments

Comments
 (0)