Skip to content

Commit 9e459f5

Browse files
emyllerclaude
andauthored
Omit segments from environment flags evaluation (#121)
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 88fcf5f commit 9e459f5

File tree

4 files changed

+110
-1
lines changed

4 files changed

+110
-1
lines changed

src/Flagsmith.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,11 @@ private function getEnvironmentFlagsFromLocalEvaluationContext(): Flags
417417
throw new FlagsmithClientError('Evaluation context is not present');
418418
}
419419

420-
$evaluationResult = Engine::getEvaluationResult($this->localEvaluationContext);
420+
// Omit segments from evaluation context for environment flags
421+
$context = $this->localEvaluationContext->deepClone();
422+
$context->segments = [];
423+
424+
$evaluationResult = Engine::getEvaluationResult($context);
421425

422426
return Flags::fromEvaluationResult(
423427
$evaluationResult,

tests/ClientFixtures.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,18 @@ public static function getFlags()
9999
{
100100
return EnvironmentModel::build(json_decode(self::loadFileContents('environment.json')));
101101
}
102+
103+
public static function getMockClientWithSegmentOverride()
104+
{
105+
$handlerBuilder = self::getHandlerBuilder();
106+
$handlerBuilder->addRoute(
107+
self::getRouteBuilder()->new()
108+
->withMethod('GET')
109+
->withPath('/api/v1/environment-document/')
110+
->withFileResponse(self::DATA_DIR . 'environment_with_segment_override.json')
111+
->build()
112+
);
113+
114+
return self::getMockClient($handlerBuilder, false);
115+
}
102116
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
{
2+
"api_key": "test-api-key",
3+
"name": "Test environment with segment override",
4+
"project": {
5+
"name": "Test project",
6+
"organisation": {
7+
"feature_analytics": false,
8+
"name": "Test Org",
9+
"id": 1,
10+
"persist_trait_data": true,
11+
"stop_serving_flags": false
12+
},
13+
"id": 1,
14+
"hide_disabled_flags": false,
15+
"segments": [
16+
{
17+
"id": 1,
18+
"name": "Test segment with override",
19+
"feature_states": [
20+
{
21+
"feature_state_value": "segment-override-value",
22+
"django_id": 10,
23+
"featurestate_uuid": "99999999-9999-9999-9999-999999999999",
24+
"feature": {
25+
"name": "test_feature",
26+
"type": "STANDARD",
27+
"id": 10
28+
},
29+
"enabled": false,
30+
"multivariate_feature_state_values": [],
31+
"feature_segment": {
32+
"priority": 1
33+
}
34+
}
35+
],
36+
"rules": [
37+
{
38+
"type": "ALL",
39+
"rules": [],
40+
"conditions": [
41+
{
42+
"operator": "EQUAL",
43+
"property_": "$.environment.name",
44+
"value": "Test environment with segment override"
45+
}
46+
]
47+
}
48+
]
49+
}
50+
]
51+
},
52+
"segment_overrides": [],
53+
"id": 1,
54+
"feature_states": [
55+
{
56+
"feature_state_value": "environment-default-value",
57+
"django_id": 1,
58+
"featurestate_uuid": "00000000-0000-0000-0000-000000000000",
59+
"feature": {
60+
"name": "test_feature",
61+
"type": "STANDARD",
62+
"id": 10
63+
},
64+
"segment_id": null,
65+
"enabled": true,
66+
"multivariate_feature_state_values": []
67+
}
68+
],
69+
"identity_overrides": []
70+
}

tests/FlagsmithClientTest.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,4 +478,25 @@ public function testApiRequestsIncludeUserAgentHeader()
478478
$expectedUserAgent = "flagsmith-php-sdk/{$expectedVersion}";
479479
$this->assertEquals($expectedUserAgent, $userAgent);
480480
}
481+
482+
public function testGetEnvironmentFlagsOmitsSegmentsFromEvaluation()
483+
{
484+
// Given
485+
$flagsmith = (new Flagsmith('ser.api_key', environmentTtl: 1))
486+
->withClient(ClientFixtures::getMockClientWithSegmentOverride());
487+
$flagsmith->updateEnvironment();
488+
489+
// When
490+
$environmentFlags = $flagsmith->getEnvironmentFlags();
491+
$identityFlags = $flagsmith->getIdentityFlags('test-identity');
492+
493+
// Then
494+
$environmentFlag = $environmentFlags->getFlag('test_feature');
495+
$this->assertTrue($environmentFlag->enabled);
496+
$this->assertEquals('environment-default-value', $environmentFlag->value);
497+
498+
$identityFlag = $identityFlags->getFlag('test_feature');
499+
$this->assertFalse($identityFlag->enabled);
500+
$this->assertEquals('segment-override-value', $identityFlag->value);
501+
}
481502
}

0 commit comments

Comments
 (0)