cic-internal-integration/apps/cic-ussd/tests/cic_ussd/db/models/test_ussd_session.py

78 lines
2.7 KiB
Python

# standard imports
import os
# third party imports
import pytest
from sqlalchemy import desc
# local imports
from cic_ussd.db.models.ussd_session import UssdSession
from cic_ussd.error import VersionTooLowError
def test_ussd_session(activated_account, init_database, init_cache, load_config):
valid_service_codes = load_config.get('USSD_SERVICE_CODE').split(",")
ussd_session = UssdSession(
external_session_id=os.urandom(20).hex(),
service_code=valid_service_codes[0],
msisdn=activated_account.phone_number,
user_input='1',
state='start',
data={},
version=1,
)
init_database.add(ussd_session)
init_database.commit()
ussd_session.set_data(key='foo', session=init_database, value='bar')
assert ussd_session.get_data('foo') == 'bar'
ussd_session.update('3', 'next', 2, init_database)
assert ussd_session.version == 2
init_database.add(ussd_session)
init_database.commit()
assert UssdSession.has_record_for_phone_number(activated_account.phone_number, init_database) is True
def test_version_too_low_error(activated_account, init_database, init_cache):
with pytest.raises(VersionTooLowError) as e:
session = UssdSession(
external_session_id='AT38745',
service_code='*123#',
msisdn=activated_account.phone_number,
user_input='1',
state='start',
data={},
version=3,
)
assert session.check_version(1)
assert session.check_version(3)
assert str(e.value) == 'New session version number is not greater than last saved version!'
def test_set_data(init_database, ussd_session_data, persisted_ussd_session):
assert persisted_ussd_session.data == {}
for key, value in ussd_session_data.items():
persisted_ussd_session.set_data(key, init_database, value)
init_database.commit()
assert persisted_ussd_session.get_data('recipient') == ussd_session_data.get('recipient')
def test_has_record_for_phone_number(activated_account, init_database, persisted_ussd_session):
ussd_session = UssdSession.has_record_for_phone_number(activated_account.phone_number, init_database)
assert ussd_session is not None
def test_last_ussd_session(init_database, ussd_session_traffic):
assert len(init_database.query(UssdSession).all()) >= 5
ussd_session = init_database.query(UssdSession).order_by(desc(UssdSession.created)).first()
phone_number = ussd_session.msisdn
assert UssdSession.last_ussd_session(phone_number, init_database).id == ussd_session.id
def test_persisted_to_json(persisted_ussd_session):
assert isinstance(persisted_ussd_session, UssdSession)
assert isinstance(persisted_ussd_session.to_json(), dict)