fix(): project refactoring and minor fixes
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user