fix(): project refactoring and minor fixes

This commit is contained in:
ITQ
2026-02-24 07:56:17 +03:00
parent 41ba6e6714
commit c5ea0b7d5d
7 changed files with 90 additions and 37 deletions
+34
View File
@@ -23,8 +23,10 @@ from apps.notifications.services import (
notification_enqueue,
)
from apps.reviews.selectors import (
approver_group_get_by_experimenter,
can_user_approve_experimenter,
get_min_approvals_for_experimenter,
review_settings_load,
)
from apps.users.models import User
from config.errors import ForbiddenError
@@ -130,6 +132,15 @@ def variant_create(
is_control: bool = False,
) -> Variant:
ensure_owner_or_admin(experiment, user)
if experiment.status != ExperimentStatus.DRAFT:
raise ValidationError(
{
"experiment": (
"Variants can only be added while the experiment "
f"is in '{ExperimentStatus.DRAFT}' status."
)
}
)
validate_value_for_type(value, experiment.flag.value_type)
variant = Variant(
experiment=experiment,
@@ -154,6 +165,15 @@ def variant_update(
is_control: bool | None = None,
) -> Variant:
ensure_owner_or_admin(variant.experiment, user)
if variant.experiment.status != ExperimentStatus.DRAFT:
raise ValidationError(
{
"experiment": (
"Variants can only be updated while the experiment "
f"is in '{ExperimentStatus.DRAFT}' status."
)
}
)
if name is not None:
variant.name = name
if value is not None:
@@ -228,6 +248,20 @@ def _validate_experiment_ready_for_review(experiment: Experiment) -> None:
)
}
)
approver_group = approver_group_get_by_experimenter(experiment.owner)
if (
approver_group is None
and not review_settings_load().allow_any_approver
):
raise ValidationError(
{
"approvers": (
"No approvers available for this experiment's owner. "
"Configure an approver group or enable "
"'allow_any_approver'."
)
}
)
def _validate_no_active_flag_conflict(experiment: Experiment) -> None:
@@ -157,6 +157,9 @@ class VariantCrudTest(TestCase):
class SubmitForReviewTest(TestCase):
def test_submit_with_valid_variants(self) -> None:
review_settings_update(
default_min_approvals=1, allow_any_approver=True
)
exp = make_experiment(suffix="_sr")
add_two_variants(exp)
exp = experiment_submit_for_review(experiment=exp, user=exp.owner)
@@ -478,6 +481,9 @@ class LifecycleFlowTest(TestCase):
class OwnershipPermissionTest(TestCase):
@override
def setUp(self) -> None:
review_settings_update(
default_min_approvals=1, allow_any_approver=True
)
self.owner = make_experimenter("_own")
self.other = make_experimenter("_oth")
self.admin = make_admin("_adm")