cic-internal-integration/apps/cic-ussd/tests/cic_ussd/state_machine/logic/test_pin_logic.py

102 lines
4.6 KiB
Python

# standard imports
import json
# external imports
import pytest
# local imports
from cic_ussd.cache import get_cached_data
from cic_ussd.encoder import check_password_hash, create_password_hash
from cic_ussd.state_machine.logic.pin import (complete_pin_change,
is_valid_pin,
is_valid_new_pin,
is_authorized_pin,
is_blocked_pin,
is_locked_account,
pins_match,
save_initial_pin_to_session_data)
def test_complete_pin_change(activated_account, cached_ussd_session, init_database):
state_machine_data = ('1212', cached_ussd_session.to_json(), activated_account, init_database)
assert activated_account.password_hash is not None
cached_ussd_session.set_data('initial_pin', create_password_hash('1212'))
complete_pin_change(state_machine_data)
assert activated_account.verify_password('1212') is True
@pytest.mark.parametrize('user_input, expected', [
('4562', True),
('jksu', False),
('ij45', False),
])
def test_is_valid_pin(activated_account, expected, generic_ussd_session, init_database, user_input):
state_machine_data = (user_input, generic_ussd_session, activated_account, init_database)
assert is_valid_pin(state_machine_data) is expected
@pytest.mark.parametrize('user_input', [
'1212',
'0000'
])
def test_pins_match(activated_account, cached_ussd_session, init_cache, init_database, user_input):
state_machine_data = (user_input, cached_ussd_session.to_json(), activated_account, init_database)
cached_ussd_session.set_data('initial_pin', create_password_hash(user_input))
assert pins_match(state_machine_data) is True
def test_save_initial_pin_to_session_data(activated_account,
cached_ussd_session,
celery_session_worker,
init_cache,
init_database,
persisted_ussd_session,
set_fernet_key):
state_machine_data = ('1212', cached_ussd_session.to_json(), activated_account, init_database)
save_initial_pin_to_session_data(state_machine_data)
ussd_session = get_cached_data(cached_ussd_session.external_session_id)
ussd_session = json.loads(ussd_session)
assert check_password_hash('1212', ussd_session.get('data')['initial_pin'])
cached_ussd_session.set_data('some_key', 'some_value')
state_machine_data = ('1212', cached_ussd_session.to_json(), activated_account, init_database)
save_initial_pin_to_session_data(state_machine_data)
ussd_session = get_cached_data(cached_ussd_session.external_session_id)
ussd_session = json.loads(ussd_session)
assert ussd_session.get('data')['some_key'] == 'some_value'
@pytest.mark.parametrize('user_input, expected_result', [
('1212', False),
('0000', True)
])
def test_is_authorized_pin(activated_account, cached_ussd_session, expected_result, init_database, user_input):
state_machine_data = (user_input, cached_ussd_session.to_json(), activated_account, init_database)
assert is_authorized_pin(state_machine_data) is expected_result
def test_is_not_blocked_pin(activated_account, cached_ussd_session, init_database):
state_machine_data = ('', cached_ussd_session.to_json(), activated_account, init_database)
assert is_blocked_pin(state_machine_data) is False
def test_is_blocked_pin(cached_ussd_session, init_database, pin_blocked_account):
state_machine_data = ('user_input', cached_ussd_session, pin_blocked_account, init_database)
assert is_blocked_pin(state_machine_data) is True
def test_is_locked_account(activated_account, generic_ussd_session, init_database, pin_blocked_account):
state_machine_data = ('', generic_ussd_session, activated_account, init_database)
assert is_locked_account(state_machine_data) is False
state_machine_data = ('', generic_ussd_session, pin_blocked_account, init_database)
assert is_locked_account(state_machine_data) is True
@pytest.mark.parametrize('user_input, expected_result', [
('1212', True),
('0000', False)
])
def test_is_valid_new_pin(activated_account, cached_ussd_session, expected_result, init_database, user_input):
state_machine_data = (user_input, cached_ussd_session.to_json(), activated_account, init_database)
assert is_valid_new_pin(state_machine_data) is expected_result