102 lines
4.6 KiB
Python
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
|
||
|
|