Skip to content

Commit 43e7651

Browse files
(test) added resolveBooleanValue tests to FlagsmithProvider
1 parent 981ecc3 commit 43e7651

File tree

2 files changed

+124
-3
lines changed

2 files changed

+124
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
{
2+
"project": {
3+
"name": "Test project",
4+
"organisation": {
5+
"feature_analytics": false,
6+
"name": "Test Org",
7+
"id": 1,
8+
"persist_trait_data": true,
9+
"stop_serving_flags": false
10+
},
11+
"id": 1,
12+
"hide_disabled_flags": false
13+
},
14+
"segment_overrides": [],
15+
"id": 1,
16+
"feature_states": [
17+
{
18+
"multivariate_feature_state_values": [],
19+
"feature_state_value": "some-value",
20+
"id": 1,
21+
"feature": {
22+
"name": "some_feature",
23+
"type": "STANDARD",
24+
"id": 1
25+
},
26+
"segment_id": null,
27+
"enabled": true
28+
},
29+
{
30+
"multivariate_feature_state_values": [],
31+
"feature_state_value": "some-value",
32+
"id": 1,
33+
"feature": {
34+
"name": "disabled_feature",
35+
"type": "STANDARD",
36+
"id": 1
37+
},
38+
"segment_id": null,
39+
"enabled": false
40+
}
41+
],
42+
"identity_overrides": [
43+
{
44+
"identifier": "overridden-id",
45+
"identity_uuid": "0f21cde8-63c5-4e50-baca-87897fa6cd01",
46+
"created_date": "2019-08-27T14:53:45.698555Z",
47+
"updated_at": "2023-07-14 16:12:00.000000",
48+
"environment_api_key": "B62qaMZNwfiqT76p38ggrQ",
49+
"identity_features": [
50+
{
51+
"id": 1,
52+
"feature": {
53+
"id": 1,
54+
"name": "some_feature",
55+
"type": "STANDARD"
56+
},
57+
"featurestate_uuid": "1bddb9a5-7e59-42c6-9be9-625fa369749f",
58+
"feature_state_value": "some-overridden-value",
59+
"enabled": false,
60+
"environment": 1,
61+
"identity": null,
62+
"feature_segment": null
63+
}
64+
]
65+
}
66+
]
67+
}

providers/Flagsmith/tests/Unit/FlagsmithProviderTest.php

+57-3
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,78 @@
44

55
namespace OpenFeature\Providers\Flagsmith\Test\Unit;
66

7+
use Flagsmith\Engine\Environments\EnvironmentModel;
78
use Flagsmith\Flagsmith;
89
use OpenFeature\Providers\Flagsmith\FlagsmithProvider;
910
use OpenFeature\Providers\Flagsmith\Test\Fixtures\TestOfflineHandler;
1011
use OpenFeature\Providers\Flagsmith\Test\TestCase;
12+
use OpenFeature\interfaces\provider\ErrorCode;
1113
use OpenFeature\interfaces\provider\Provider;
1214

15+
use function file_get_contents;
16+
use function json_decode;
17+
1318
class FlagsmithProviderTest extends TestCase
1419
{
20+
protected function buildProvider(string $environmentModelPath): Provider
21+
{
22+
/** @var string $encoded */
23+
$encoded = file_get_contents($environmentModelPath);
24+
$modelData = json_decode($encoded,);
25+
26+
// @phpstan-ignore-next-line EnvironmentModel::build() type-hint is string but implementation expects object
27+
$offlineHandler = new TestOfflineHandler(EnvironmentModel::build($modelData));
28+
$flagsmith = new Flagsmith('dummy-key', offlineMode: true, offlineHandler: $offlineHandler);
29+
30+
return new FlagsmithProvider($flagsmith);
31+
}
32+
1533
public function testCanBeInstantiated(): void
1634
{
1735
// Given
1836
$flagsmith = new Flagsmith('dummy-key', offlineMode: true, offlineHandler: new TestOfflineHandler());
1937

2038
// When
21-
$instance = new FlagsmithProvider($flagsmith);
39+
$provider = new FlagsmithProvider($flagsmith);
40+
41+
// Then
42+
$this->assertInstanceOf(Provider::class, $provider);
43+
}
44+
45+
public function testBooleanResolutionWithEnabledFlag(): void
46+
{
47+
// Given
48+
$provider = $this->buildProvider(__DIR__ . '/../Fixtures/environments/boolean.json');
49+
50+
// When
51+
$resolutionDetails = $provider->resolveBooleanValue('some_feature', false);
52+
53+
// Then
54+
$this->assertTrue($resolutionDetails->getValue());
55+
}
56+
57+
public function testBooleanResolutionWithDisabledFlag(): void
58+
{
59+
// Given
60+
$provider = $this->buildProvider(__DIR__ . '/../Fixtures/environments/boolean.json');
61+
62+
// When
63+
$resolutionDetails = $provider->resolveBooleanValue('disabled_feature', true);
64+
65+
// Then
66+
$this->assertFalse($resolutionDetails->getValue());
67+
}
68+
69+
public function testBooleanResolutionWithDefaultValueFromFlag(): void
70+
{
71+
// Given
72+
$provider = $this->buildProvider(__DIR__ . '/../Fixtures/environments/boolean.json');
73+
74+
// When
75+
$resolutionDetails = $provider->resolveBooleanValue('missing_feature', false);
2276

2377
// Then
24-
$this->assertNotNull($instance);
25-
$this->assertInstanceOf(Provider::class, $instance);
78+
$this->assertFalse($resolutionDetails->getValue());
79+
$this->assertEquals(ErrorCode::GENERAL(), $resolutionDetails->getError()?->getResolutionErrorCode());
2680
}
2781
}

0 commit comments

Comments
 (0)