Exemple #1
0
    def test_interlocked_overrides(self):
        waffle_flag1 = self.waffle_flag
        waffle_flag2 = WaffleFlag(waffle_flag1.name + "2", __name__)
        waffle_flag2.cached_flags()[waffle_flag2.name] = True

        self.assertFalse(waffle_flag1.is_enabled())
        self.assertTrue(waffle_flag2.is_enabled())

        with override_waffle_flag(waffle_flag1, True):
            with override_waffle_flag(waffle_flag2, False):
                self.assertTrue(waffle_flag1.is_enabled())
                self.assertFalse(waffle_flag2.is_enabled())

        self.assertFalse(waffle_flag1.is_enabled())
        self.assertTrue(waffle_flag2.is_enabled())
Exemple #2
0
    def test_interlocked_overrides(self):
        waffle_flag1 = self.waffle_flag
        waffle_flag2 = WaffleFlag(  # lint-amnesty, pylint: disable=toggle-missing-annotation
            waffle_flag1.name + "2", __name__
        )
        waffle_flag2.cached_flags()[waffle_flag2.name] = True

        self.assertFalse(waffle_flag1.is_enabled())
        self.assertTrue(waffle_flag2.is_enabled())

        with override_waffle_flag(waffle_flag1, True):
            with override_waffle_flag(waffle_flag2, False):
                self.assertTrue(waffle_flag1.is_enabled())
                self.assertFalse(waffle_flag2.is_enabled())

        self.assertFalse(waffle_flag1.is_enabled())
        self.assertTrue(waffle_flag2.is_enabled())
Exemple #3
0
class OverrideWaffleFlagTests(TestCase):
    """
    Tests for the override_waffle_flag decorator/context manager.
    """
    def setUp(self):
        super().setUp()
        flag_name = "test_namespace.test_flag"
        self.waffle_flag = WaffleFlag(flag_name, __name__)

        request = RequestFactory().request()
        crum.set_current_request(request)
        RequestCache.clear_all_namespaces()

        self.addCleanup(crum.set_current_request, None)
        self.addCleanup(RequestCache.clear_all_namespaces)

    def temporarily_enable_flag(self):
        """
        Temporarily override flag.
        """
        @override_waffle_flag(self.waffle_flag, True)
        def test_func():
            """
            Decorated test function.
            """
            self.assertTrue(self.waffle_flag.is_enabled())

        test_func()

    def test_override_waffle_flag_pre_cached(self):
        # checks and caches the is_enabled value
        self.assertFalse(self.waffle_flag.is_enabled())
        flag_cache = self.waffle_flag.cached_flags()
        self.assertIn(self.waffle_flag.name, flag_cache)

        self.temporarily_enable_flag()

        # test cached flag is restored
        self.assertIn(self.waffle_flag.name, flag_cache)
        self.assertFalse(self.waffle_flag.is_enabled())

    def test_override_waffle_flag_not_pre_cached(self):
        # check that the flag is not yet cached
        flag_cache = self.waffle_flag.cached_flags()
        self.assertNotIn(self.waffle_flag.name, flag_cache)

        self.temporarily_enable_flag()

        # test cache is removed when no longer using decorator/context manager
        self.assertNotIn(self.waffle_flag.name, flag_cache)

    def test_override_waffle_flag_as_context_manager(self):
        self.assertFalse(self.waffle_flag.is_enabled())

        with override_waffle_flag(self.waffle_flag, True):
            self.assertTrue(self.waffle_flag.is_enabled())

        self.assertFalse(self.waffle_flag.is_enabled())

    def test_interlocked_overrides(self):
        waffle_flag1 = self.waffle_flag
        waffle_flag2 = WaffleFlag(waffle_flag1.name + "2", __name__)
        waffle_flag2.cached_flags()[waffle_flag2.name] = True

        self.assertFalse(waffle_flag1.is_enabled())
        self.assertTrue(waffle_flag2.is_enabled())

        with override_waffle_flag(waffle_flag1, True):
            with override_waffle_flag(waffle_flag2, False):
                self.assertTrue(waffle_flag1.is_enabled())
                self.assertFalse(waffle_flag2.is_enabled())

        self.assertFalse(waffle_flag1.is_enabled())
        self.assertTrue(waffle_flag2.is_enabled())