Files @ ac57053ecf58
Branch filter:

Location: symposion_app/vendor/registrasion/registrasion/tests/test_batch.py - annotation

Joel Addison
Ignore withdrawn proposals for random choice
eb29e7cd0977
eb29e7cd0977
17693754de69
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
eb29e7cd0977
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
27ab44ec4415
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
64ca477cb89a
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
3db1256895aa
import pytz

from registrasion.tests.test_cart import RegistrationCartTestCase

from registrasion.controllers.batch import BatchController

UTC = pytz.timezone('UTC')


class BatchTestCase(RegistrationCartTestCase):

    def test_no_caches_outside_of_batches(self):
        cache_1 = BatchController.get_cache(self.USER_1)
        cache_2 = BatchController.get_cache(self.USER_2)

        # Identity testing is important here
        self.assertIsNot(cache_1, cache_2)

    def test_cache_clears_at_batch_exit(self):
        with BatchController.batch(self.USER_1):
            cache_1 = BatchController.get_cache(self.USER_1)

        cache_2 = BatchController.get_cache(self.USER_1)

        self.assertIsNot(cache_1, cache_2)

    def test_caches_identical_within_nestings(self):
        with BatchController.batch(self.USER_1):
            cache_1 = BatchController.get_cache(self.USER_1)

            with BatchController.batch(self.USER_2):
                cache_2 = BatchController.get_cache(self.USER_1)

            cache_3 = BatchController.get_cache(self.USER_1)

        self.assertIs(cache_1, cache_2)
        self.assertIs(cache_2, cache_3)

    def test_caches_are_independent_for_different_users(self):
        with BatchController.batch(self.USER_1):
            cache_1 = BatchController.get_cache(self.USER_1)

            with BatchController.batch(self.USER_2):
                cache_2 = BatchController.get_cache(self.USER_2)

        self.assertIsNot(cache_1, cache_2)

    def test_cache_clears_are_independent_for_different_users(self):
        with BatchController.batch(self.USER_1):
            cache_1 = BatchController.get_cache(self.USER_1)

            with BatchController.batch(self.USER_2):
                cache_2 = BatchController.get_cache(self.USER_2)

            with BatchController.batch(self.USER_2):
                cache_3 = BatchController.get_cache(self.USER_2)

            cache_4 = BatchController.get_cache(self.USER_1)

        self.assertIs(cache_1, cache_4)
        self.assertIsNot(cache_1, cache_2)
        self.assertIsNot(cache_2, cache_3)

    def test_new_caches_for_new_batches(self):
        with BatchController.batch(self.USER_1):
            cache_1 = BatchController.get_cache(self.USER_1)

        with BatchController.batch(self.USER_1):
            cache_2 = BatchController.get_cache(self.USER_1)

            with BatchController.batch(self.USER_1):
                cache_3 = BatchController.get_cache(self.USER_1)

        self.assertIs(cache_2, cache_3)
        self.assertIsNot(cache_1, cache_2)

    def test_memoisation_happens_in_batch_context(self):
        with BatchController.batch(self.USER_1):
            output_1 = self._memoiseme(self.USER_1)

            with BatchController.batch(self.USER_1):
                output_2 = self._memoiseme(self.USER_1)

        self.assertIs(output_1, output_2)

    def test_memoisaion_does_not_happen_outside_batch_context(self):
        output_1 = self._memoiseme(self.USER_1)
        output_2 = self._memoiseme(self.USER_1)

        self.assertIsNot(output_1, output_2)

    def test_memoisation_is_user_independent(self):
        with BatchController.batch(self.USER_1):
            output_1 = self._memoiseme(self.USER_1)
            with BatchController.batch(self.USER_2):
                output_2 = self._memoiseme(self.USER_2)
                output_3 = self._memoiseme(self.USER_1)

        self.assertIsNot(output_1, output_2)
        self.assertIs(output_1, output_3)

    def test_memoisation_clears_outside_batches(self):
        with BatchController.batch(self.USER_1):
            output_1 = self._memoiseme(self.USER_1)

        with BatchController.batch(self.USER_1):
            output_2 = self._memoiseme(self.USER_1)

        self.assertIsNot(output_1, output_2)

    @classmethod
    @BatchController.memoise
    def _memoiseme(self, user):
        return object()

    def test_batch_end_functionality_is_called(self):
        class Ender(object):
            end_count = 0

            def end_batch(self):
                self.end_count += 1

        @BatchController.memoise
        def get_ender(user):
            return Ender()

        # end_batch should get called once on exiting the batch
        with BatchController.batch(self.USER_1):
            ender = get_ender(self.USER_1)
        self.assertEquals(1, ender.end_count)

        # end_batch should get called once on exiting the batch
        # no matter how deep the object gets cached
        with BatchController.batch(self.USER_1):
            with BatchController.batch(self.USER_1):
                ender = get_ender(self.USER_1)
        self.assertEquals(1, ender.end_count)