MarcSkovMadsen commited on
Commit
686fea4
·
verified ·
1 Parent(s): 9999841

Create tests.py

Browse files
Files changed (1) hide show
  1. tests.py +88 -0
tests.py ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """We can provide the user with an option to select list of features and set their values"""
2
+
3
+ # pylint: disable=redefined-outer-name,missing-function-docstring,protected-access
4
+ import pytest
5
+
6
+ from app import FeatureInput
7
+
8
+
9
+ @pytest.fixture
10
+ def features() -> dict:
11
+ return {
12
+ "A": 1.0,
13
+ "B": 2.0,
14
+ "C": 3.0,
15
+ "D": 4.0,
16
+ }
17
+
18
+
19
+ @pytest.fixture(params=[[], ["A", "C"]])
20
+ def selected_features(request):
21
+ return request.param
22
+
23
+
24
+ @pytest.fixture
25
+ def feature_input(features, selected_features):
26
+ return FeatureInput(features=features, selected_features=selected_features)
27
+
28
+
29
+ def test_feature_input_constructor(feature_input, features, selected_features):
30
+ assert feature_input.selected_features == selected_features
31
+ assert feature_input.features == features
32
+
33
+ assert feature_input.value == {key: features[key] for key in selected_features}
34
+
35
+ assert [w.name for w in feature_input._selected_widgets] == selected_features
36
+ for widget in feature_input._selected_widgets:
37
+ assert widget.value == features[widget.name]
38
+
39
+
40
+ def test_can_change_features(feature_input):
41
+ features = {"E": 5.0, "F": 6.0}
42
+ feature_input.features = features
43
+
44
+ assert feature_input.selected_features == []
45
+ assert feature_input.value == {}
46
+
47
+ assert list(feature_input._selected_widgets) == list(feature_input.selected_features)
48
+ for feature in feature_input.selected_features:
49
+ feature_widget = feature_input._selected_widgets[feature]
50
+ assert feature_widget.name == feature
51
+ assert feature_widget.value == features[feature]
52
+
53
+
54
+ def test_can_change_value(features):
55
+ # Given
56
+ widget = FeatureInput(features=features, selected_features=["A"])
57
+ expected = widget.value.copy()
58
+
59
+ # When update widget for feature A
60
+ widget_a = widget._selected_widgets[0]
61
+ widget_a.value = 5.0
62
+ # Then
63
+ expected["A"] = 5.0
64
+
65
+ assert widget.value == expected
66
+
67
+
68
+ def test_can_change_selected_features(feature_input):
69
+ # Given
70
+ selected_features = feature_input.selected_features.copy()
71
+ selected_features.append("D")
72
+
73
+ # When update widget for feature A
74
+ feature_input.selected_features = selected_features
75
+ # Then
76
+ assert [w.name for w in feature_input._selected_widgets] == selected_features
77
+ assert feature_input.value == {w.name: w.value for w in feature_input._selected_widgets}
78
+
79
+
80
+ def test_reset_state(features):
81
+ """When a feature is deselected and selected again its value should be the default value"""
82
+ widget = FeatureInput(features=features, selected_features=["A"])
83
+ widget._selected_widgets[0].value = features["A"] + 1
84
+ widget.selected_features = []
85
+ assert not widget.value
86
+ widget.selected_features = ["A"]
87
+ assert widget._selected_widgets[0].value == features["A"]
88
+ assert widget.value == {"A": features["A"]}