83 lines
3.7 KiB
Python
83 lines
3.7 KiB
Python
# standard imports
|
|
import datetime
|
|
import json
|
|
|
|
# external imports
|
|
import pytest
|
|
from chainlib.hash import strip_0x
|
|
from cic_types.models.person import get_contact_data_from_vcard
|
|
|
|
# local imports
|
|
from cic_ussd.account.metadata import get_cached_preferred_language
|
|
from cic_ussd.metadata import PersonMetadata
|
|
from cic_ussd.processor.util import (latest_input,
|
|
parse_person_metadata,
|
|
resume_last_ussd_session,
|
|
ussd_menu_list)
|
|
from cic_ussd.translation import translation_for
|
|
|
|
|
|
# test imports
|
|
|
|
|
|
@pytest.mark.parametrize('user_input, expected_value', [
|
|
('1*9*6*7', '7'),
|
|
('1', '1'),
|
|
('', '')
|
|
])
|
|
def test_latest_input(user_input, expected_value):
|
|
assert latest_input(user_input) == expected_value
|
|
|
|
|
|
def test_parse_person_metadata(activated_account, cache_person_metadata, cache_preferences):
|
|
identifier = bytes.fromhex(strip_0x(activated_account.blockchain_address))
|
|
person_metadata = PersonMetadata(identifier)
|
|
cached_person_metadata = person_metadata.get_cached_metadata()
|
|
person_metadata = json.loads(cached_person_metadata)
|
|
preferred_language = get_cached_preferred_language(activated_account.blockchain_address)
|
|
display_key = 'ussd.display_person_metadata'
|
|
parsed_person_metadata = parse_person_metadata(cached_person_metadata,
|
|
display_key,
|
|
preferred_language)
|
|
contact_data = get_contact_data_from_vcard(person_metadata.get('vcard'))
|
|
full_name = f'{contact_data.get("given")} {contact_data.get("family")}'
|
|
date_of_birth = person_metadata.get('date_of_birth')
|
|
year_of_birth = date_of_birth.get('year')
|
|
present_year = datetime.datetime.now().year
|
|
age = present_year - year_of_birth
|
|
gender = person_metadata.get('gender')
|
|
products = ', '.join(person_metadata.get('products'))
|
|
location = person_metadata.get('location').get('area_name')
|
|
assert parsed_person_metadata == translation_for(key=display_key,
|
|
preferred_language=preferred_language,
|
|
full_name=full_name,
|
|
age=age,
|
|
gender=gender,
|
|
location=location,
|
|
products=products)
|
|
|
|
|
|
@pytest.mark.parametrize('last_state, expected_menu_name', [
|
|
('account_creation_prompt', 'start'),
|
|
('enter_transaction_recipient', 'enter_transaction_recipient')
|
|
])
|
|
def test_resume_last_ussd_session(expected_menu_name, last_state, load_ussd_menu):
|
|
assert resume_last_ussd_session(last_state).get('name') == expected_menu_name
|
|
|
|
|
|
def test_ussd_menu_list(activated_account, cache_preferences, load_ussd_menu, set_locale_files):
|
|
blockchain_address = activated_account.blockchain_address
|
|
preferred_language = get_cached_preferred_language(blockchain_address)
|
|
fallback = translation_for('helpers.no_transaction_history', preferred_language)
|
|
menu_list_sets = ['1. FII 50.0', '2. GFT 60.0', '3. DET 49.99']
|
|
split = 3
|
|
menu_list = ussd_menu_list(fallback=fallback, menu_list=menu_list_sets, split=split)
|
|
menu_list_sets = [menu_list_sets[item:item + split] for item in range(0, len(menu_list), split)]
|
|
menu_list_reprs = []
|
|
for i in range(split):
|
|
try:
|
|
menu_list_reprs.append(''.join(f'{list_set_item}\n' for list_set_item in menu_list_sets[i]).rstrip('\n'))
|
|
except IndexError:
|
|
menu_list_reprs.append(fallback)
|
|
assert menu_list == menu_list_reprs
|