11import json
2+ from typing import Any
23
34import pytest
45from pytest_mock import MockerFixture
@@ -17,7 +18,7 @@ def test_launch_darkly_client__get_project__return_expected(
1718 # Given
1819 token = "test-token"
1920 project_key = "test-project-key"
20- api_version = "20230101 "
21+ api_version = "20240415 "
2122
2223 mocker .patch (
2324 "integrations.launch_darkly.client.LAUNCH_DARKLY_API_VERSION" ,
@@ -53,7 +54,7 @@ def test_launch_darkly_client__get_environments__return_expected(
5354 # Given
5455 token = "test-token"
5556 project_key = "test-project-key"
56- api_version = "20230101 "
57+ api_version = "20240415 "
5758
5859 mocker .patch (
5960 "integrations.launch_darkly.client.LAUNCH_DARKLY_API_VERSION" ,
@@ -104,14 +105,14 @@ def test_launch_darkly_client__get_flags__return_expected(
104105 # Given
105106 token = "test-token"
106107 project_key = "test-project-key"
107- api_version = "20230101 "
108+ api_version = "20240415 "
108109
109110 mocker .patch (
110111 "integrations.launch_darkly.client.LAUNCH_DARKLY_API_VERSION" ,
111112 new = api_version ,
112113 )
113114 mocker .patch (
114- "integrations.launch_darkly.client.LAUNCH_DARKLY_API_ITEM_COUNT_LIMIT_PER_PAGE " ,
115+ "integrations.launch_darkly.client.LAUNCH_DARKLY_API_FLAGS_LIMIT_PER_PAGE " ,
115116 new = 3 ,
116117 )
117118
@@ -141,7 +142,12 @@ def test_launch_darkly_client__get_flags__return_expected(
141142 client = LaunchDarklyClient (token = token )
142143
143144 # When
144- result = client .get_flags (project_key = project_key )
145+ result = list (
146+ client .get_flags_by_envs (
147+ project_key = project_key ,
148+ environment_keys = ["env1" , "env2" , "env3" ],
149+ )
150+ )
145151
146152 # Then
147153 assert result == expected_result
@@ -155,7 +161,7 @@ def test_launch_darkly_client__get_flag_count__return_expected(
155161 # Given
156162 token = "test-token"
157163 project_key = "test-project-key"
158- api_version = "20230101 "
164+ api_version = "20240415 "
159165
160166 mocker .patch (
161167 "integrations.launch_darkly.client.LAUNCH_DARKLY_API_VERSION" ,
@@ -188,7 +194,7 @@ def test_launch_darkly_client__get_flag_tags__return_expected(
188194) -> None :
189195 # Given
190196 token = "test-token"
191- api_version = "20230101 "
197+ api_version = "20240415 "
192198
193199 mocker .patch (
194200 "integrations.launch_darkly.client.LAUNCH_DARKLY_API_VERSION" ,
@@ -361,3 +367,115 @@ def test_launch_darkly_client__rate_limit_no_headers__waits_expected(
361367
362368 # Then
363369 assert result == expected_result
370+
371+
372+ def test_launch_darkly_client__get_flags_with_env_keys__return_expected (
373+ requests_mock : RequestsMockerFixture ,
374+ ) -> None :
375+ # Given
376+ token = "test-token"
377+ project_key = "test-project-env-keys"
378+ environment_keys = ["production" , "test" ]
379+
380+ response_data = {
381+ "items" : [
382+ {
383+ "key" : "test-flag" ,
384+ "name" : "Test Flag" ,
385+ "kind" : "boolean" ,
386+ "environments" : {
387+ "production" : {"on" : True },
388+ "test" : {"on" : False },
389+ },
390+ }
391+ ],
392+ "totalCount" : 1 ,
393+ }
394+
395+ requests_mock .get (
396+ f"https://app.launchdarkly.com/api/v2/flags/{ project_key } " ,
397+ json = response_data ,
398+ request_headers = {"Authorization" : token },
399+ )
400+
401+ client = LaunchDarklyClient (token = token )
402+
403+ # When
404+ result = list (
405+ client .get_flags_by_envs (
406+ project_key = project_key ,
407+ environment_keys = environment_keys ,
408+ )
409+ )
410+
411+ # Then
412+ assert result == response_data ["items" ]
413+ assert "env=production" in requests_mock .request_history [0 ].url
414+ assert "env=test" in requests_mock .request_history [0 ].url
415+
416+
417+ def test_launch_darkly_client__get_flags_with_env_keys_batching__merges_environments (
418+ requests_mock : RequestsMockerFixture ,
419+ ) -> None :
420+ # Given
421+ token = "test-token"
422+ project_key = "test-project-batching"
423+ environment_keys = ["env1" , "env2" , "env3" , "env4" ]
424+
425+ batch1_response = {
426+ "items" : [
427+ {
428+ "key" : "flag1" ,
429+ "environments" : {
430+ "env1" : {"on" : True },
431+ "env2" : {"on" : False },
432+ "env3" : {"on" : True },
433+ },
434+ }
435+ ],
436+ "totalCount" : 1 ,
437+ }
438+
439+ batch2_response = {
440+ "items" : [
441+ {
442+ "key" : "flag1" ,
443+ "environments" : {
444+ "env4" : {"on" : False },
445+ },
446+ }
447+ ],
448+ "totalCount" : 1 ,
449+ }
450+
451+ requests_mock .get (
452+ f"https://app.launchdarkly.com/api/v2/flags/{ project_key } " ,
453+ [
454+ {"json" : batch1_response },
455+ {"json" : batch2_response },
456+ ],
457+ request_headers = {"Authorization" : token },
458+ )
459+
460+ client = LaunchDarklyClient (token = token )
461+
462+ # When
463+ result = list (
464+ client .get_flags_by_envs (
465+ project_key = project_key ,
466+ environment_keys = environment_keys ,
467+ )
468+ )
469+
470+ # Then
471+ assert len (result ) == 1
472+ assert result [0 ]["key" ] == "flag1"
473+ environments : Any = result [0 ]["environments" ]
474+ assert environments == {
475+ "env1" : {"on" : True },
476+ "env2" : {"on" : False },
477+ "env3" : {"on" : True },
478+ "env4" : {"on" : False },
479+ }
480+
481+ assert len (requests_mock .request_history ) == 2
0 commit comments