54
54
FAKE_DEVICES_INFO = [
55
55
{'device_id': '0', 'name': 'Foo', 'type': 'Computer', 'configurable': ''},
56
56
{'device_id': '1', 'name': 'Bar', 'type': 'Phone', 'configurable': ''},
57
{'device_id': '2', 'name': 'Z', 'type': 'Computer', 'configurable': 'True',
58
'limit_bandwidth': '',
57
{'device_id': '2', 'name': 'Z', 'type': 'Computer',
58
'configurable': 'True', 'limit_bandwidth': '',
59
59
'max_upload_speed': '0', 'max_download_speed': '0'},
60
{'device_id': '1258-6854', 'name': 'Baz', 'type': 'Computer',
61
'configurable': 'True', 'limit_bandwidth': 'True',
62
'max_upload_speed': '1000', 'max_download_speed': '72548'},
868
870
checkbutton.clicked()
869
871
fid = checkbutton.get_label()
871
subscribed = 'True' if checkbutton.get_active() else ''
873
subscribed = gui.bool_str(checkbutton.get_active())
872
874
self.assert_backend_called(method,
873
875
(fid, {'subscribed': subscribed}))
874
876
# clean backend calls
875
877
self.ui.backend._called.pop(method)
877
879
checkbutton.clicked()
878
subscribed = 'True' if checkbutton.get_active() else ''
880
subscribed = gui.bool_str(checkbutton.get_active())
879
881
self.assert_backend_called('change_volume_settings',
880
882
(fid, {'subscribed': subscribed}))
903
905
klass = gui.Device
904
906
ui_filename = 'device.ui'
908
def assert_device_equal(self, device, expected):
909
"""Assert that the device has the values from expected."""
910
self.assertEqual(device.device_id.get_text(),
911
expected['device_id'])
912
self.assertEqual(device.device_name.get_text(),
913
expected['device_name'])
914
self.assertEqual(device.device_type.get_icon_name()[0],
915
expected['device_type'].lower())
916
self.assertEqual(device.configurable,
917
bool(expected['configurable']))
918
self.assertEqual(device.limit_bandwidth.get_active(),
919
bool(expected['limit_bandwidth']))
921
value = int(expected['max_upload_speed']) // gui.KILOBYTES
922
self.assertEqual(device.max_upload_speed.get_value_as_int(), value)
923
value = int(expected['max_download_speed']) // gui.KILOBYTES
924
self.assertEqual(device.max_download_speed.get_value_as_int(), value)
926
def assert_device_settings_changed(self):
927
"""Changing throttling settings updates the backend properly."""
928
expected = self.ui.__dict__
929
self.assert_backend_called('change_device_settings',
930
(self.ui.device_id.get_text(), expected))
931
self.assertFalse(self.ui.get_sensitive(),
932
"must be unsensitive until backend confirms success.")
933
self.assertEqual(self.ui.warning_label.get_text(), '')
906
935
def test_is_a_vbox(self):
907
936
"""Inherits from VBox."""
908
937
self.assertIsInstance(self.ui, gui.gtk.VBox)
915
944
"""Is visible."""
916
945
self.assertTrue(self.ui.get_visible())
947
def test_is_sensitive(self):
949
self.assertTrue(self.ui.get_sensitive())
951
def test_warning_label_is_cleared(self):
952
"""The warning label is cleared."""
953
self.assertEqual(self.ui.warning_label.get_text(), '')
918
955
def test_device_id_is_hidden(self):
919
956
"""The device id label is hidden."""
920
957
self.assertFalse(self.ui.device_id.get_visible())
1004
1041
"""When updating, the backend is not called."""
1005
1042
self.ui.update(**FAKE_DEVICE_INFO)
1006
1043
self.assertEqual(self.ui.backend._called, {})
1008
def assert_device_settings_changed(self):
1009
"""Changing throttling settings updates the backend properly."""
1010
lb = 'True' if self.ui.limit_bandwidth.get_active() else ''
1011
up = self.ui.max_upload_speed.get_value_as_int()
1012
down = self.ui.max_download_speed.get_value_as_int()
1013
expected = {'limit_bandwidth': lb,
1014
'max_upload_speed': str(up * gui.KILOBYTES),
1015
'max_download_speed': str(down * gui.KILOBYTES)}
1016
self.assert_backend_called('change_device_settings',
1017
(self.ui.device_id.get_text(), expected))
1044
self.assert_device_equal(self.ui, FAKE_DEVICE_INFO)
1019
1046
def test_on_limit_bandwidth_toggled(self):
1020
1047
"""When toggling limit_bandwidth, backend is updated."""
1031
1058
self.ui.max_download_speed.set_value(52)
1032
1059
self.assert_device_settings_changed()
1061
def test_backend_signals(self):
1062
"""The proper signals are connected to the backend."""
1063
self.assertEqual(self.ui.backend._signals['DeviceSettingsChanged'],
1064
[self.ui.on_device_settings_changed])
1065
self.assertEqual(self.ui.backend._signals['DeviceSettingsChangeError'],
1066
[self.ui.on_device_settings_change_error])
1068
def test_on_device_settings_changed(self):
1069
"""When settings were changed for this device, enable it."""
1070
self.ui.limit_bandwidth.toggled() # modify settings
1071
did = self.ui.device_id.get_text()
1072
self.ui.on_device_settings_changed(device_id=did)
1074
self.assertTrue(self.ui.get_sensitive())
1075
self.assertEqual(self.ui.warning_label.get_text(), '')
1077
def test_on_device_settings_change_after_error(self):
1078
"""Change success after error."""
1079
self.ui.limit_bandwidth.toggled() # modify settings
1080
did = self.ui.device_id.get_text()
1081
self.ui.on_device_settings_change_error(device_id=did) # change failed
1083
self.test_on_device_settings_changed()
1085
def test_on_device_settings_changed_different_id(self):
1086
"""When settings were changed for other device, nothing changes."""
1087
self.ui.limit_bandwidth.toggled() # modify settings
1088
self.ui.on_device_settings_changed(device_id='yadda')
1090
self.assertFalse(self.ui.get_sensitive())
1091
self.assertEqual(self.ui.warning_label.get_text(), '')
1093
def test_on_device_settings_change_error(self):
1094
"""When settings were not changed for this device, notify the user.
1096
Also, confirm that old values were restored.
1099
self.ui.update(**FAKE_DEVICE_INFO) # use known values
1101
self.ui.limit_bandwidth.toggled() # modify settings
1102
new_val = self.ui.max_upload_speed.get_value_as_int() + 1
1103
self.ui.max_upload_speed.set_value(new_val)
1104
new_val = self.ui.max_download_speed.get_value_as_int() + 1
1105
self.ui.max_download_speed.set_value(new_val)
1107
did = self.ui.device_id.get_text()
1108
self.ui.on_device_settings_change_error(device_id=did) # change failed
1110
self.assertTrue(self.ui.get_sensitive())
1111
self.assert_warning_correct(self.ui.warning_label,
1112
self.ui.DEVICE_CHANGE_ERROR)
1113
self.assert_device_equal(self.ui, FAKE_DEVICE_INFO)
1115
def test_on_device_settings_change_error_after_success(self):
1116
"""Change error after success."""
1117
self.ui.limit_bandwidth.toggled() # modify settings
1118
did = self.ui.device_id.get_text()
1119
self.ui.on_device_settings_changed(device_id=did)
1121
self.test_on_device_settings_change_error()
1123
def test_on_device_settings_change_error_different_id(self):
1124
"""When settings were not changed for other device, do nothing."""
1125
self.ui.limit_bandwidth.toggled() # modify settings
1126
self.ui.on_device_settings_change_error(device_id='yudo')
1127
self.assertFalse(self.ui.get_sensitive())
1128
self.assertEqual(self.ui.warning_label.get_text(), '')
1035
1131
class DevicesTestCase(ControlPanelMixinTestCase):
1036
1132
"""The test suite for the devices panel."""