diff --git a/src/sentry/features/temporary.py b/src/sentry/features/temporary.py index 79f9b5b8b87b..b5b649f8a988 100644 --- a/src/sentry/features/temporary.py +++ b/src/sentry/features/temporary.py @@ -58,8 +58,6 @@ def register_temporary_features(manager: FeatureManager) -> None: manager.add("organizations:auto-link-repos-by-name", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False) # Enabled for orgs that participated in the code review beta manager.add("organizations:code-review-beta", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=True) - # Enable A/B testing experiments for code review (org eligibility) - manager.add("organizations:code-review-experiments-enabled", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False) # Enable continuous profiling manager.add("organizations:continuous-profiling", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=True) # Enable the ingestion of profile functions metrics into EAP diff --git a/src/sentry/seer/code_review/utils.py b/src/sentry/seer/code_review/utils.py index 22520ca217d7..587d13e12b96 100644 --- a/src/sentry/seer/code_review/utils.py +++ b/src/sentry/seer/code_review/utils.py @@ -11,7 +11,6 @@ from django.conf import settings from urllib3.exceptions import HTTPError -from sentry import features from sentry.integrations.github.client import GitHubReaction from sentry.integrations.github.utils import is_github_rate_limit_sensitive from sentry.integrations.github.webhook_types import GithubWebhookType @@ -274,9 +273,8 @@ def _common_codegen_request_payload( }, } - # Add experiment_enabled flag ONLY for pr-review requests (not for pr-closed / pr-reopened) if add_experiment_enabled: - data["experiment_enabled"] = is_org_enabled_for_code_review_experiments(organization) + data["experiment_enabled"] = True return { "external_owner_id": repo.external_id, @@ -624,16 +622,3 @@ def delete_existing_reactions_and_add_reaction( CodeReviewErrorType.REACTION_FAILED, ) logger.warning(Log.REACTION_FAILED.value, exc_info=True) - - -def is_org_enabled_for_code_review_experiments(organization: Organization) -> bool: - """ - Checks if an org is eligible to code review experiments via Flagpole. - - If True the exact experiment is decided by Seer. - If False no experiment will be applied to the PR, and it'll use the default behavior. - """ - return features.has( - "organizations:code-review-experiments-enabled", - organization, - ) diff --git a/tests/sentry/seer/code_review/test_utils.py b/tests/sentry/seer/code_review/test_utils.py index 34d9081abf1a..fee389bb74c6 100644 --- a/tests/sentry/seer/code_review/test_utils.py +++ b/tests/sentry/seer/code_review/test_utils.py @@ -20,12 +20,10 @@ _get_trigger_metadata_for_pull_request, convert_enum_keys_to_strings, get_tags, - is_org_enabled_for_code_review_experiments, transform_webhook_to_codegen_request, ) from sentry.testutils.cases import TestCase from sentry.testutils.factories import Factories -from sentry.testutils.helpers.features import with_feature from sentry.users.models.user import User from sentry.utils import json @@ -414,7 +412,6 @@ def test_issue_comment_payload_is_json_serializable( # This would fail if trigger_at is a datetime object instead of string json.dumps(result) # Should not raise TypeError - @with_feature("organizations:code-review-experiments-enabled") def test_pr_closed_does_not_include_experiment_enabled( self, setup_entities: tuple[User, Organization, Project, Repository], @@ -437,7 +434,6 @@ def test_pr_closed_does_not_include_experiment_enabled( assert result is not None assert "experiment_enabled" not in result["data"] - @with_feature("organizations:code-review-experiments-enabled") def test_issue_comment_includes_experiment_enabled( self, setup_entities: tuple[User, Organization, Project, Repository], @@ -463,8 +459,7 @@ def test_issue_comment_includes_experiment_enabled( assert result is not None assert result["data"]["experiment_enabled"] is True - @with_feature("organizations:code-review-experiments-enabled") - def test_pr_review_includes_experiment_enabled_when_feature_enabled( + def test_pr_review_includes_experiment_enabled_always_true( self, setup_entities: tuple[User, Organization, Project, Repository], ) -> None: @@ -486,28 +481,6 @@ def test_pr_review_includes_experiment_enabled_when_feature_enabled( assert result is not None assert result["data"]["experiment_enabled"] is True - def test_pr_review_includes_experiment_enabled_false_when_feature_disabled( - self, - setup_entities: tuple[User, Organization, Project, Repository], - ) -> None: - _, organization, _, repo = setup_entities - - event_payload = { - "pull_request": {"number": 42}, - "sender": {"login": "test-user"}, - } - result = transform_webhook_to_codegen_request( - GithubWebhookType.PULL_REQUEST, - "opened", - event_payload, - organization, - repo, - "abc123sha", - ) - - assert result is not None - assert result["data"]["experiment_enabled"] is False - class TestExtractGithubInfo(TestCase): def setUp(self) -> None: @@ -882,17 +855,6 @@ def test_handles_seer_code_review_feature_enum(self) -> None: assert isinstance(list(result.keys())[0], str) -class CodeReviewExperimentAssignmentTest(TestCase): - def test_enabled(self) -> None: - org = self.create_organization(slug="test-org") - with self.feature("organizations:code-review-experiments-enabled"): - assert is_org_enabled_for_code_review_experiments(org) - - def test_disabled(self) -> None: - org = self.create_organization(slug="test-org") - assert not is_org_enabled_for_code_review_experiments(org) - - class TestBuildRepoDefinition: def _make_repo(self, provider: str = "integrations:github") -> MagicMock: repo = MagicMock()