Initial QSfera import
This commit is contained in:
@@ -0,0 +1,236 @@
|
||||
import os
|
||||
from types import SimpleNamespace
|
||||
from appium.webdriver.common.appiumby import AppiumBy as By
|
||||
|
||||
from helpers.WebUIHelper import authorize_via_webui
|
||||
from helpers.ConfigHelper import get_config
|
||||
from helpers.SetupClientHelper import (
|
||||
create_user_sync_path,
|
||||
get_temp_resource_path,
|
||||
set_current_user_sync_path,
|
||||
)
|
||||
from helpers.SyncHelper import listen_sync_status_for_item
|
||||
from helpers.AppHelper import app
|
||||
|
||||
|
||||
class AccountConnectionWizard:
|
||||
SERVER_ADDRESS_BOX = SimpleNamespace(
|
||||
by=By.ACCESSIBILITY_ID,
|
||||
selector="QApplication.Settings.centralwidget.dialogStack.SetupWizardWidget.contentWidget.ServerUrlSetupWizardPage.urlLineEdit",
|
||||
)
|
||||
NEXT_BUTTON = SimpleNamespace(
|
||||
by=By.ACCESSIBILITY_ID,
|
||||
selector="QApplication.Settings.centralwidget.dialogStack.SetupWizardWidget.nextButton",
|
||||
)
|
||||
ACCEPT_CERTIFICATE_YES = SimpleNamespace(
|
||||
by=By.NAME,
|
||||
selector="Yes",
|
||||
)
|
||||
SELECT_LOCAL_FOLDER = SimpleNamespace(by=None, selector=None)
|
||||
DIRECTORY_NAME_BOX = SimpleNamespace(
|
||||
by=By.ACCESSIBILITY_ID,
|
||||
selector="QApplication.Settings.centralwidget.dialogStack.SetupWizardWidget.contentWidget.AccountConfiguredWizardPage.advancedConfigGroupBox.advancedConfigGroupBoxContentWidget.localDirectoryGroupBox.chooseLocalDirectoryButton",
|
||||
)
|
||||
CHOOSE_FOLDER_BUTTON = SimpleNamespace(by=By.NAME, selector="Choose")
|
||||
OAUTH_CREDENTIAL_PAGE = SimpleNamespace(by=None, selector=None)
|
||||
COPY_URL_TO_CLIPBOARD_BUTTON = SimpleNamespace(
|
||||
by=By.NAME,
|
||||
selector="Copy URL",
|
||||
)
|
||||
CONF_SYNC_MANUALLY_RADIO_BUTTON = SimpleNamespace(
|
||||
by=By.NAME, selector="Configure synchronization manually"
|
||||
)
|
||||
ADVANCED_CONFIGURATION_CHECKBOX = SimpleNamespace(
|
||||
by=By.NAME,
|
||||
selector="Advanced configuration",
|
||||
)
|
||||
DIRECTORY_NAME_EDIT_BOX = SimpleNamespace(
|
||||
by=By.ACCESSIBILITY_ID,
|
||||
selector="QApplication.QFileDialog.fileNameEdit",
|
||||
)
|
||||
SYNC_EVERYTHING_RADIO_BUTTON = SimpleNamespace(by=None, selector=None)
|
||||
|
||||
@staticmethod
|
||||
def add_server(server_url):
|
||||
url_input = app().find_element(
|
||||
AccountConnectionWizard.SERVER_ADDRESS_BOX.by,
|
||||
AccountConnectionWizard.SERVER_ADDRESS_BOX.selector,
|
||||
)
|
||||
url_input.clear()
|
||||
url_input.send_keys(get_config("localBackendUrl"))
|
||||
|
||||
AccountConnectionWizard.next_step()
|
||||
|
||||
@staticmethod
|
||||
def accept_certificate():
|
||||
buttons = app().find_elements(
|
||||
AccountConnectionWizard.ACCEPT_CERTIFICATE_YES.by,
|
||||
AccountConnectionWizard.ACCEPT_CERTIFICATE_YES.selector,
|
||||
)
|
||||
# click the last button
|
||||
last_button = buttons.pop()
|
||||
last_button.click()
|
||||
|
||||
@staticmethod
|
||||
def add_user_credentials(username, password):
|
||||
AccountConnectionWizard.oidc_login(username, password)
|
||||
|
||||
@staticmethod
|
||||
def oidc_login(username, password):
|
||||
AccountConnectionWizard.browser_login(username, password)
|
||||
|
||||
@staticmethod
|
||||
def copy_login_url():
|
||||
app().find_element(
|
||||
AccountConnectionWizard.COPY_URL_TO_CLIPBOARD_BUTTON.by,
|
||||
AccountConnectionWizard.COPY_URL_TO_CLIPBOARD_BUTTON.selector,
|
||||
).click()
|
||||
|
||||
@staticmethod
|
||||
def browser_login(username, password):
|
||||
AccountConnectionWizard.copy_login_url()
|
||||
authorize_via_webui(username, password)
|
||||
|
||||
@staticmethod
|
||||
def next_step():
|
||||
app().find_element(
|
||||
AccountConnectionWizard.NEXT_BUTTON.by,
|
||||
AccountConnectionWizard.NEXT_BUTTON.selector,
|
||||
).click()
|
||||
|
||||
@staticmethod
|
||||
def select_sync_folder(user):
|
||||
# create sync folder for user
|
||||
sync_path = create_user_sync_path(user)
|
||||
|
||||
AccountConnectionWizard.select_advanced_config()
|
||||
app().find_element(
|
||||
AccountConnectionWizard.DIRECTORY_NAME_BOX.by,
|
||||
AccountConnectionWizard.DIRECTORY_NAME_BOX.selector,
|
||||
).click()
|
||||
dir_location_input = app().find_element(
|
||||
AccountConnectionWizard.DIRECTORY_NAME_EDIT_BOX.by,
|
||||
AccountConnectionWizard.DIRECTORY_NAME_EDIT_BOX.selector,
|
||||
)
|
||||
dir_location_input.clear()
|
||||
dir_location_input.send_keys(sync_path)
|
||||
app().find_element(
|
||||
AccountConnectionWizard.CHOOSE_FOLDER_BUTTON.by,
|
||||
AccountConnectionWizard.CHOOSE_FOLDER_BUTTON.selector,
|
||||
).click()
|
||||
return os.path.join(sync_path, get_config('syncConnectionName'))
|
||||
|
||||
@staticmethod
|
||||
def set_temp_folder_as_sync_folder(folder_name):
|
||||
sync_path = get_temp_resource_path(folder_name)
|
||||
|
||||
# clear the current path
|
||||
squish.mouseClick(
|
||||
squish.waitForObject(AccountConnectionWizard.SELECT_LOCAL_FOLDER)
|
||||
)
|
||||
|
||||
squish.waitForObject(AccountConnectionWizard.SELECT_LOCAL_FOLDER).setText("")
|
||||
|
||||
squish.type(
|
||||
squish.waitForObject(AccountConnectionWizard.SELECT_LOCAL_FOLDER),
|
||||
sync_path,
|
||||
)
|
||||
set_current_user_sync_path(sync_path)
|
||||
return sync_path
|
||||
|
||||
@staticmethod
|
||||
def add_account(account_details):
|
||||
AccountConnectionWizard.add_account_information(account_details)
|
||||
AccountConnectionWizard.next_step()
|
||||
|
||||
@staticmethod
|
||||
def add_account_information(account_details):
|
||||
if account_details["server"]:
|
||||
AccountConnectionWizard.add_server(account_details["server"])
|
||||
AccountConnectionWizard.accept_certificate()
|
||||
if account_details["user"]:
|
||||
AccountConnectionWizard.add_user_credentials(
|
||||
account_details["user"],
|
||||
account_details["password"],
|
||||
)
|
||||
sync_path = ""
|
||||
if account_details["sync_folder"]:
|
||||
AccountConnectionWizard.select_advanced_config()
|
||||
sync_path = AccountConnectionWizard.set_temp_folder_as_sync_folder(
|
||||
account_details["sync_folder"]
|
||||
)
|
||||
elif account_details["user"]:
|
||||
sync_path = AccountConnectionWizard.select_sync_folder(
|
||||
account_details["user"]
|
||||
)
|
||||
if sync_path:
|
||||
# listen for sync status
|
||||
listen_sync_status_for_item(sync_path)
|
||||
|
||||
@staticmethod
|
||||
def select_manual_sync_folder_option():
|
||||
app().find_element(
|
||||
AccountConnectionWizard.CONF_SYNC_MANUALLY_RADIO_BUTTON.by,
|
||||
AccountConnectionWizard.CONF_SYNC_MANUALLY_RADIO_BUTTON.selector,
|
||||
).click()
|
||||
|
||||
@staticmethod
|
||||
def select_download_everything_option():
|
||||
squish.clickButton(
|
||||
squish.waitForObject(AccountConnectionWizard.SYNC_EVERYTHING_RADIO_BUTTON)
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def is_new_connection_window_visible():
|
||||
visible = False
|
||||
try:
|
||||
squish.waitForObject(AccountConnectionWizard.SERVER_ADDRESS_BOX)
|
||||
visible = True
|
||||
except:
|
||||
pass
|
||||
return visible
|
||||
|
||||
@staticmethod
|
||||
def is_credential_window_visible():
|
||||
visible = False
|
||||
try:
|
||||
squish.waitForObject(AccountConnectionWizard.OAUTH_CREDENTIAL_PAGE)
|
||||
visible = True
|
||||
except:
|
||||
pass
|
||||
return visible
|
||||
|
||||
@staticmethod
|
||||
def select_advanced_config():
|
||||
app().find_element(
|
||||
AccountConnectionWizard.ADVANCED_CONFIGURATION_CHECKBOX.by,
|
||||
AccountConnectionWizard.ADVANCED_CONFIGURATION_CHECKBOX.selector,
|
||||
).click()
|
||||
|
||||
@staticmethod
|
||||
def can_change_local_sync_dir():
|
||||
can_change = False
|
||||
try:
|
||||
squish.waitForObjectExists(AccountConnectionWizard.SELECT_LOCAL_FOLDER)
|
||||
squish.clickButton(
|
||||
squish.waitForObject(AccountConnectionWizard.DIRECTORY_NAME_BOX)
|
||||
)
|
||||
squish.waitForObjectExists(AccountConnectionWizard.CHOOSE_FOLDER_BUTTON)
|
||||
can_change = True
|
||||
except:
|
||||
pass
|
||||
return can_change
|
||||
|
||||
@staticmethod
|
||||
def is_sync_everything_option_checked():
|
||||
return squish.waitForObjectExists(
|
||||
AccountConnectionWizard.SYNC_EVERYTHING_RADIO_BUTTON
|
||||
).checked
|
||||
|
||||
@staticmethod
|
||||
def get_local_sync_path():
|
||||
return str(
|
||||
squish.waitForObjectExists(
|
||||
AccountConnectionWizard.SELECT_LOCAL_FOLDER
|
||||
).displayText
|
||||
)
|
||||
Reference in New Issue
Block a user