diff --git a/requirements.txt b/requirements.txt index 757931f..8318237 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ tornado==6.0.4 isodate==0.6.0 pytest==5.4.1 +schwifty==2020.9.0 diff --git a/validators/test_validators.py b/validators/test_validators.py new file mode 100644 index 0000000..3094007 --- /dev/null +++ b/validators/test_validators.py @@ -0,0 +1,59 @@ +from validators import mandatory, empty, iso_date, valid_iban, valid_bic, valid_money_amount + + +def test_mandatory(): + assert mandatory("Foo") == True + assert mandatory("Foo Bar") == True + assert mandatory("1970-01-01") == True + assert mandatory("") == False + assert mandatory(None) == False + + +def test_empty(): + assert empty(None) == True + assert empty("") == True + assert empty(" ") == False + assert empty("Foo") == False + assert empty("1970-01-01") == False + + +def test_iso_date(): + assert iso_date("1970-01-01") == True + assert iso_date("1970-1-1") == True + assert iso_date("70-01-01") == False + assert iso_date("1970/01/01") == False + assert iso_date("1.1.1970") == False + assert iso_date("01.01.1970") == False + assert iso_date("") == False + assert iso_date(None) == False + + +def test_valid_iban(): + assert valid_iban("DE89 3704 0044 0532 0130 00") == True + assert valid_iban("DE89370400440532013000") == True + assert valid_iban("DX89 3704 0044 0532 0130 00") == False + assert valid_iban("DE99 3704 0044 0532 0130 00") == False + assert valid_iban("") == False + assert valid_iban(None) == False + assert valid_iban("DE89 3704 0044 0532 0130 00".split()) == False + + +def test_valid_bic(): + assert valid_bic("PBNKDEFFXXX") == True + assert valid_bic("PBNKDXFFXXX") == False + assert valid_bic("PBNKDXFFXXXX") == False + assert valid_bic("PBN1DXFFXXX") == False + assert valid_bic("") == False + assert valid_bic(None) == False + assert valid_bic("PBNKDEFFXXX".split()) == False + + +def test_valid_money_amount(): + assert valid_money_amount(None) == False + assert valid_money_amount("") == False + assert valid_money_amount("0,00") == False + assert valid_money_amount("13,37") == False + assert valid_money_amount("0") == True + assert valid_money_amount("0.00") == True + assert valid_money_amount("13") == True + assert valid_money_amount("13.37") == True \ No newline at end of file diff --git a/validators/validators.py b/validators/validators.py new file mode 100644 index 0000000..8ce199d --- /dev/null +++ b/validators/validators.py @@ -0,0 +1,54 @@ +import datetime +from schwifty import IBAN, BIC + + +def mandatory(field: str) -> bool: + return bool(field) + + +def empty(field: str) -> bool: + return not bool(field) + + +def iso_date(field: str) -> bool: + if not field: + return False + try: + datetime.datetime.strptime(field, "%Y-%m-%d") + return True + except ValueError: + return False + + +def valid_iban(field: str) -> bool: + if not field: + return False + if not type(field) == str: + return False + try: + IBAN(field) + return True + except ValueError: + return False + + +def valid_bic(field: str) -> bool: + if not field: + return False + if not type(field) == str: + return False + try: + BIC(field) + return True + except ValueError: + return False + + +def valid_money_amount(field: str) -> bool: + if not field: + return False + try: + float(field) + return True + except (ValueError, TypeError): + return False \ No newline at end of file