Skip to content

Commit 5fc5559

Browse files
fix: Set the environment for local evaluation mode on init (#76)
* Set the environment for local evaluation mode on init * Make tests pass with the update environment change * Fix test failure * Make update environment update local document * Use responses for polling manager tests * Lint --------- Co-authored-by: Matthew Elwell <[email protected]>
1 parent 398be6c commit 5fc5559

File tree

3 files changed

+28
-7
lines changed

3 files changed

+28
-7
lines changed

flagsmith/flagsmith.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,9 @@ def _initialise_local_evaluation(self) -> None:
185185
self.event_stream_thread.start()
186186

187187
else:
188+
# To ensure that the environment is set before allowing subsequent
189+
# method calls, update the environment manually.
190+
self.update_environment()
188191
self.environment_data_polling_manager_thread = (
189192
EnvironmentDataPollingManager(
190193
main=self,

tests/test_flagsmith.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818

1919
def test_flagsmith_starts_polling_manager_on_init_if_enabled(
20-
mocker: MockerFixture, server_api_key: str
20+
mocker: MockerFixture,
21+
server_api_key: str,
22+
requests_session_response_ok: None,
2123
) -> None:
2224
# Given
2325
mock_polling_manager = mocker.MagicMock()

tests/test_polling_manager.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from unittest import mock
33

44
import requests
5+
import responses
56
from pytest_mock import MockerFixture
67

78
from flagsmith import Flagsmith
@@ -41,35 +42,50 @@ def test_polling_manager_calls_update_environment_on_each_refresh() -> None:
4142
polling_manager.stop()
4243

4344

45+
@responses.activate()
4446
def test_polling_manager_is_resilient_to_api_errors(
45-
mocker: MockerFixture, server_api_key: str
47+
flagsmith: Flagsmith,
48+
environment_json: str,
49+
mocker: MockerFixture,
50+
server_api_key: str,
4651
) -> None:
4752
# Given
48-
session_mock = mocker.patch("requests.Session")
49-
session_mock.get.return_value = mock.MagicMock(status_code=500)
53+
responses.add(method="GET", url=flagsmith.environment_url, body=environment_json)
5054
flagsmith = Flagsmith(
5155
environment_key=server_api_key,
5256
enable_local_evaluation=True,
5357
environment_refresh_interval_seconds=0.1,
5458
)
59+
60+
responses.add(method="GET", url=flagsmith.environment_url, status=500)
5561
polling_manager = flagsmith.environment_data_polling_manager_thread
5662

5763
# Then
5864
assert polling_manager.is_alive()
5965
polling_manager.stop()
6066

6167

68+
@responses.activate()
6269
def test_polling_manager_is_resilient_to_request_exceptions(
63-
mocker: MockerFixture, server_api_key: str
70+
flagsmith: Flagsmith,
71+
environment_json: str,
72+
mocker: MockerFixture,
73+
server_api_key: str,
6474
) -> None:
6575
# Given
66-
session_mock = mocker.patch("requests.Session")
67-
session_mock.get.side_effect = requests.RequestException()
76+
responses.add(method="GET", url=flagsmith.environment_url, body=environment_json)
6877
flagsmith = Flagsmith(
6978
environment_key=server_api_key,
7079
enable_local_evaluation=True,
7180
environment_refresh_interval_seconds=0.1,
7281
)
82+
83+
responses.add(
84+
method="GET",
85+
url=flagsmith.environment_url,
86+
body=requests.RequestException("Some exception"),
87+
status=500,
88+
)
7389
polling_manager = flagsmith.environment_data_polling_manager_thread
7490

7591
# Then

0 commit comments

Comments
 (0)