2021-02-06 16:13:47 +01:00
# 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 ) :
2021-03-04 17:47:13 +01:00
ussd_menu = UssdMenu . find_by_name ( name = ' standard_pin_authorization ' )
2021-02-06 16:13:47 +01:00
response = process_pin_authorization (
display_key = ussd_menu . get ( ' display_key ' ) ,
user = create_activated_user
)
assert response == ' CON Please enter your PIN. \n 0. 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. \n 0. 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. \n Please enter your PIN to confirm. \n 0. 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. \n Your Sarafu-Network balances is: 50.00 \n 00. Back \n 99. 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. \n 00. Back \n 99. Exit '