def test_sync_tokens(self, client): new = FeatureFlagConfigurationSetting('custom', enabled=True, filters=[{ "name": "Microsoft.Percentage", "parameters": { "Value": 10, "User": "******", } }]) sync_tokens = copy.deepcopy(client.obj._sync_token_policy._sync_tokens) keys = list(sync_tokens.keys()) seq_num = sync_tokens[keys[0]].sequence_number sent = client.set_configuration_setting(new) new = FeatureFlagConfigurationSetting( 'time_window', enabled=True, filters=[ { u"name": FILTER_TIME_WINDOW, u"parameters": { "Start": "Wed, 10 Mar 2021 05:00:00 GMT", "End": "Fri, 02 Apr 2021 04:00:00 GMT" } }, ]) sent = client.set_configuration_setting(new) sync_tokens2 = copy.deepcopy( client.obj._sync_token_policy._sync_tokens) keys = list(sync_tokens2.keys()) seq_num2 = sync_tokens2[keys[0]].sequence_number new = FeatureFlagConfigurationSetting( "newflag", enabled=True, filters=[ { "name": FILTER_TARGETING, "parameters": { u"Audience": { u"Users": [u"abc", u"def"], u"Groups": [u"ghi", u"jkl"], u"DefaultRolloutPercentage": 75 } } }, ]) sent = client.set_configuration_setting(new) sync_tokens3 = copy.deepcopy( client.obj._sync_token_policy._sync_tokens) keys = list(sync_tokens3.keys()) seq_num3 = sync_tokens3[keys[0]].sequence_number assert seq_num < seq_num2 assert seq_num2 < seq_num3
def test_type_error(self, client): with pytest.raises(TypeError): _ = FeatureFlagConfigurationSetting("blash", key="blash") with pytest.raises(TypeError): _ = FeatureFlagConfigurationSetting("blash", value="blash") with pytest.raises(TypeError): _ = SecretReferenceConfigurationSetting("blash", value="blash")
def test_feature_flag_set_enabled(self, client): key = self.get_resource_name("key") feature_flag = FeatureFlagConfigurationSetting(key, True, filters=[{ "name": PERCENTAGE, "parameters": { "Value": 10, "User": "******" } }]) feature_flag.enabled = False assert feature_flag.value["enabled"] == False
def test_config_setting_feature_flag(self, client): feature_flag = FeatureFlagConfigurationSetting("test_feature", enabled=True) set_flag = client.set_configuration_setting(feature_flag) self._assert_same_keys(feature_flag, set_flag) set_flag.enabled = not set_flag.enabled changed_flag = client.set_configuration_setting(set_flag) changed_flag.enabled = False temp = json.loads(changed_flag.value) assert temp['enabled'] == False c = json.loads(copy.deepcopy(changed_flag.value)) c['enabled'] = True changed_flag.value = json.dumps(c) assert changed_flag.enabled == True changed_flag.value = json.dumps({}) assert changed_flag.enabled == None assert changed_flag.value == json.dumps({'enabled': None, "conditions": {"client_filters": None}}) set_flag.value = "bad_value" assert set_flag.enabled == None assert set_flag.filters == None client.delete_configuration_setting(changed_flag.key)
def test_config_setting_feature_flag(self, client): feature_flag = FeatureFlagConfigurationSetting("test_feature", True) set_flag = client.set_configuration_setting(feature_flag) self._assert_same_keys(feature_flag, set_flag) set_flag.enabled = not set_flag.enabled changed_flag = client.set_configuration_setting(set_flag) self._assert_same_keys(set_flag, changed_flag) changed_flag.enabled = False assert changed_flag.value['enabled'] == False c = copy.deepcopy(changed_flag.value) c['enabled'] = True changed_flag.value = c assert changed_flag.enabled == True changed_flag.value = {} assert changed_flag.enabled == None assert changed_flag.value == {} with pytest.raises(ValueError): set_flag.value = "bad_value" _ = set_flag.enabled client.delete_configuration_setting(changed_flag.key)
def test_feature_flag_invalid_json_access_properties(self, client): key = self.get_resource_name("key") feature_flag = FeatureFlagConfigurationSetting(key, enabled=True) set_flag = client.set_configuration_setting(feature_flag) set_flag.value = "hello world" assert set_flag.enabled == None assert set_flag.filters == None
def test_feature_flag_invalid_json(self, client): key = self.get_resource_name("key") feature_flag = FeatureFlagConfigurationSetting(key, enabled=True) set_flag = client.set_configuration_setting(feature_flag) with pytest.raises(TypeError): set_flag.value = [] received = client.set_configuration_setting(set_flag)
def test_feature_filter_targeting(self, client): new = FeatureFlagConfigurationSetting( "newflag", True, filters=[ { "name": TARGETING, "parameters": { u"Audience": { u"Users": [u"abc", u"def"], u"Groups": [u"ghi", u"jkl"], u"DefaultRolloutPercentage": 75 } } } ] ) sent_config = client.set_configuration_setting(new) self._assert_same_keys(sent_config, new) assert isinstance(sent_config.filters[0], dict) assert len(sent_config.filters) == 1 sent_config.filters[0]["parameters"]["Audience"]["DefaultRolloutPercentage"] = 80 updated_sent_config = client.set_configuration_setting(sent_config) self._assert_same_keys(sent_config, updated_sent_config) updated_sent_config.filters.append( { "name": TARGETING, "parameters": { u"Audience": { u"Users": [u"abcd", u"defg"], u"Groups": [u"ghij", u"jklm"], u"DefaultRolloutPercentage": 50 } } } ) updated_sent_config.filters.append( { "name": TARGETING, "parameters": { u"Audience": { u"Users": [u"abcde", u"defgh"], u"Groups": [u"ghijk", u"jklmn"], u"DefaultRolloutPercentage": 100 } } } ) sent_config = client.set_configuration_setting(updated_sent_config) self._assert_same_keys(sent_config, updated_sent_config) assert len(sent_config.filters) == 3 client.delete_configuration_setting(updated_sent_config.key)
def test_feature_flag_invalid_json_string(self, client): key = self.get_resource_name("key") feature_flag = FeatureFlagConfigurationSetting(key, enabled=True) set_flag = client.set_configuration_setting(feature_flag) set_flag.value = "hello world" received = client.set_configuration_setting(set_flag) assert isinstance(received, FeatureFlagConfigurationSetting)
def test_feature_flag_invalid_json_access_properties(self, client): key = self.get_resource_name("key") feature_flag = FeatureFlagConfigurationSetting(key, True) set_flag = client.set_configuration_setting(feature_flag) set_flag.value = "hello world" with pytest.raises(ValueError): a = set_flag.enabled with pytest.raises(ValueError): b = set_flag.filters
def test_feature_flag_set_value(self, client): key = self.get_resource_name("key") feature_flag = FeatureFlagConfigurationSetting(key, enabled=True, filters=[{ "name": FILTER_PERCENTAGE, "parameters": { "Value": 10, "User": "******" } }]) feature_flag.value = json.dumps({ "conditions": { "client_filters": [] }, "enabled": False }) assert feature_flag.enabled == False
def test_feature_filter_multiple(self, client): new = FeatureFlagConfigurationSetting( 'custom', enabled=True, filters=[ { "name": FILTER_PERCENTAGE, "parameters": { "Value": 10 } }, { "name": FILTER_TIME_WINDOW, "parameters": { "Start": "Wed, 10 Mar 2021 05:00:00 GMT", "End": "Fri, 02 Apr 2021 04:00:00 GMT" } }, { "name": FILTER_TARGETING, "parameters": { u"Audience": { u"Users": [u"abcde", u"defgh"], u"Groups": [u"ghijk", u"jklmn"], u"DefaultRolloutPercentage": 100 } } } ] ) sent = client.set_configuration_setting(new) self._assert_same_keys(sent, new) sent.filters[0]["parameters"]["Value"] = 100 sent.filters[1]["parameters"]["Start"] = "Wed, 10 Mar 2021 08:00:00 GMT" sent.filters[2]["parameters"]["Audience"]["DefaultRolloutPercentage"] = 100 new_sent = client.set_configuration_setting(sent) self._assert_same_keys(sent, new_sent) assert new_sent.filters[0]["parameters"]["Value"] == 100 assert new_sent.filters[1]["parameters"]["Start"] == "Wed, 10 Mar 2021 08:00:00 GMT" assert new_sent.filters[2]["parameters"]["Audience"]["DefaultRolloutPercentage"] == 100 client.delete_configuration_setting(new_sent.key)
def test_feature_filter_custom(self, client): new = FeatureFlagConfigurationSetting('custom', True, filters=[{ "name": PERCENTAGE, "parameters": { "Value": 10, "User": "******" } }]) sent = client.set_configuration_setting(new) self._assert_same_keys(sent, new) sent.filters[0]["parameters"]["Value"] = 100 new_sent = client.set_configuration_setting(sent) self._assert_same_keys(sent, new_sent) client.delete_configuration_setting(new_sent.key)
def test_feature_filter_time_window(self, client): new = FeatureFlagConfigurationSetting( 'time_window', True, filters=[{ "name": TIME_WINDOW, "parameters": { "Start": "Wed, 10 Mar 2021 05:00:00 GMT", "End": "Fri, 02 Apr 2021 04:00:00 GMT" } }]) sent = client.set_configuration_setting(new) self._assert_same_keys(sent, new) sent.filters[0]["parameters"][ "Start"] = "Thurs, 11 Mar 2021 05:00:00 GMT" new_sent = client.set_configuration_setting(sent) self._assert_same_keys(sent, new_sent) client.delete_configuration_setting(new_sent.key)
def test_update_json_by_value(self, client): key = self.get_resource_name("key") feature_flag = FeatureFlagConfigurationSetting(key, enabled=True, filters=[{ "name": FILTER_PERCENTAGE, "parameters": { "Value": 10, "User": "******" } }]) set_flag = client.set_configuration_setting(feature_flag) set_flag.value = json.dumps({ 'conditions': { 'client_filters': [{ 'name': 'Microsoft.Targeting', 'parameters': { 'name': 'Microsoft.Targeting', 'parameters': { 'Audience': { 'DefaultRolloutPercentage': 50, 'Groups': [], 'Users': [] } } } }] }, 'description': '', 'enabled': False, 'id': key, }) set_flag = client.set_configuration_setting(set_flag) assert isinstance(set_flag, FeatureFlagConfigurationSetting) assert set_flag.enabled == False assert set_flag.key.endswith(key)
def test_feature_flag_prefix(self, client): key = self.get_resource_name("key") feature_flag = FeatureFlagConfigurationSetting(key, enabled=True) assert feature_flag.key.startswith(".appconfig.featureflag/")
def test_breaking1(self, client): new = FeatureFlagConfigurationSetting( 'breaking1', True, filters=[ { "name": TIME_WINDOW, "parameters": { "Start": "bababooey, 31 Mar 2021 25:00:00 GMT", "End": "Fri, 02 Apr 2021 04:00:00 GMT" } }, ]) client.set_configuration_setting(new) new1 = client.get_configuration_setting(new.key) new = FeatureFlagConfigurationSetting( 'breaking2', True, filters=[ { "name": TIME_WINDOW, "parameters": { "Start": "bababooey, 31 Mar 2021 25:00:00 GMT", "End": "not even trying to be a date" } }, ]) client.set_configuration_setting(new) new1 = client.get_configuration_setting(new.key) # This will show up as a Custom filter new = FeatureFlagConfigurationSetting( 'breaking3', True, filters=[ { "name": TIME_WINDOW, "parameters": { "Start": "bababooey, 31 Mar 2021 25:00:00 GMT", "End": "not even trying to be a date" } }, ]) client.set_configuration_setting(new) new1 = client.get_configuration_setting(new.key) new = FeatureFlagConfigurationSetting('breaking4', True, filters=[ { "name": TIME_WINDOW, "parameters": "stringystring" }, ]) client.set_configuration_setting(new) new1 = client.get_configuration_setting(new.key) new = FeatureFlagConfigurationSetting('breaking5', True, filters=[{ "name": TARGETING, "parameters": { u"Audience": { u"Users": '123' } } }]) client.set_configuration_setting(new) new1 = client.get_configuration_setting(new.key) new = FeatureFlagConfigurationSetting('breaking6', True, filters=[{ "name": TARGETING, "parameters": "invalidformat" }]) client.set_configuration_setting(new) new1 = client.get_configuration_setting(new.key) new = FeatureFlagConfigurationSetting('breaking7', True, filters=[{ 'abc': 'def' }]) client.set_configuration_setting(new) new1 = client.get_configuration_setting(new.key) new = FeatureFlagConfigurationSetting('breaking8', True, filters=[{ 'abc': 'def' }]) new.feature_flag_content_type = "fakeyfakey" client.set_configuration_setting(new) new1 = client.get_configuration_setting(new.key)