😏
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
class Policy:
|
||||
def __init__(self, flags=None):
|
||||
self.flags = dict(flags or {})
|
||||
self._decision_cache = {}
|
||||
|
||||
def set_flag(self, name, enabled):
|
||||
self.flags[name] = bool(enabled)
|
||||
|
||||
def allows(self, user_id, flag):
|
||||
key = (user_id, flag)
|
||||
if key not in self._decision_cache:
|
||||
self._decision_cache[key] = bool(self.flags.get(flag, False))
|
||||
return self._decision_cache[key]
|
||||
@@ -0,0 +1,23 @@
|
||||
import unittest
|
||||
|
||||
from policy import Policy
|
||||
|
||||
|
||||
class PolicyTests(unittest.TestCase):
|
||||
def test_initial_decision_uses_current_flag(self):
|
||||
self.assertTrue(Policy({"preview": True}).allows("u1", "preview"))
|
||||
|
||||
def test_users_have_independent_cache_entries(self):
|
||||
policy = Policy({"preview": True})
|
||||
self.assertTrue(policy.allows("u1", "preview"))
|
||||
self.assertTrue(policy.allows("u2", "preview"))
|
||||
|
||||
def test_setting_flag_invalidates_prior_decisions(self):
|
||||
policy = Policy({"preview": False})
|
||||
self.assertFalse(policy.allows("u1", "preview"))
|
||||
policy.set_flag("preview", True)
|
||||
self.assertTrue(policy.allows("u1", "preview"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user