1e7fff0133
- Renames s_assemble to s_brief - Link s_local to s_brief
131 lines
5.5 KiB
Python
131 lines
5.5 KiB
Python
# local imports
|
|
from cic_ussd.menu.ussd_menu import UssdMenu
|
|
from cic_ussd.processor import (custom_display_text,
|
|
next_state,
|
|
process_request,
|
|
process_pin_authorization,
|
|
process_transaction_pin_authorization,
|
|
process_exit_insufficient_balance,
|
|
process_exit_successful_transaction)
|
|
|
|
|
|
def test_process_pin_authorization(create_activated_user,
|
|
load_ussd_menu,
|
|
set_locale_files):
|
|
ussd_menu = UssdMenu.find_by_name(name='standard_pin_authorization')
|
|
response = process_pin_authorization(
|
|
display_key=ussd_menu.get('display_key'),
|
|
user=create_activated_user
|
|
)
|
|
assert response == 'CON Please enter your PIN.\n0. Back'
|
|
|
|
user_with_one_failed_pin_attempt = create_activated_user
|
|
user_with_one_failed_pin_attempt.failed_pin_attempts = 1
|
|
alt_response = process_pin_authorization(
|
|
display_key=ussd_menu.get('display_key'),
|
|
user=user_with_one_failed_pin_attempt,
|
|
)
|
|
assert alt_response == 'CON Please enter your PIN. You have 2 attempts remaining.\n0. Back'
|
|
|
|
|
|
def test_process_transaction_pin_authorization(create_activated_user,
|
|
create_in_db_ussd_session,
|
|
load_ussd_menu,
|
|
set_locale_files):
|
|
session_data = {
|
|
'recipient_phone_number': '+254700000000',
|
|
}
|
|
ussd_session = create_in_db_ussd_session.to_json()
|
|
ussd_session['session_data'] = session_data
|
|
ussd_session['user_input'] = '1*0700000000*120'
|
|
ussd_menu = UssdMenu.find_by_name(name='transaction_pin_authorization')
|
|
response = process_transaction_pin_authorization(
|
|
display_key=ussd_menu.get('display_key'),
|
|
user=create_activated_user,
|
|
ussd_session=ussd_session
|
|
)
|
|
assert response == 'CON +254700000000 will receive 120.00 SRF from +25498765432.\nPlease enter your PIN to confirm.\n0. Back'
|
|
|
|
|
|
def test_process_request_for_pending_user(load_ussd_menu, create_pending_user):
|
|
expected_menu = process_request(user_input="", user=create_pending_user)
|
|
assert expected_menu == UssdMenu.find_by_name(name='initial_language_selection')
|
|
|
|
|
|
def test_processor_request_for_activated_user(load_ussd_menu, create_activated_user):
|
|
expected_menu = process_request(user_input="", user=create_activated_user)
|
|
assert expected_menu == UssdMenu.find_by_name(name="start")
|
|
|
|
|
|
def test_next_state(load_data_into_state_machine, load_ussd_menu, create_in_db_ussd_session, create_pending_user):
|
|
assert create_in_db_ussd_session.state == "initial_language_selection"
|
|
successive_state = next_state(
|
|
ussd_session=create_in_db_ussd_session.to_json(),
|
|
user=create_pending_user,
|
|
user_input="1"
|
|
)
|
|
assert successive_state == "initial_pin_entry"
|
|
|
|
|
|
def test_custom_display_text(create_activated_user,
|
|
get_in_redis_ussd_session,
|
|
load_ussd_menu,
|
|
set_locale_files):
|
|
ussd_session = get_in_redis_ussd_session
|
|
user = create_activated_user
|
|
ussd_menu = UssdMenu.find_by_name(name='exit_invalid_request')
|
|
english_translation = custom_display_text(
|
|
display_key=ussd_menu.get('display_key'),
|
|
menu_name=ussd_menu.get('name'),
|
|
user=user,
|
|
ussd_session=ussd_session
|
|
)
|
|
user.preferred_language = 'sw'
|
|
swahili_translation = custom_display_text(
|
|
display_key=ussd_menu.get('display_key'),
|
|
menu_name=ussd_menu.get('name'),
|
|
user=user,
|
|
ussd_session=ussd_session
|
|
)
|
|
assert swahili_translation == 'END Chaguo si sahihi.'
|
|
assert english_translation == 'END Invalid request.'
|
|
|
|
|
|
def test_process_exit_insufficient_balance(
|
|
create_valid_tx_recipient,
|
|
load_ussd_menu,
|
|
mock_balance,
|
|
set_locale_files,
|
|
ussd_session_data):
|
|
mock_balance(50)
|
|
ussd_session_data['user_input'] = f'1*{create_valid_tx_recipient.phone_number}*75'
|
|
ussd_session_data['session_data'] = {'recipient_phone_number': create_valid_tx_recipient.phone_number}
|
|
ussd_session_data['display_key'] = 'exit_insufficient_balance'
|
|
ussd_menu = UssdMenu.find_by_name(name='exit_insufficient_balance')
|
|
response = process_exit_insufficient_balance(
|
|
display_key=ussd_menu.get('display_key'),
|
|
user=create_valid_tx_recipient,
|
|
ussd_session=ussd_session_data
|
|
)
|
|
assert response == 'CON Payment of 75.00 SRF to +25498765432 has failed due to insufficent balance.\nYour Sarafu-Network balances is: 50.00\n00. Back\n99. Exit'
|
|
|
|
|
|
def test_process_exit_successful_transaction(
|
|
create_valid_tx_recipient,
|
|
create_valid_tx_sender,
|
|
load_ussd_menu,
|
|
set_locale_files,
|
|
ussd_session_data):
|
|
ussd_session_data['session_data'] = {
|
|
'recipient_phone_number': create_valid_tx_recipient.phone_number,
|
|
'transaction_amount': 75
|
|
}
|
|
ussd_session_data['display_key'] = 'exit_successful_transaction'
|
|
ussd_menu = UssdMenu.find_by_name(name='exit_successful_transaction')
|
|
response = process_exit_successful_transaction(
|
|
display_key=ussd_menu.get('display_key'),
|
|
user=create_valid_tx_sender,
|
|
ussd_session=ussd_session_data
|
|
)
|
|
assert response == 'CON Your request has been sent. +25498765432 will receive 75.00 SRF from +25498765433.\n00. Back\n99. Exit'
|