File size: 2,834 Bytes
686fea4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
"""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"]}
|