Revision control

Copy as Markdown

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import json
import pytest
from fml import FmlError, InternalError
def test_instantiate_fml_client(fml_client):
fml_client("test.fml.yml", "developer")
def test_instantiate_fml_client_fails_if_invalid_path(fml_client):
with pytest.raises(FmlError):
fml_client("a-random-path", "developer")
def test_instantiate_fml_client_fails_if_invalid_yml(fml_client):
with pytest.raises(InternalError):
fml_client("test-invalid.fml.yml", "developer")
def test_instantiate_fml_client_fails_if_invalid_channel(fml_client):
with pytest.raises(FmlError):
fml_client("test.fml.yml", "release")
def test_default_json(fml_client):
client = fml_client("test.fml.yml", "developer")
defaults = json.loads(client.get_default_json())
assert defaults["example-feature"]["enabled"] is False
assert defaults["example-feature"]["something"] == "wicked"
client = fml_client("test.fml.yml", "nightly")
defaults = json.loads(client.get_default_json())
assert defaults["example-feature"]["enabled"] is True
assert defaults["example-feature"].get("something") is None
def test_merge(fml_client):
client = fml_client("test.fml.yml", "developer")
configs = {"example-feature": {"enabled": True}}
result = client.merge(configs)
assert len(result.errors) == 0
result_json = json.loads(result.json)["example-feature"]
assert result_json["enabled"] is True
assert result_json["something"] == "wicked"
def test_merge_error_on_invalid_key(fml_client):
client = fml_client("test.fml.yml", "developer")
configs = {"example-feature": {"enabled1": False}}
result = client.merge(configs)
assert len(result.errors) == 1
assert isinstance(result.errors[0], FmlError)
def test_merge_error_on_invalid_value(fml_client):
client = fml_client("test.fml.yml", "developer")
configs = {"example-feature": {"enabled": "false"}}
result = client.merge(configs)
assert len(result.errors) == 1
assert isinstance(result.errors[0], FmlError)
def test_merge_included_and_imported_features(fml_client):
client = fml_client(
"test-include-import.fml.yml",
"developer",
)
configs = {
"example-feature": {"enabled": True},
"included-feature-1": {"enabled": True},
"imported-module-1-included-feature-1": {"enabled": True},
}
result = client.merge(configs)
assert len(result.errors) == 0
example_feature = json.loads(result.json)["example-feature"]
assert example_feature["enabled"] is True
assert example_feature["something"] == "wicked"
included_feature_1 = json.loads(result.json)["included-feature-1"]
assert included_feature_1["enabled"] is True
imported_module_1_feature_1 = json.loads(result.json)["imported-module-1-feature-1"]
assert imported_module_1_feature_1["enabled"] is True
imported_module_1_included_feature_1 = json.loads(result.json)[
"imported-module-1-included-feature-1"
]
assert imported_module_1_included_feature_1["enabled"] is True
def test_get_coenrolling_feature_ids(fml_client):
client = fml_client("test-include-import.fml.yml", "developer")
result = client.get_coenrolling_feature_ids()
assert result == ["example-feature", "imported-module-1-included-feature-1"]