Skip to content

Commit

Permalink
chore: Convert feature segments models TestCase to a normal test func…
Browse files Browse the repository at this point in the history
…tion (#3925)
  • Loading branch information
zachaysan authored May 13, 2024
1 parent 9e3746b commit 9536444
Showing 1 changed file with 112 additions and 155 deletions.
Original file line number Diff line number Diff line change
@@ -1,158 +1,115 @@
import pytest
from core.constants import STRING
from django.test import TestCase
from flag_engine.segments.constants import EQUAL

from environments.identities.models import Identity
from environments.identities.traits.models import Trait
from environments.models import Environment
from features.models import Feature, FeatureSegment
from organisations.models import Organisation
from projects.models import Project
from segments.models import Condition, Segment, SegmentRule


@pytest.mark.django_db
class FeatureSegmentTest(TestCase):
def setUp(self) -> None:
self.organisation = Organisation.objects.create(name="Test org")
self.project = Project.objects.create(
name="Test project", organisation=self.organisation
)
self.environment = Environment.objects.create(
name="Test environment", project=self.project
)

self.initial_value = "test"
self.remote_config = Feature.objects.create(
name="Remote Config",
initial_value="test",
project=self.project,
)

self.segment = Segment.objects.create(name="Test segment", project=self.project)
segment_rule = SegmentRule.objects.create(
segment=self.segment, type=SegmentRule.ALL_RULE
)

self.condition_property = "test_property"
self.condition_value = "test_value"
Condition.objects.create(
property=self.condition_property,
value=self.condition_value,
operator=EQUAL,
rule=segment_rule,
)

self.matching_identity = Identity.objects.create(
identifier="user_1", environment=self.environment
)
Trait.objects.create(
identity=self.matching_identity,
trait_key=self.condition_property,
value_type=STRING,
string_value=self.condition_value,
)

self.not_matching_identity = Identity.objects.create(
identifier="user_2", environment=self.environment
)

def test_feature_segment_is_less_than_other_if_priority_lower(self):
# Given
feature_segment_1 = FeatureSegment.objects.create(
feature=self.remote_config,
segment=self.segment,
environment=self.environment,
priority=1,
)

another_segment = Segment.objects.create(
name="Another segment", project=self.project
)
feature_segment_2 = FeatureSegment.objects.create(
feature=self.remote_config,
segment=another_segment,
environment=self.environment,
priority=2,
)

# When
result = feature_segment_2 < feature_segment_1

# Then
assert result

def test_feature_segments_are_created_with_correct_priority(self):
# Given - 5 feature segments

# 2 with the same feature, environment but a different segment
another_segment = Segment.objects.create(
name="Another segment", project=self.project
)
feature_segment_1 = FeatureSegment.objects.create(
feature=self.remote_config,
segment=self.segment,
environment=self.environment,
)

feature_segment_2 = FeatureSegment.objects.create(
feature=self.remote_config,
segment=another_segment,
environment=self.environment,
)

# 1 with the same feature but a different environment
another_environment = Environment.objects.create(
name="Another environment", project=self.project
)
feature_segment_3 = FeatureSegment.objects.create(
feature=self.remote_config,
segment=self.segment,
environment=another_environment,
)

# 1 with the same environment but a different feature
another_feature = Feature.objects.create(
name="Another feature", project=self.project
)
feature_segment_4 = FeatureSegment.objects.create(
feature=another_feature, segment=self.segment, environment=self.environment
)

# 1 with a different feature and a different environment
feature_segment_5 = FeatureSegment.objects.create(
feature=another_feature,
segment=self.segment,
environment=another_environment,
)

# Then
# the two with the same feature and environment are created with ascending priorities
assert feature_segment_1.priority == 0
assert feature_segment_2.priority == 1

# the ones with different combinations of features and environments are all created with a priority of 0
assert feature_segment_3.priority == 0
assert feature_segment_4.priority == 0
assert feature_segment_5.priority == 0

def test_clone_creates_a_new_object(self):
# Given
feature_segment = FeatureSegment.objects.create(
feature=self.remote_config,
segment=self.segment,
environment=self.environment,
priority=1,
)
new_env = Environment.objects.create(
name="Test environment New", project=self.project
)

# When
feature_segment_clone = feature_segment.clone(new_env)

# Then
assert feature_segment_clone.id != feature_segment.id
assert feature_segment_clone.priority == feature_segment.priority
assert feature_segment_clone.environment.id == new_env.id
from segments.models import Segment


def test_feature_segment_is_less_than_other_if_priority_lower(
feature: Feature,
environment: Environment,
segment: Segment,
project: Project,
) -> None:
# Given
feature_segment_1 = FeatureSegment.objects.create(
feature=feature,
segment=segment,
environment=environment,
priority=1,
)

another_segment = Segment.objects.create(name="Another segment", project=project)
feature_segment_2 = FeatureSegment.objects.create(
feature=feature,
segment=another_segment,
environment=environment,
priority=2,
)

# When
result = feature_segment_2 < feature_segment_1

# Then
assert result is True


def test_feature_segments_are_created_with_correct_priority(
feature: Feature,
environment: Environment,
segment: Segment,
project: Project,
) -> None:
# Given - 5 feature segments

# 2 with the same feature and environment but a different segment
another_segment = Segment.objects.create(name="Another segment", project=project)
feature_segment_1 = FeatureSegment.objects.create(
feature=feature,
segment=segment,
environment=environment,
)

feature_segment_2 = FeatureSegment.objects.create(
feature=feature,
segment=another_segment,
environment=environment,
)

# 1 with the same feature but a different environment
another_environment = Environment.objects.create(
name="Another environment", project=project
)
feature_segment_3 = FeatureSegment.objects.create(
feature=feature,
segment=segment,
environment=another_environment,
)

# 1 with the same environment but a different feature
another_feature = Feature.objects.create(name="Another feature", project=project)
feature_segment_4 = FeatureSegment.objects.create(
feature=another_feature, segment=segment, environment=environment
)

# 1 with a different feature and a different environment
feature_segment_5 = FeatureSegment.objects.create(
feature=another_feature,
segment=segment,
environment=another_environment,
)

# Then
# the two with the same feature and environment are created with ascending priorities
assert feature_segment_1.priority == 0
assert feature_segment_2.priority == 1

# the ones with different combinations of features and environments are all created with a priority of 0
assert feature_segment_3.priority == 0
assert feature_segment_4.priority == 0
assert feature_segment_5.priority == 0


def test_clone_creates_a_new_object(
feature: Feature,
environment: Environment,
segment: Segment,
project: Project,
) -> None:
# Given
feature_segment = FeatureSegment.objects.create(
feature=feature,
segment=segment,
environment=environment,
priority=1,
)
new_environment = Environment.objects.create(
name="Test environment New", project=project
)

# When
feature_segment_clone = feature_segment.clone(new_environment)

# Then
assert feature_segment_clone.id != feature_segment.id
assert feature_segment_clone.priority == feature_segment.priority
assert feature_segment_clone.environment.id == new_environment.id

0 comments on commit 9536444

Please sign in to comment.