def test_feature_flag_integration(self):
        features.add("organizations:integrations-feature_flag_integration",
                     OrganizationFeature)
        self.login_as(user=self.user)

        org = self.create_organization(owner=self.user, name="baz")

        url = reverse("sentry-api-0-organization-config-integrations",
                      args=[org.slug])
        response = self.client.get(url)

        assert response.status_code == 200, response.content
        provider = [
            r for r in response.data["providers"]
            if r["key"] == "feature_flag_integration"
        ]
        assert len(provider) == 0

        with self.feature(
                "organizations:integrations-feature_flag_integration"):
            response = self.client.get(url)

            assert response.status_code == 200, response.content
            provider = [
                r for r in response.data["providers"]
                if r["key"] == "feature_flag_integration"
            ]
            assert len(provider) == 1
Exemplo n.º 2
0
    def setUp(self):
        self.user = self.create_user()
        self.org = self.create_organization(owner=self.user)
        self.out_of_scope_org = self.create_organization(owner=self.user)

        self.request = HttpRequest()
        self.request.user = self.user

        features.add("foo", OrganizationFeature)
Exemplo n.º 3
0
    def setUp(self):
        self.user = self.create_user()
        self.org = self.create_organization(owner=self.user)
        self.out_of_scope_org = self.create_organization(owner=self.user)

        self.request = HttpRequest()
        self.request.user = self.user

        features.add('foo', OrganizationFeature)
Exemplo n.º 4
0
    def test_organization_batch_has(self, mock_batch):
        user = self.create_user()
        organization = self.create_organization(owner=user)

        features.add("organizations:test-feature", OrganizationFeature)
        features.add("organizations:disabled-feature", OrganizationFeature)
        mock_batch.return_value = {
            f"organization:{organization.id}": {
                "organizations:test-feature": True,
                "organizations:disabled-feature": False,
            }
        }

        result = serialize(organization, user)
        assert "test-feature" in result["features"]
        assert "disabled-feature" not in result["features"]
Exemplo n.º 5
0
    def test_feature_flag_integration(self):
        features.add("organizations:integrations-feature_flag_integration",
                     OrganizationFeature)

        response = self.get_success_response(self.organization.slug)
        provider = [
            r for r in response.data["providers"]
            if r["key"] == "feature_flag_integration"
        ]
        assert len(provider) == 0

        with self.feature(
                "organizations:integrations-feature_flag_integration"):
            response = self.get_success_response(self.organization.slug)
            provider = [
                r for r in response.data["providers"]
                if r["key"] == "feature_flag_integration"
            ]
            assert len(provider) == 1
Exemplo n.º 6
0
    def test_project_features(self):
        early_flag = "projects:TEST_early"
        red_flag = "projects:TEST_red"
        blue_flag = "projects:TEST_blue"

        early_adopter = self.create_organization()
        early_red = self.create_project(organization=early_adopter)
        early_blue = self.create_project(organization=early_adopter)

        late_adopter = self.create_organization()
        late_red = self.create_project(organization=late_adopter)
        late_blue = self.create_project(organization=late_adopter)

        class EarlyAdopterFeatureHandler(features.BatchFeatureHandler):
            features = {early_flag}

            def _check_for_batch(self, feature_name, organization, actor):
                return organization == early_adopter

        def create_color_handler(color_flag, included_projects):
            class ProjectColorFeatureHandler(features.FeatureHandler):
                features = {color_flag}

                def has(self, feature, actor):
                    return feature.project in included_projects

            return ProjectColorFeatureHandler()

        features.add(early_flag, features.ProjectFeature)
        features.add(red_flag, features.ProjectFeature)
        features.add(blue_flag, features.ProjectFeature)
        red_handler = create_color_handler(red_flag, [early_red, late_red])
        blue_handler = create_color_handler(blue_flag, [early_blue, late_blue])
        for handler in (EarlyAdopterFeatureHandler(), red_handler,
                        blue_handler):
            features.add_handler(handler)

        def api_form(flag):
            return flag[len("projects:"):]

        flags_to_find = {
            api_form(f)
            for f in [early_flag, red_flag, blue_flag]
        }

        def assert_has_features(project, expected_features):
            serialized = serialize(project)
            actual_features = {
                f
                for f in serialized["features"] if f in flags_to_find
            }
            assert actual_features == {api_form(f) for f in expected_features}

        assert_has_features(early_red, [early_flag, red_flag])
        assert_has_features(early_blue, [early_flag, blue_flag])
        assert_has_features(late_red, [red_flag])
        assert_has_features(late_blue, [blue_flag])
 def setUp(self):
     super().setUp()
     features.add("organizations:integrations-feature-flag-integration",
                  OrganizationFeature)
     self.login_as(self.user)
 def setUp(self):
     super(OrganizationIntegrationDetailView, self).setUp()
     features.add("organizations:integrations-feature_flag_integration",
                  OrganizationFeature)
     self.login_as(self.user)