# standard imports import json # third-party imports import pytest # local imports from cic_ussd.db.models.ussd_session import UssdSession from cic_ussd.redis import InMemoryStore from cic_ussd.session.ussd_session import UssdSession as InMemoryUssdSession @pytest.fixture(scope='function') def ussd_session_data(): return { 'external_session_id': 'AT974186', 'service_code': '*483*46#', 'msisdn': '+25498765432', 'user_input': '1', 'state': 'initial_language_selection', 'session_data': {}, 'version': 2 } @pytest.fixture(scope='function') def create_in_redis_ussd_session(ussd_session_data, init_redis_cache): external_session_id = ussd_session_data.get('external_session_id') InMemoryUssdSession.redis_cache = InMemoryStore.cache InMemoryUssdSession.redis_cache.set(external_session_id, json.dumps(ussd_session_data)) return InMemoryUssdSession.redis_cache @pytest.fixture(scope='function') def get_in_redis_ussd_session(ussd_session_data, create_in_redis_ussd_session): external_session_id = ussd_session_data.get('external_session_id') ussd_session_data = create_in_redis_ussd_session.get(external_session_id) ussd_session_data = json.loads(ussd_session_data) # remove version from ussd_session data because the ussd_session object does not expect a version at initialization del ussd_session_data['version'] ussd_session = InMemoryUssdSession(**{key: value for key, value in ussd_session_data.items()}) ussd_session.version = ussd_session_data.get('version') return ussd_session @pytest.fixture(scope='function') def create_in_db_ussd_session(init_database, ussd_session_data): ussd_session_data['session_data'] = {} ussd_session = UssdSession(**{key: value for key, value in ussd_session_data.items()}) init_database.add(ussd_session) init_database.commit() return ussd_session