test_be_bis.doctest - more detailed doctests for stdnum.be.bis module

Copyright (C) 2023 Jeff Horemans

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA


This file contains more detailed doctests for the stdnum.be.bis module. It
tries to test more corner cases and detailed functionality that is not
really useful as module documentation.

>>> from stdnum.be import bis


Extra tests for getting birth date, year and/or month


>>> bis.get_birth_date('75.46.08-980.95')
datetime.date(1975, 6, 8)
>>> bis.get_birth_year('75.46.08-980.95')
1975
>>> bis.get_birth_month('75.46.08-980.95')
6
>>> bis.get_birth_date('01 49 07 001 85')
datetime.date(2001, 9, 7)
>>> bis.get_birth_year('01 49 07 001 85')
2001
>>> bis.get_birth_month('01 49 07 001 85')
9
>>> bis.get_birth_date('12345678901')
Traceback (most recent call last):
    ...
InvalidChecksum: ...
>>> bis.get_birth_year('12345678901')
Traceback (most recent call last):
    ...
InvalidChecksum: ...
>>> bis.get_birth_month('12345678901')
Traceback (most recent call last):
    ...
InvalidChecksum: ...
>>> bis.get_birth_date('00400100155')  # Exact date of birth unknown (fictitious date case 1900-00-01)
>>> bis.get_birth_year('00400100155')
>>> bis.get_birth_month('00400100155')
>>> bis.get_birth_date('00200100112')  # Birth date and gender unknown
>>> bis.get_birth_year('00200100112')
>>> bis.get_birth_month('00200100112')
>>> bis.get_birth_date('00400100184')  # Exact date of birth unknown (fictitious date case 2000-00-01)
>>> bis.get_birth_year('00400100184')
>>> bis.get_birth_month('00400100184')
>>> bis.get_birth_date('00200100141')  # Birth date and gender unknown
>>> bis.get_birth_year('00200100141')
>>> bis.get_birth_month('00200100141')
>>> bis.get_birth_date('00400000117')  # Only birth year known (2000-00-00)
>>> bis.get_birth_year('00400000117')
2000
>>> bis.get_birth_month('00400000117')
>>> bis.get_birth_date('00200000171')  # Only birth year known and gender unknown
>>> bis.get_birth_year('00200000171')
2000
>>> bis.get_birth_month('00200000171')
>>> bis.get_birth_date('00410000124')  # Only birth year and month known (2000-01-00)
>>> bis.get_birth_year('00410000124')
2000
>>> bis.get_birth_month('00410000124')
1
>>> bis.get_birth_date('00210000178')  # Only birth year and month known (2000-01-00) and gender unknown
>>> bis.get_birth_year('00210000178')
2000
>>> bis.get_birth_month('00210000178')
1
>>> bis.get_birth_date('85473500193')  # Unknown day of birth date (35)
>>> bis.get_birth_year('85473500193')
1985
>>> bis.get_birth_month('85473500193')
7
>>> bis.get_birth_date('85273500150')  # Unknown day of birth date (35) and gender unknown
>>> bis.get_birth_year('85273500150')
1985
>>> bis.get_birth_month('85273500150')
7
>>> bis.get_birth_date('85533000191')  # Invalid month (13)
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> bis.get_birth_year('85533000191')
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> bis.get_birth_month('85533000191')
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> bis.get_birth_date('85333000148')
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> bis.get_birth_year('85333000148')
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> bis.get_birth_month('85333000148')
Traceback (most recent call last):
    ...
InvalidComponent: ...


Extra tests for getting gender.

>>> bis.get_gender('75.46.08-980.95')
'F'
>>> bis.get_gender('75.26.08-980.52')  # Gender unknown (month incremented by 20)
>>> bis.get_gender('85473500193')
'M'
>>> bis.get_gender('85273500150')


A NN should not be considered a valid BIS number.

>>> bis.validate('00000100195')
Traceback (most recent call last):
    ...
InvalidComponent: ...