~alecu/ubuntuone-control-panel/the-outer-limits

« back to all changes in this revision

Viewing changes to ubuntuone/controlpanel/gtk/tests/test_gui.py

  • Committer: Natalia B. Bidart
  • Date: 2010-12-16 20:56:57 UTC
  • mto: (35.1.1 remove-devices)
  • mto: This revision was merged to the branch mainline in revision 36.
  • Revision ID: natalia.bidart@canonical.com-20101216205657-bejax1q13eh8cnvv
Change device errors are now handled.

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
]
47
47
 
48
48
FAKE_DEVICE_INFO = {
49
 
    'device_id': '1258-6854', 'name': 'Baz', 'type': 'Computer',
 
49
    'device_id': '1258-6854', 'device_name': 'Baz', 'device_type': 'Computer',
50
50
    'configurable': 'True', 'limit_bandwidth': 'True',
51
51
    'max_upload_speed': '1000', 'max_download_speed': '72548',
52
52
}
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
 
    FAKE_DEVICE_INFO,
 
60
    {'device_id': '1258-6854', 'name': 'Baz', 'type': 'Computer',
 
61
     'configurable': 'True', 'limit_bandwidth': 'True',
 
62
     'max_upload_speed': '1000', 'max_download_speed': '72548'},
61
63
]
62
64
 
63
65
 
868
870
            checkbutton.clicked()
869
871
            fid = checkbutton.get_label()
870
872
 
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)
876
878
 
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}))
881
883
 
903
905
    klass = gui.Device
904
906
    ui_filename = 'device.ui'
905
907
 
 
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']))
 
920
 
 
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)
 
925
 
 
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(), '')
 
934
 
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())
917
946
 
 
947
    def test_is_sensitive(self):
 
948
        """Is sensitive."""
 
949
        self.assertTrue(self.ui.get_sensitive())
 
950
 
 
951
    def test_warning_label_is_cleared(self):
 
952
        """The warning label is cleared."""
 
953
        self.assertEqual(self.ui.warning_label.get_text(), '')
 
954
 
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, {})
1007
 
 
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)
1018
1045
 
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()
1033
1060
 
 
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])
 
1067
 
 
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)
 
1073
 
 
1074
        self.assertTrue(self.ui.get_sensitive())
 
1075
        self.assertEqual(self.ui.warning_label.get_text(), '')
 
1076
 
 
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
 
1082
 
 
1083
        self.test_on_device_settings_changed()
 
1084
 
 
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')
 
1089
 
 
1090
        self.assertFalse(self.ui.get_sensitive())
 
1091
        self.assertEqual(self.ui.warning_label.get_text(), '')
 
1092
 
 
1093
    def test_on_device_settings_change_error(self):
 
1094
        """When settings were not changed for this device, notify the user.
 
1095
 
 
1096
        Also, confirm that old values were restored.
 
1097
 
 
1098
        """
 
1099
        self.ui.update(**FAKE_DEVICE_INFO)  # use known values
 
1100
 
 
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)
 
1106
 
 
1107
        did = self.ui.device_id.get_text()
 
1108
        self.ui.on_device_settings_change_error(device_id=did)  # change failed
 
1109
 
 
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)
 
1114
 
 
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)
 
1120
 
 
1121
        self.test_on_device_settings_change_error()
 
1122
 
 
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(), '')
 
1129
 
1034
1130
 
1035
1131
class DevicesTestCase(ControlPanelMixinTestCase):
1036
1132
    """The test suite for the devices panel."""
1065
1161
        """The devices info is processed when ready."""
1066
1162
        self.ui.on_devices_info_ready(FAKE_DEVICES_INFO)
1067
1163
 
1068
 
        children = self.ui.itself.get_children()
 
1164
        children = self.ui.devices.get_children()
1069
1165
        self.assertEqual(len(children), len(FAKE_DEVICES_INFO))
1070
1166
 
1071
1167
        for child, device in zip(children, FAKE_DEVICES_INFO):