Skip to content

Commit

Permalink
add test for VFS and selective sync
Browse files Browse the repository at this point in the history
  • Loading branch information
Salipa-Gurung committed Jan 9, 2024
1 parent f58fba8 commit bc1b530
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 13 deletions.
8 changes: 6 additions & 2 deletions test/gui/shared/scripts/helpers/FilesHelper.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ def get_size_in_bytes(size):
if size_unit == "kb":
return size_num * multiplier
if size_unit == "mb":
return size_num * (multiplier**2)
return size_num * (multiplier ** 2)
if size_unit == "gb":
return size_num * (multiplier**3)
return size_num * (multiplier ** 3)

raise Exception("Invalid size: " + size)

Expand All @@ -91,3 +91,7 @@ def get_file_size_on_disk(resource_path):
raise Exception(
"'get_file_size_on_disk' function is only supported for Windows OS."
)


def get_file_size(resource_path):
return os.stat(resource_path).st_size
57 changes: 57 additions & 0 deletions test/gui/shared/scripts/pageObjects/SyncConnection.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import names
import squish
import object
import os

from helpers.ConfigHelper import get_config
from helpers.SetupClientHelper import getResourcePath


class SyncConnection:
Expand All @@ -22,6 +25,12 @@ class SyncConnection:
"visible": 1,
"window": names.disable_virtual_file_support_QMessageBox,
}
SELECTIVE_SYNC_APPLY_BUTTON = {
"container": names.settings_stack_QStackedWidget,
"name": "selectiveSyncApply",
"type": "QPushButton",
"visible": 1,
}

@staticmethod
def openMenu():
Expand Down Expand Up @@ -62,3 +71,51 @@ def disableVFS():
@staticmethod
def hasMenuItem(item):
return squish.waitForObjectItem(SyncConnection.MENU, item)

@staticmethod
def menu_item_exists(menuItem):
obj = SyncConnection.MENU.copy()
obj.update({"type": "QAction", "text": menuItem})
return object.exists(obj)

@staticmethod
def enable_selective_sync():
SyncConnection.openMenu()
SyncConnection.performAction("Choose what to sync")

@staticmethod
def get_dir_size(folder_path):
size = 0
for ele in os.scandir(folder_path):
size += os.path.getsize(ele)
return size

@staticmethod
def convert_bytes(bytes):
suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
index = 0
while bytes >= 1024 and index < len(suffixes) - 1:
bytes /= 1024.0
index += 1
return f"{bytes:.0f} {suffixes[index]}"

@staticmethod
def unselect_folder_in_sync_connection(folder_name):
resource_path = getResourcePath(folder_name)
file_size = SyncConnection.get_dir_size(resource_path)
size = SyncConnection.convert_bytes(file_size)
squish.mouseClick(
squish.waitForObjectItem(
SyncConnection.FOLDER_SYNC_CONNECTION,
f'{get_config("syncConnectionName")}.{folder_name} ({size})',
),
9,
9,
squish.Qt.NoModifier,
squish.Qt.LeftButton,
)
# wait 500ms for apply button to fully load
squish.snooze(0.1)
squish.clickButton(
squish.waitForObject(SyncConnection.SELECTIVE_SYNC_APPLY_BUTTON)
)
17 changes: 16 additions & 1 deletion test/gui/shared/steps/sync_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
from pageObjects.Activity import Activity
from pageObjects.Settings import Settings

from helpers.SetupClientHelper import getResourcePath
from helpers.ConfigHelper import get_config, isWindows
from helpers.SyncHelper import (
waitForFileOrFolderToSync,
Expand Down Expand Up @@ -61,6 +60,16 @@ def step(context, item):
SyncConnection.hasMenuItem(item)


@Then('the "|any|" button should not be available')
def step(context, item):
SyncConnection.openMenu()
test.compare(
SyncConnection.menu_item_exists(item),
False,
f'Menu item "{item}" does not exist.',
)


@When("the user disables virtual file support")
def step(context):
SyncConnection.disableVFS()
Expand Down Expand Up @@ -200,3 +209,9 @@ def step(context, action):
if isWindows():
action = action.rstrip("s")
SyncConnectionWizard.enableOrDisableVfsSupport(action)


@When('user unselects a folder "|any|" in selective sync')
def step(context, folder_name):
SyncConnection.enable_selective_sync()
SyncConnection.unselect_folder_in_sync_connection(folder_name)
4 changes: 2 additions & 2 deletions test/gui/shared/steps/vfs_context.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from helpers.FilesHelper import get_file_size_on_disk
from helpers.FilesHelper import get_file_size_on_disk, get_file_size


@Then('the placeholder of file "|any|" should exist on the file system')
Expand All @@ -14,7 +14,7 @@ def step(context, file_name):
def step(context, file_name):
resource_path = getResourcePath(file_name)
size_on_disk = get_file_size_on_disk(resource_path)
file_size = os.stat(resource_path).st_size
file_size = get_file_size(resource_path)
test.compare(
size_on_disk,
file_size,
Expand Down
20 changes: 12 additions & 8 deletions test/gui/tst_vfs/test.feature
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,24 @@ Feature: Enable/disable virtual file support
And user "Alice" has uploaded file with content "ownCloud" to "testFile.txt" in the server
And user "Alice" has created folder "folder1" in the server
And user "Alice" has uploaded file with content "some contents" to "folder1/lorem.txt" in the server
And user "Alice" has created folder "folder2" in the server
And user "Alice" has uploaded file with content "content" to "folder2/lorem.txt" in the server
And user "Alice" has set up a client with default settings
Then the placeholder of file "testFile.txt" should exist on the file system
And the placeholder of file "folder1/lorem.txt" should exist on the file system
And the placeholder of file "folder2/lorem.txt" should exist on the file system
And the "Choose what to sync" button should not be available
When the user disables virtual file support
Then the "Enable virtual file support..." button should be available
And the file "testFile.txt" should be downloaded
And the file "folder1/lorem.txt" should be downloaded
And the file "testFile.txt" should exist on the file system with the following content
"""
ownCloud
"""
And the file "folder1/lorem.txt" should exist on the file system with the following content
"""
some contents
"""
And the file "folder2/lorem.txt" should be downloaded
When user unselects a folder "folder1" in selective sync
And the user waits for the files to sync
Then the folder "folder1" should not exist on the file system
And the file "folder2/lorem.txt" should exist on the file system
When the user enables virtual file support
Then the "Disable virtual file support..." button should be available
And the placeholder of file "folder1/lorem.txt" should exist on the file system
And the file "testFile.txt" should be downloaded
And the file "folder2/lorem.txt" should be downloaded

0 comments on commit bc1b530

Please sign in to comment.