27
from PyQt4 import QtGui
27
from PyQt4 import QtCore, QtGui
28
28
from twisted.internet import defer
29
29
from ubuntuone.devtools.handlers import MementoHandler
30
30
from ubuntuone.devtools.testcases import skipIfOS
37
37
FAKE_VOLUMES_ONLY_ROOT_INFO,
38
38
MUSIC_FOLDER, MUSIC_PATH, ROOT, USER_HOME,
40
from ubuntuone.controlpanel.gui import MUSIC_REAL_PATH
40
41
from ubuntuone.controlpanel.gui.qt import folders as gui
41
42
from ubuntuone.controlpanel.gui.qt.tests import (
244
245
def test_process_info(self):
245
246
"""The volumes info is processed when ready."""
247
folders = self.ui.ui.folders
246
248
self.ui.process_info(FAKE_VOLUMES_INFO)
247
folders = self.ui.ui.folders
249
249
root = folders.invisibleRootItem()
250
250
self.assertEqual(len(FAKE_VOLUMES_INFO), root.childCount())
252
treeiter = gui.QtGui.QTreeWidgetItemIterator(folders)
253
252
for name, _, volumes in FAKE_VOLUMES_INFO:
254
253
name = _build_name(name)
256
# get first child, matching "My Folders"
257
item = treeiter.value()
258
self.assertFalse(item.is_empty)
254
items = folders.findItems(name, QtCore.Qt.MatchFixedString
255
| QtCore.Qt.MatchCaseSensitive | QtCore.Qt.MatchRecursive,
257
self.assertEqual(1, len(items))
260
259
self.assert_folder_group_header_correct(item, name)
262
260
self.assertEqual(len(volumes), item.childCount())
263
sorted_vols = sorted(volumes, key=operator.itemgetter('path'))
264
for volume in sorted_vols:
266
item = treeiter.value() # get child folder
267
self.assertTrue(item is not None)
261
for volume in volumes:
269
263
name = volume['path'].replace(USER_HOME + os.path.sep, '')
270
264
expected_path = volume['path']
278
272
icon_name = gui.SHARE_ICON_NAME
274
items = folders.findItems(name, QtCore.Qt.MatchFixedString |
275
QtCore.Qt.MatchCaseSensitive | QtCore.Qt.MatchRecursive,
277
self.assertEqual(1, len(items))
280
279
self.assert_folder_row_correct(item, name, icon_name, volume,
281
280
tweaked_path=expected_path)
284
item = treeiter.value()
286
282
def test_process_info_clears_the_list(self):
287
283
"""The old volumes info is cleared before updated."""
288
284
self.ui.process_info(FAKE_VOLUMES_INFO)
306
302
root = self.ui.ui.folders.invisibleRootItem()
307
for name, _, _ in FAKE_VOLUMES_NO_FREE_SPACE_INFO:
308
name = _build_name(name)
303
names = [_build_name(name) for name, _, _ in
304
FAKE_VOLUMES_NO_FREE_SPACE_INFO]
305
names.sort(key=lambda x: x.lower())
310
307
item = root.child(child_index)
311
308
self.assertFalse(item.is_empty)
312
309
self.assert_folder_group_header_correct(item, name)
413
410
"""Ensure that the inner widgets are in the correct tab order."""
414
411
self.ui.process_info(FAKE_VOLUMES_INFO)
415
412
folders = self.ui.ui.folders
417
413
widget = self.ui.ui.folders.nextInFocusChain()
418
414
treeiter = gui.QtGui.QTreeWidgetItemIterator(folders)
419
for name, _, volumes in FAKE_VOLUMES_INFO:
420
item = treeiter.value()
421
sorted_vols = sorted(volumes, key=operator.itemgetter('path'))
422
for volume in sorted_vols:
415
while treeiter.value():
416
if treeiter.value().parent() is None: # Top-levels
424
item = treeiter.value() # get child folder
426
name = volume['path'].replace(USER_HOME + os.path.sep, '')
427
if volume['type'] == self.ui.backend.SHARE_TYPE:
428
name = volume['name']
429
self.assertEqual(unicode(item.text(gui.FOLDER_NAME_COL)), name)
431
actual_name = unicode(self.ui.widget_items[widget].text(0))
432
if volume['type'] != self.ui.backend.ROOT_TYPE:
433
self.assertIsInstance(widget, QtGui.QCheckBox)
434
self.assertEqual(actual_name, name)
435
widget = widget.nextInFocusChain()
437
if not self.ui.remote_folders:
438
self.assertIsInstance(widget, QtGui.QPushButton)
439
self.assertEqual(actual_name, name)
440
widget = widget.nextInFocusChain()
419
if self.ui.remote_folders:
420
self.assertIsInstance(widget, QtGui.QCheckBox)
421
# ROOT volume has no checkbox
422
elif treeiter.value().text(1) or self.ui.remote_folders:
423
self.assertIsInstance(widget, QtGui.QPushButton)
425
self.assertIsInstance(widget, QtGui.QCheckBox)
426
widget = widget.nextInFocusChain()
427
self.assertIsInstance(widget, QtGui.QPushButton)
428
widget = widget.nextInFocusChain()
443
item = treeiter.value()
445
431
def test_widget_dict(self):
446
432
"""Ensure the widget_items dictionary is full."""
994
980
def assert_folder_added(self, path, volume_id=None, item=None):
995
981
"""A entry for 'path' was added to the folder list."""
996
982
folders = self.ui.ui.folders
997
if item is None: # grab the last one added
998
item = folders.topLevelItem(folders.topLevelItemCount() - 1)
1000
984
if path == MUSIC_PATH:
1001
985
display_name = gui.MUSIC_DISPLAY_NAME
1003
987
display_name = path.replace(USER_HOME + os.path.sep, '')
988
if item is None: # search for it
989
items = folders.findItems(display_name,
990
QtCore.Qt.MatchFixedString | QtCore.Qt.MatchCaseSensitive,
992
self.assertEqual(len(items), 1)
1004
994
self.assertEqual(display_name,
1005
995
unicode(item.text(gui.LOCAL_SUBSCRIPTION_COL)))
1093
1083
# the following will execute update_sizes once
1094
1084
# will fill in all the path sizes for the already added folders
1095
1085
self.timer.timeout.emit()
1097
folders = self.ui.ui.folders
1098
treeiter = gui.QtGui.QTreeWidgetItemIterator(folders)
1101
1087
for _, _, vols in volumes_info:
1102
1088
volumes.extend(vols)
1107
1093
not bool(volume['subscribed'])):
1108
1094
# non-folders or unsubscribed should not appear in the tree
1111
item = treeiter.value()
1112
self.assertTrue(item is not None)
1113
1096
self.assert_folder_added(volume['path'],
1114
volume_id=volume['volume_id'], item=item)
1117
item = treeiter.value()
1097
volume_id=volume['volume_id'])
1119
1098
for folder in gui.default_folders(USER_HOME):
1120
1099
valid = yield self.validate_path(folder)
1122
1101
continue # invalid folders should not appear in the tree
1124
item = treeiter.value()
1125
self.assertTrue(item is not None)
1126
self.assert_folder_added(folder, volume_id=None, item=item)
1129
item = treeiter.value()
1131
self.assertTrue(item is None)
1102
self.assert_folder_added(folder, volume_id=None, item=None)
1132
1104
self.assert_space_header_correct(ACCOUNT_INFO['quota_used'])
1134
1106
@defer.inlineCallbacks
1219
1191
class LocalFoldersPanelAddFolderTestCase(BaseLocalFoldersPanelTestCase):
1220
1192
"""Test suite for the add_folder method from LocalFoldersPanel."""
1222
def test_folder_is_added(self, folder_path=None):
1194
def test_folder_is_added(self, folder_path=None, suggested=None):
1223
1195
"""Adding a folder adds it to the folder list."""
1224
1196
former_count = self.ui.ui.folders.topLevelItemCount()
1226
1198
if folder_path is None:
1227
1199
folder_path = self.path
1228
self.ui.add_folder(folder_path)
1200
self.ui.add_folder(folder_path, suggested=suggested)
1230
1202
new_count = self.ui.ui.folders.topLevelItemCount()
1231
1203
self.assertEqual(new_count, former_count + 1)
1234
1206
def test_add_music_folder_adds_the_folder(self):
1235
1207
"""Adding the purchased music folder adds it to the folder list."""
1236
self.test_folder_is_added(folder_path=MUSIC_PATH)
1208
self.test_folder_is_added(folder_path=MUSIC_PATH,
1209
suggested=MUSIC_REAL_PATH)
1211
def test_add_music_folder_adds_the_folder_with_suggested_path(self):
1212
"""Adding the purchased music folder adds it to the folder list."""
1213
suggested_path = '~/' + MUSIC_REAL_PATH
1214
self.test_folder_is_added(folder_path=MUSIC_PATH,
1215
suggested=suggested_path)
1238
1217
def test_do_not_add_twice(self):
1239
1218
"""The same folder will not be added twice."""