Martin Pool has proposed merging lp:~mbp/launchpad/featurefixture-from-request 
into lp:launchpad.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~mbp/launchpad/featurefixture-from-request/+merge/84887

At the moment the test FeatureFixture assumes all scopes are active, which is 
probably not what you want, and at least not what I would have expected.

This makes it look at the current request instead, but leaves an option to get 
back the old behaviour, which seems not trivial to remove from the beta ribbon 
tests.
-- 
https://code.launchpad.net/~mbp/launchpad/featurefixture-from-request/+merge/84887
Your team Launchpad code reviewers is requested to review the proposed merge of 
lp:~mbp/launchpad/featurefixture-from-request into lp:launchpad.
=== modified file 'lib/canonical/launchpad/webapp/tests/test_publisher.py'
--- lib/canonical/launchpad/webapp/tests/test_publisher.py	2011-11-17 17:03:52 +0000
+++ lib/canonical/launchpad/webapp/tests/test_publisher.py	2011-12-08 04:14:24 +0000
@@ -170,7 +170,8 @@
                     u'priority': 0,
                     u'value': u'on',
                     },
-                )))
+                ),
+            override_scope_lookup=lambda scope_name: True))
         request = LaunchpadTestRequest()
         view = LaunchpadView(object(), request)
         view.related_features = ['test_feature']
@@ -207,7 +208,8 @@
         #     but have different values,
         # then the property related_feature_info contains this feature flag.
         self.useFixture(FeatureFixture(
-            {}, self.makeFeatureFlagDictionaries(u'', u'on')))
+            {}, self.makeFeatureFlagDictionaries(u'', u'on'),
+            override_scope_lookup=lambda scope_name: True))
         request = LaunchpadTestRequest()
         view = LaunchpadView(object(), request)
         view.related_features = ['test_feature']
@@ -228,7 +230,8 @@
         #     and have the same values,
         # then is_beta is false.
         self.useFixture(FeatureFixture(
-            {}, self.makeFeatureFlagDictionaries(u'on', u'on')))
+            {}, self.makeFeatureFlagDictionaries(u'on', u'on'),
+            override_scope_lookup=lambda scope_name: True))
         request = LaunchpadTestRequest()
         view = LaunchpadView(object(), request)
         view.related_features = ['test_feature']
@@ -245,7 +248,8 @@
             related_features = ['test_feature']
 
         self.useFixture(FeatureFixture(
-            {}, self.makeFeatureFlagDictionaries(u'', u'on')))
+            {}, self.makeFeatureFlagDictionaries(u'', u'on'),
+            override_scope_lookup=lambda scope_name: True))
         request = LaunchpadTestRequest()
         view = TestView(object(), request)
         with person_logged_in(self.factory.makePerson()):
@@ -269,7 +273,8 @@
             related_features = ['test_feature_2']
 
         self.useFixture(FeatureFixture(
-            {}, self.makeFeatureFlagDictionaries(u'', u'on')))
+            {}, self.makeFeatureFlagDictionaries(u'', u'on'),
+            override_scope_lookup=lambda scope_name: True))
         request = LaunchpadTestRequest()
         view = TestView(object(), request)
         TestView2(object(), request)

=== modified file 'lib/lp/services/features/testing.py'
--- lib/lp/services/features/testing.py	2011-10-27 15:04:26 +0000
+++ lib/lp/services/features/testing.py	2011-12-08 04:14:24 +0000
@@ -1,4 +1,4 @@
-# Copyright 2010 Canonical Ltd.  This software is licensed under the
+# Copyright 2010,2011 Canonical Ltd.  This software is licensed under the
 # GNU Affero General Public License version 3 (see the file LICENSE).
 
 """Helpers for writing tests that use feature flags."""
@@ -9,6 +9,8 @@
 
 from fixtures import Fixture
 
+from lazr.restful.utils import get_current_browser_request
+
 from lp.services.features import (
     get_relevant_feature_controller,
     install_feature_controller,
@@ -18,6 +20,9 @@
     Rule,
     StormFeatureRuleSource,
     )
+from lp.services.features.scopes import (
+    ScopesFromRequest,
+    )
 
 
 class FeatureFixture(Fixture):
@@ -37,14 +42,19 @@
     The values are restored when the block exits.
     """
 
-    def __init__(self, features_dict, full_feature_rules=None):
+    def __init__(self, features_dict, full_feature_rules=None,
+            override_scope_lookup=None):
         """Constructor.
 
         :param features_dict: A dictionary-like object with keys and values
             that are flag names and those flags' settings.
+        :param override_scope_lookup: If non-None, an argument that takes
+            a scope name and returns True if it matches.  If not specified, 
+            scopes are looked up from the current request.
         """
         self.desired_features = features_dict
         self.full_feature_rules = full_feature_rules
+        self.override_scope_lookup = override_scope_lookup
 
     def setUp(self):
         """Set the feature flags that this fixture is responsible for."""
@@ -56,8 +66,15 @@
         rule_source.setAllRules(self.makeNewRules())
 
         original_controller = get_relevant_feature_controller()
+
+        def scope_lookup(scope_name):
+            request = get_current_browser_request()
+            return ScopesFromRequest(request).lookup(scope_name)
+
+        if self.override_scope_lookup:
+            scope_lookup = self.override_scope_lookup
         install_feature_controller(
-            FeatureController(lambda _: True, rule_source))
+            FeatureController(scope_lookup, rule_source))
         self.addCleanup(install_feature_controller, original_controller)
 
     def makeNewRules(self):

_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to     : launchpad-reviewers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help   : https://help.launchpad.net/ListHelp

Reply via email to