コード例 #1
0
class SessionStoreTest(AppContextTestCase):
    def setUp(self):
        super().setUp()
        self._app.permanent_session_lifetime = timedelta(seconds=1)
        self.session_store = SessionStore('user_ik', 'pepper')
        self.session_data = SessionData(tx_id='tx_id',
                                        eq_id='eq_id',
                                        form_type='form_type',
                                        period_str='period_str',
                                        language_code=None,
                                        survey_url=None,
                                        ru_name='ru_name',
                                        ru_ref='ru_ref',
                                        case_id='case_id')

    def test_no_session(self):
        with self._app.test_request_context():
            self.assertIsNone(self.session_store.user_id)
            self.assertIsNone(self.session_store.session_data)

    def test_create(self):
        with self._app.test_request_context():
            self.session_store.create('eq_session_id', 'test',
                                      self.session_data)
            self.assertEqual('eq_session_id', self.session_store.eq_session_id)
            self.assertEqual('test', self.session_store.user_id)
            self.assertEqual(self.session_data,
                             self.session_store.session_data)

    def test_save(self):
        with self._app.test_request_context():
            self.session_store.create('eq_session_id', 'test',
                                      self.session_data).save()
            session_store = SessionStore('user_ik', 'pepper', 'eq_session_id')
            self.assertEqual(session_store.session_data.tx_id, 'tx_id')

    def test_delete(self):
        with self._app.test_request_context():
            self.session_store.create('eq_session_id', 'test',
                                      self.session_data).save()
            self.assertEqual('test', self.session_store.user_id)
            self.session_store.delete()
            self.assertEqual(self.session_store.user_id, None)

    def test_add_data_to_session(self):
        with self._app.test_request_context():
            self.session_store.create('eq_session_id', 'test',
                                      self.session_data).save()
            current_time = datetime.utcnow().isoformat()
            self.session_store.session_data.submitted_time = current_time
            self.session_store.save()

            session_store = SessionStore('user_ik', 'pepper', 'eq_session_id')
            self.assertEqual(session_store.session_data.submitted_time,
                             current_time)

    def test_should_not_delete_when_no_session(self):
        with self.app_request_context('/status'):
            with patch('app.data_model.models.db.session.delete') as delete:

                # Call clear with a valid user_id but no session in database
                self.session_store.delete()

                # No database calls should have been made
                self.assertFalse(delete.called)

    def test_session_store_ignores_new_values_in_session_data(self):
        session_data = SessionData(tx_id='tx_id',
                                   eq_id='eq_id',
                                   form_type='form_type',
                                   period_str='period_str',
                                   language_code=None,
                                   survey_url=None,
                                   ru_name='ru_name',
                                   ru_ref='ru_ref',
                                   case_id='case_id')

        session_data.additional_value = 'some cool new value you do not know about yet'

        with self._app.test_request_context():
            self.session_store.create('eq_session_id', 'test',
                                      session_data).save()

            session_store = SessionStore('user_ik', 'pepper', 'eq_session_id')

            self.assertFalse(
                hasattr(session_store.session_data, 'additional_value'))

    def test_session_store_ignores_multiple_new_values_in_session_data(self):
        session_data = SessionData(tx_id='tx_id',
                                   eq_id='eq_id',
                                   form_type='form_type',
                                   period_str='period_str',
                                   language_code=None,
                                   survey_url=None,
                                   ru_name='ru_name',
                                   ru_ref='ru_ref',
                                   case_id='case_id')

        session_data.additional_value = 'some cool new value you do not know about yet'
        session_data.second_additional_value = 'some other not so cool value'

        with self._app.test_request_context():
            self.session_store.create('eq_session_id', 'test',
                                      session_data).save()

            session_store = SessionStore('user_ik', 'pepper', 'eq_session_id')

            self.assertFalse(
                hasattr(session_store.session_data, 'additional_value'))
            self.assertFalse(
                hasattr(session_store.session_data, 'second_additional_value'))

    def test_session_store_stores_trading_as_value_if_present(self):
        session_data = SessionData(tx_id='tx_id',
                                   eq_id='eq_id',
                                   form_type='form_type',
                                   period_str='period_str',
                                   language_code=None,
                                   survey_url=None,
                                   ru_name='ru_name',
                                   ru_ref='ru_ref',
                                   trad_as='trading_as',
                                   case_id='case_id')
        with self._app.test_request_context():
            self.session_store.create('eq_session_id', 'test',
                                      session_data).save()

            session_store = SessionStore('user_ik', 'pepper', 'eq_session_id')

            self.assertTrue(hasattr(session_store.session_data, 'trad_as'))

    def test_session_store_stores_none_for_trading_as_if_not_present(self):
        session_data = SessionData(tx_id='tx_id',
                                   eq_id='eq_id',
                                   form_type='form_type',
                                   period_str='period_str',
                                   language_code=None,
                                   survey_url=None,
                                   ru_name='ru_name',
                                   ru_ref='ru_ref',
                                   case_id='case_id')
        with self._app.test_request_context():
            self.session_store.create('eq_session_id', 'test',
                                      session_data).save()

            session_store = SessionStore('user_ik', 'pepper', 'eq_session_id')

            self.assertIsNone(session_store.session_data.trad_as)

    def test_session_store_reads_data_saved_without_trading_as_but_read_expecting_trading_as(
            self):
        old_session_data = SessionData(tx_id='tx_id',
                                       eq_id='eq_id',
                                       form_type='form_type',
                                       period_str='period_str',
                                       language_code=None,
                                       survey_url=None,
                                       ru_name='ru_name',
                                       ru_ref='ru_ref',
                                       case_id='case_id')
        delattr(old_session_data,
                'trad_as')  # Make class look like old style class
        with self._app.test_request_context():
            self.session_store.create('eq_session_id', 'test',
                                      old_session_data).save()

            session_store = SessionStore('user_ik', 'pepper', 'eq_session_id')

            self.assertIsNone(session_store.session_data.trad_as)

    def test_session_store_reads_data_saved_with_trading_as_but_read_not_expecting_trading_as(
            self):
        """This test simulates the case where a session is created using a new session store that holds trading as
            but this gets read in an old session that does NOT support trading as """

        original_loads_func = json.loads

        class OldSessionData:
            """class representing what old sessions expect ( no trading as) """
            def __init__(self,
                         tx_id,
                         eq_id,
                         form_type,
                         period_str,
                         language_code,
                         survey_url,
                         ru_name,
                         ru_ref,
                         case_id,
                         case_ref=None,
                         account_service_url=None,
                         submitted_time=None,
                         **_):
                self.tx_id = tx_id
                self.eq_id = eq_id
                self.form_type = form_type
                self.period_str = period_str
                self.language_code = language_code
                self.survey_url = survey_url
                self.ru_name = ru_name
                self.ru_ref = ru_ref
                self.submitted_time = submitted_time
                self.case_id = case_id
                self.case_ref = case_ref
                self.account_service_url = account_service_url

        def old_json_loader(raw, object_hook):  # pylint: disable=unused-argument
            """replacement for json.loads to decode to old format ( no trading as) """

            old_data = original_loads_func(
                raw, object_hook=lambda d: OldSessionData(
                    **d))  # call json.loads ,hook pointing to an old class
            return old_data

        session_data = SessionData(tx_id='tx_id',
                                   eq_id='eq_id',
                                   form_type='form_type',
                                   period_str='period_str',
                                   language_code=None,
                                   survey_url=None,
                                   ru_name='ru_name',
                                   ru_ref='ru_ref',
                                   trad_as='trading_as_name',
                                   case_id='case_id')
        with self._app.test_request_context():

            with patch('app.data_model.session_store.json.loads',
                       old_json_loader
                       ):  # patch json.loads to use old_json_loader above
                self.session_store.create('eq_session_id', 'test',
                                          session_data).save()

                session_store = SessionStore('user_ik', 'pepper',
                                             'eq_session_id')

                self.assertFalse(hasattr(session_store.session_data,
                                         'trad_as'))
コード例 #2
0
class SessionStoreTest(AppContextTestCase):
    def setUp(self):
        super().setUp()
        self._app.permanent_session_lifetime = timedelta(seconds=1)
        self.session_store = SessionStore("user_ik", "pepper")
        self.expires_at = datetime.utcnow() + timedelta(seconds=1)
        self.session_data = SessionData(
            tx_id="tx_id",
            schema_name="some_schema_name",
            period_str="period_str",
            language_code=None,
            survey_url=None,
            ru_name="ru_name",
            ru_ref="ru_ref",
            questionnaire_id="questionnaire_id",
            response_id="response_id",
            case_id="case_id",
        )

    def test_no_session(self):
        with self._app.test_request_context():
            self.assertIsNone(self.session_store.user_id)
            self.assertIsNone(self.session_store.session_data)

    def test_create(self):
        with self._app.test_request_context():
            self.session_store.create("eq_session_id", "test",
                                      self.session_data, self.expires_at)
            self.assertEqual("eq_session_id", self.session_store.eq_session_id)
            self.assertEqual("test", self.session_store.user_id)
            self.assertEqual(self.session_data,
                             self.session_store.session_data)

    def test_save(self):
        with self._app.test_request_context():
            self.session_store.create("eq_session_id", "test",
                                      self.session_data,
                                      self.expires_at).save()
            session_store = SessionStore("user_ik", "pepper", "eq_session_id")
            self.assertEqual(session_store.session_data.tx_id, "tx_id")

    def test_delete(self):
        with self._app.test_request_context():
            self.session_store.create("eq_session_id", "test",
                                      self.session_data,
                                      self.expires_at).save()
            self.assertEqual("test", self.session_store.user_id)
            self.session_store.delete()
            self.assertEqual(self.session_store.user_id, None)

    def test_create_save_delete_with_no_expiry(self):
        with self._app.test_request_context():
            self.session_store.create("eq_session_id", "test",
                                      self.session_data).save()
            self.assertEqual("eq_session_id", self.session_store.eq_session_id)
            self.assertEqual("test", self.session_store.user_id)
            self.assertEqual(self.session_data,
                             self.session_store.session_data)
            self.assertIsNone(self.session_store.expiration_time)

            self.session_store.delete()
            self.assertEqual(self.session_store.user_id, None)

    def test_add_data_to_session(self):
        with self._app.test_request_context():
            self.session_store.create("eq_session_id", "test",
                                      self.session_data,
                                      self.expires_at).save()
            current_time = datetime.utcnow().isoformat()
            self.session_store.session_data.submitted_time = current_time
            self.session_store.save()

            session_store = SessionStore("user_ik", "pepper", "eq_session_id")
            self.assertEqual(session_store.session_data.submitted_time,
                             current_time)

    def test_should_not_delete_when_no_session(self):
        with self.app_request_context("/status") as context:

            # Call clear with a valid user_id but no session in database
            self.session_store.delete()

            # No database calls should have been made
            self.assertEqual(
                context.app.eq["storage"].client.delete_call_count, 0)

    def test_session_store_ignores_new_values_in_session_data(self):
        session_data = SessionData(
            tx_id="tx_id",
            schema_name="some_schema_name",
            period_str="period_str",
            language_code=None,
            survey_url=None,
            ru_name="ru_name",
            ru_ref="ru_ref",
            response_id="response_id",
            questionnaire_id="questionnaire_id",
            case_id="case_id",
        )

        session_data.additional_value = "some cool new value you do not know about yet"

        with self._app.test_request_context():
            self.session_store.create("eq_session_id", "test", session_data,
                                      self.expires_at).save()

            session_store = SessionStore("user_ik", "pepper", "eq_session_id")

            self.assertFalse(
                hasattr(session_store.session_data, "additional_value"))

    def test_session_store_ignores_multiple_new_values_in_session_data(self):
        session_data = SessionData(
            tx_id="tx_id",
            schema_name="some_schema_name",
            period_str="period_str",
            language_code=None,
            survey_url=None,
            ru_name="ru_name",
            ru_ref="ru_ref",
            response_id="response_id",
            questionnaire_id="questionnaire_id",
            case_id="case_id",
        )

        session_data.additional_value = "some cool new value you do not know about yet"
        session_data.second_additional_value = "some other not so cool value"

        with self._app.test_request_context():
            self.session_store.create("eq_session_id", "test", session_data,
                                      self.expires_at).save()

            session_store = SessionStore("user_ik", "pepper", "eq_session_id")

            self.assertFalse(
                hasattr(session_store.session_data, "additional_value"))
            self.assertFalse(
                hasattr(session_store.session_data, "second_additional_value"))

    def test_session_store_stores_trading_as_value_if_present(self):
        session_data = SessionData(
            tx_id="tx_id",
            schema_name="some_schema_name",
            period_str="period_str",
            language_code=None,
            survey_url=None,
            ru_name="ru_name",
            ru_ref="ru_ref",
            response_id="response_id",
            questionnaire_id="questionnaire_id",
            trad_as="trading_as",
            case_id="case_id",
        )
        with self._app.test_request_context():
            self.session_store.create("eq_session_id", "test", session_data,
                                      self.expires_at).save()

            session_store = SessionStore("user_ik", "pepper", "eq_session_id")

            self.assertTrue(hasattr(session_store.session_data, "trad_as"))

    def test_session_store_stores_none_for_trading_as_if_not_present(self):
        session_data = SessionData(
            tx_id="tx_id",
            schema_name="some_schema_name",
            period_str="period_str",
            language_code=None,
            survey_url=None,
            ru_name="ru_name",
            ru_ref="ru_ref",
            response_id="response_id",
            questionnaire_id="questionnaire_id",
            case_id="case_id",
        )
        with self._app.test_request_context():
            self.session_store.create("eq_session_id", "test", session_data,
                                      self.expires_at).save()

            session_store = SessionStore("user_ik", "pepper", "eq_session_id")

            self.assertIsNone(session_store.session_data.trad_as)