MarcSkovMadsen's picture
refactor
86873ef
raw
history blame
2.83 kB
"""We can provide the user with an option to select list of features and set their values"""
# pylint: disable=redefined-outer-name,missing-function-docstring,protected-access
import pytest
from app import FeatureInput
@pytest.fixture
def features() -> dict:
return {
"A": 1.0,
"B": 2.0,
"C": 3.0,
"D": 4.0,
}
@pytest.fixture(params=[[], ["A", "C"]])
def selected_features(request):
return request.param
@pytest.fixture
def feature_input(features, selected_features):
return FeatureInput(features=features, selected_features=selected_features)
def test_feature_input_constructor(feature_input, features, selected_features):
assert feature_input.selected_features == selected_features
assert feature_input.features == features
assert feature_input.value == {key: features[key] for key in selected_features}
assert [w.name for w in feature_input._selected_widgets] == selected_features
for widget in feature_input._selected_widgets:
assert widget.value == features[widget.name]
def test_can_change_features(feature_input):
features = {"E": 5.0, "F": 6.0}
feature_input.features = features
assert feature_input.selected_features == []
assert feature_input.value == {}
assert list(feature_input._selected_widgets) == list(feature_input.selected_features)
for feature in feature_input.selected_features:
feature_widget = feature_input._selected_widgets[feature]
assert feature_widget.name == feature
assert feature_widget.value == features[feature]
def test_can_change_value(features):
# Given
widget = FeatureInput(features=features, selected_features=["A"])
expected = widget.value.copy()
# When update widget for feature A
widget_a = widget._selected_widgets[0]
widget_a.value = 5.0
# Then
expected["A"] = 5.0
assert widget.value == expected
def test_can_change_selected_features(feature_input):
# Given
selected_features = feature_input.selected_features.copy()
selected_features.append("D")
# When update widget for feature A
feature_input.selected_features = selected_features
# Then
assert [w.name for w in feature_input._selected_widgets] == selected_features
assert feature_input.value == {w.name: w.value for w in feature_input._selected_widgets}
def test_reset_state(features):
"""When a feature is deselected and selected again its value should be the default value"""
widget = FeatureInput(features=features, selected_features=["A"])
widget._selected_widgets[0].value = features["A"] + 1
widget.selected_features = []
assert not widget.value
widget.selected_features = ["A"]
assert widget._selected_widgets[0].value == features["A"]
assert widget.value == {"A": features["A"]}