diff --git a/pay_by_square.py b/pay_by_square.py index b37ff8c..5b623b6 100644 --- a/pay_by_square.py +++ b/pay_by_square.py @@ -1,6 +1,7 @@ import lzma import binascii -from datetime import datetime +from typing import Optional +from datetime import datetime, date def generate( @@ -8,6 +9,7 @@ def generate( amount: float, iban: str, swift: str = '', + date: Optional[date] = None, beneficiary_name: str = '', currency: str = 'EUR', variable_symbol: str = '', @@ -19,8 +21,13 @@ def generate( ) -> str: '''Generate pay-by-square code that can by used to create QR code for banking apps + + When date is not provided current date will be used. ''' + if date is None: + date = datetime.now() + # 1) create the basic data structure data = '\t'.join( [ @@ -29,7 +36,7 @@ def generate( '1', # simple payment f'{amount:.2f}', currency, - datetime.now().strftime('%Y%m%d'), + date.strftime('%Y%m%d'), variable_symbol, constant_symbol, specific_symbol, diff --git a/tests.py b/tests.py index 9fd3723..36ba262 100644 --- a/tests.py +++ b/tests.py @@ -1,48 +1,65 @@ +from datetime import date from unittest import TestCase, main from pay_by_square import generate class TestPayBySquare(TestCase): - def test(self): + def test_amount_iban(self): self.assertEqual( - generate(amount=1, iban='SK7700000000000000000000'), - '00044000DULVORPA054O3Q3S5TOTRH7S1PGF5J19UGS6EJQA7JEIN75VVFUSNSV3' - '9T51EA4H07727VVURLU00', + generate(amount=1, iban='SK7700000000000000000000', date=date(2020, 7, 5)), + '000440007S3VT0DFSETNDU5J8KF4EI1MT7B3BBH3P91D830QDBA6IRPF97451V4U' + '11PHMI423IDK7VVU5P800', ) + + def test_amount_iban_swift(self): self.assertEqual( - generate(amount=1, iban='SK7700000000000000000000', swift='FIOZSKBAXXX'), - '0004Q000D6VLDPM892PSOAVJ4R1ATTVSV98NUI3DFIPR7D4QQ4KONF90F526KCRO' - 'I8BLQ82MPPSR0USOHGD9NAC1K1N014FVVUMDPG00', + generate( + amount=1, + iban='SK7700000000000000000000', + swift='FIOZSKBAXXX', + date=date(2020, 7, 5), + ), + '0004Q000DS03UHKLF59M2IK7FUCM3SBUK5FM62CCKLR4QOKAJSBPPL4ND4R66LSI' + '1K92GURM0FH5E3DASNBTNAKASV94PB5VVU1BRO00', ) + + def test_amount_iban_symbols(self): self.assertEqual( generate( amount=1, iban='SK7700000000000000000000', + date=date(2020, 7, 5), variable_symbol='11', constant_symbol='22', specific_symbol='33', ), - '0004G0008OV1L1JQP2PSOAVJ4R1ATTVSV98NUI3DFIPR7D7LM1EV7HET0A1P82ES' - 'R1S31L45TSU1KEC8QMSRJDVVHRLVVVS3E5000', + '0004G000EIUCQ7TO82O7GRAEMT06773UPLKOEC76BV3NBBNP7HPVSSJHUNVFBD7G' + '6DAAMTDL4B8ND4D06QCNS7PHMPBVVVROGU000', ) + + def test_amount_iban_symbols_beneficiary_name(self): self.assertEqual( generate( amount=1, iban='SK7700000000000000000000', + date=date(2020, 7, 5), variable_symbol='11', constant_symbol='22', specific_symbol='33', beneficiary_name='Foo', ), - '0004M0009KHOVQ8LKP6SS5PM8L1RE2O72SM9D7B0J1OEIB5IFNPSCAO1QQNHFMAC' - 'KQB05H5SVO5TFHJB0A365357DHD40O3ORU1FVTIPFO00', + '0004M0006MISSBD0SBV1135OEDE05KA7IM2GBI0U0M5LHD5LIEP7D9CJO6T8GQDF' + 'UKCL7TOEGN8TDOVAJ2GL85IOEA8OV3O1AQOFVU3JKS00', ) + + def test_pass_all_arguments(self): self.assertEqual( generate( amount=1, iban='SK7700000000000000000000', swift='FIOZSKBAXXX', + date=date(2020, 7, 5), variable_symbol='11', constant_symbol='22', specific_symbol='33', @@ -51,9 +68,9 @@ def test(self): beneficiary_address_2='address 2', note='money', ), - '0006Q000AEC7VBLGJROL8RIVGVK02C4MMLA7T6LKCVDOIJFK1QUJ4DS1J52UEIP5' - 'IVSLPQ2MG18S424V3SE9403C9GLRN4QNH6EQV7T0G4M143O82OO87MLAL2K6MFO3' - '3T7ET83B3IM8AS7VVTIIR000', + '0006Q0006GO7VIPNP2PPLDV1MO04PTB6C4OSM4KU3JKSDNJLJ0GBAT9GTI9DD7MF' + 'QKGMLI4RD7996S1K78MKT8S0F46HK5TF6A6GP881BBMM66JVFMBBSM9KQRM2TN2V' + 'RABUV7KFD22BFFIVVTFKO000', )