Skip to content

Commit b826fa7

Browse files
committed
test: add test for OwnerInfo
1 parent fed3e70 commit b826fa7

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed

src/flagpole/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ def to_json_str(self) -> str:
218218

219219
__all__ = [
220220
"Feature",
221+
"OwnerInfo",
221222
"InvalidFeatureFlagConfiguration",
222223
"ContextBuilder",
223224
"EvaluationContext",

tests/flagpole/test_flagpole_eval.py

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import pytest
66
import yaml
77

8-
from flagpole import Feature
8+
from flagpole import Feature, OwnerInfo
99
from flagpole.conditions import EqualsCondition, Segment
1010
from flagpole.evaluation_context import EvaluationContext
1111
from flagpole.flagpole_eval import evaluate_flag, get_arguments, read_feature
@@ -163,6 +163,66 @@ def test_read_feature_missing_flag(self):
163163
Path(temp_file).unlink()
164164

165165

166+
class TestOwnerInfo:
167+
"""Test OwnerInfo dataclass and Feature with OwnerInfo owner."""
168+
169+
def test_feature_with_owner_info(self):
170+
"""Test creating a Feature with OwnerInfo as owner."""
171+
owner = OwnerInfo(team="test-team", email="owner@sentry.io")
172+
feature = Feature(
173+
name="test-feature",
174+
owner=owner,
175+
enabled=True,
176+
segments=[Segment(name="test-segment", rollout=100, conditions=[])],
177+
)
178+
179+
assert isinstance(feature.owner, OwnerInfo)
180+
assert feature.owner.team == "test-team"
181+
assert feature.owner.email == "owner@sentry.io"
182+
183+
def test_feature_with_owner_info_no_email(self):
184+
"""Test creating a Feature with OwnerInfo without email."""
185+
owner = OwnerInfo(team="test-team")
186+
feature = Feature(
187+
name="test-feature",
188+
owner=owner,
189+
enabled=True,
190+
segments=[Segment(name="test-segment", rollout=100, conditions=[])],
191+
)
192+
193+
assert isinstance(feature.owner, OwnerInfo)
194+
assert feature.owner.team == "test-team"
195+
assert feature.owner.email is None
196+
197+
def test_feature_from_dict_with_owner_object(self):
198+
"""Test parsing a Feature from dict with owner as object."""
199+
config_dict = {
200+
"enabled": True,
201+
"owner": {"team": "test-team", "email": "owner@sentry.io"},
202+
"segments": [{"name": "test-segment", "rollout": 100, "conditions": []}],
203+
}
204+
205+
feature = Feature.from_feature_dictionary("test-feature", config_dict)
206+
207+
assert isinstance(feature.owner, OwnerInfo)
208+
assert feature.owner.team == "test-team"
209+
assert feature.owner.email == "owner@sentry.io"
210+
211+
def test_feature_from_dict_with_owner_object_no_email(self):
212+
"""Test parsing a Feature from dict with owner object without email."""
213+
config_dict = {
214+
"enabled": True,
215+
"owner": {"team": "test-team"},
216+
"segments": [{"name": "test-segment", "rollout": 100, "conditions": []}],
217+
}
218+
219+
feature = Feature.from_feature_dictionary("test-feature", config_dict)
220+
221+
assert isinstance(feature.owner, OwnerInfo)
222+
assert feature.owner.team == "test-team"
223+
assert feature.owner.email is None
224+
225+
166226
class TestEvaluateFlag:
167227
"""Test evaluate_flag() function for different flag scenarios."""
168228

0 commit comments

Comments
 (0)