diff --git a/extras/ci/client-qt-gnulinux/Jenkinsfile b/extras/ci/client-qt-gnulinux/Jenkinsfile
new file mode 100644
index 00000000..006f3226
--- /dev/null
+++ b/extras/ci/client-qt-gnulinux/Jenkinsfile
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2022 Savoir-faire Linux Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * .
+ */
+
+// Requirements:
+// - gerrit-trigger plugin
+// - Docker plugin
+// - ansicolor plugin
+
+pipeline {
+ agent 'jami-buildmachine-04.mtl.sfl'
+
+ triggers {
+ gerrit customUrl: '',
+ gerritProjects: [
+ [branches: [[compareType: 'PLAIN', pattern: 'master']],
+ compareType: 'PLAIN',
+ disableStrictForbiddenFileVerification: false,
+ pattern: 'jami-client-qt']],
+ triggerOnEvents: [
+ commentAddedContains('!build'),
+ patchsetCreated(excludeDrafts: true, excludeNoCodeChange: true,
+ excludeTrivialRebase: true)]
+ }
+
+ options {
+ ansiColor('xterm')
+ }
+
+ parameters {
+ string(name: 'GERRIT_REFSPEC',
+ defaultValue: 'refs/heads/master',
+ description: 'The Gerrit refspec to fetch.')
+ }
+
+ def cpuCount = sh returnStdout: true, script: 'nproc || echo -n 4'
+
+ stage('SCM Checkout') {
+ deleteDir()
+ // Checkout jami-project to obtain daemon/LRC/client-qt repositories
+ sh """
+
+ git clone --depth=1 --branch=master https://${JAMI_GERRIT_URL}/jami-project
+ cd jami-project
+ # git submodule update --init daemon lrc client-qt
+ git submodule update --init daemon client-qt
+ git submodule foreach 'git checkout master'
+
+ cd client-qt
+ git fetch "https://${JAMI_GERRIT_URL}/jami-client-qt" ${GERRIT_REFSPEC}
+ git checkout FETCH_HEAD
+ git submodule update --init --recursive
+ cd ..
+ """
+ topDir = pwd() + '/jami-project'
+ }
+
+ dir (topDir) {
+ stage('Building Docker Image') {
+ docker.build('client-validation', "-f client-qt/extras/build/docker/Dockerfile.client-qt-gnulinux --no-cache .")
+ }
+
+ def jenkinsUID = sh(returnStdout: true, script: 'id -u jenkins').replaceAll("\n", '').trim()
+ def jenkinsGID = sh(returnStdout: true, script: 'id -g jenkins').replaceAll("\n", '').trim()
+ def jenkinsUser = jenkinsUID+':'+jenkinsGID
+
+ docker.image('client-validation').withRun('-t -u '+jenkinsUser+' -v '+pwd()+':/foo:rw -w /foo -e BATCH_MODE=1', '/bin/bash') {
+ container -> code:{
+ def base_cmd = 'docker exec -t '+container.id+" sh -c '"
+ def exec_cmd = { cmd -> sh base_cmd+cmd+"'" }
+
+ def dockerTopDir = '/foo'
+ def daemonDir = dockerTopDir + '/daemon'
+ def clientDir = dockerTopDir + '/client-qt'
+ def installDir = dockerTopDir + '/install'
+
+ stage('Build Client') {
+ ansiColor('css') {
+ exec_cmd("""
+ cd ${clientDir}
+ mkdir build
+ cd build
+ cmake .. -DCMAKE_INSTALL_PREFIX=${installDir}/client-qt \
+ -DLIBJAMI_INCLUDE_DIR=${daemonDir}/src/jami \
+ -DLIBJAMI_XML_INTERFACES_DIR=${daemonDir}/bin/dbus \
+ -DCMAKE_PREFIX_PATH=/usr/lib/libqt-jami \
+ -DENABLE_TESTS=True
+ make -j${cpuCount}
+ make install
+ """)
+ }
+ }
+
+ stage('Run Tests') {
+ ansiColor('css') {
+ exec_cmd("""
+ cd ${clientDir}
+ cd tests/qml
+ ../../../build/tests/qml_tests
+ """)
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/app/mainview/components/ChatView.qml b/src/app/mainview/components/ChatView.qml
index dfd7f73f..31c0e7f7 100644
--- a/src/app/mainview/components/ChatView.qml
+++ b/src/app/mainview/components/ChatView.qml
@@ -39,6 +39,12 @@ Rectangle {
signal messagesCleared
signal messagesLoaded
+ onVisibleChanged: {
+ if (visible)
+ return
+ UtilsAdapter.clearInteractionsCache(CurrentAccount.id, CurrentConversation.id)
+ }
+
function focusChatView() {
chatViewFooter.textInput.forceActiveFocus()
swarmDetailsPanel.visible = false
diff --git a/src/app/wizardview/components/CreateAccountPage.qml b/src/app/wizardview/components/CreateAccountPage.qml
index 6eef4ad4..963d6fb5 100644
--- a/src/app/wizardview/components/CreateAccountPage.qml
+++ b/src/app/wizardview/components/CreateAccountPage.qml
@@ -246,6 +246,8 @@ Rectangle {
NoUsernamePopup {
id: popup
+ objectName: "popup"
+
visible: false
onJoinClicked: {
diff --git a/src/app/wizardview/components/CreateSIPAccountPage.qml b/src/app/wizardview/components/CreateSIPAccountPage.qml
index 866128b5..62589639 100644
--- a/src/app/wizardview/components/CreateSIPAccountPage.qml
+++ b/src/app/wizardview/components/CreateSIPAccountPage.qml
@@ -73,7 +73,6 @@ Rectangle {
ColumnLayout {
id: createSIPAccountPageColumnLayout
-
spacing: JamiTheme.wizardViewPageLayoutSpacing
anchors.horizontalCenter: parent.horizontalCenter
diff --git a/src/app/wizardview/components/NoUsernamePopup.qml b/src/app/wizardview/components/NoUsernamePopup.qml
index 077426fc..434affc5 100644
--- a/src/app/wizardview/components/NoUsernamePopup.qml
+++ b/src/app/wizardview/components/NoUsernamePopup.qml
@@ -95,6 +95,7 @@ Popup {
Layout.alignment: Qt.AlignCenter
MaterialButton {
+ objectName: "joinButton"
preferredWidth: text.contentWidth
textLeftPadding: JamiTheme.buttontextPadding
textRightPadding: JamiTheme.buttontextPadding
diff --git a/tests/qml/src/tst_WizardView.qml b/tests/qml/src/tst_WizardView.qml
index 6a4f971d..ab7df242 100644
--- a/tests/qml/src/tst_WizardView.qml
+++ b/tests/qml/src/tst_WizardView.qml
@@ -88,158 +88,23 @@ WizardView {
signalName: "visibleChanged"
}
- TestCase {
- name: "WelcomePage to different account creation page and return back"
- when: windowShown
-
- function test_welcomePageStepInStepOut() {
- var controlPanelStackView = findChild(uut, "controlPanelStackView")
-
- var welcomePage = findChild(uut, "welcomePage")
- var createAccountPage = findChild(uut, "createAccountPage")
- var importFromDevicePage = findChild(uut, "importFromDevicePage")
- var importFromBackupPage = findChild(uut, "importFromBackupPage")
- var connectToAccountManagerPage = findChild(uut, "connectToAccountManagerPage")
- var createSIPAccountPage = findChild(uut, "createSIPAccountPage")
-
- // WelcomePage initially
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to createAccount page
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.CreateJamiAccount)
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- createAccountPage)
- WizardViewStepModel.previousStep()
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to CreateRendezVous page
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.CreateRendezVous)
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- createAccountPage)
- WizardViewStepModel.previousStep()
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to CreateRendezVous page
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.ImportFromDevice)
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- importFromDevicePage)
- WizardViewStepModel.previousStep()
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to ImportFromBackup page
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.ImportFromBackup)
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- importFromBackupPage)
- WizardViewStepModel.previousStep()
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to ConnectToAccountManager page
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.ConnectToAccountManager)
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- connectToAccountManagerPage)
- WizardViewStepModel.previousStep()
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to CreateSipAccount page
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.CreateSipAccount)
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- createSIPAccountPage)
- WizardViewStepModel.previousStep()
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
- }
-
- function test_createAccountPageStepInStepOut() {
- var controlPanelStackView = findChild(uut, "controlPanelStackView")
- var welcomePage = findChild(uut, "welcomePage")
- var createAccountPage = findChild(uut, "createAccountPage")
-
- var createAccountStack = findChild(createAccountPage, "createAccountStack")
- var passwordSetupPage = findChild(createAccountPage, "passwordSetupPage")
- var nameRegistrationPage = findChild(createAccountPage, "nameRegistrationPage")
-
- // WelcomePage initially
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to createAccount page
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.CreateJamiAccount)
- compare(createAccountPage.isRendezVous, false)
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- createAccountPage)
- compare(createAccountStack.currentIndex, nameRegistrationPage.stackIndex)
-
- // Go to passwordSetup page
- WizardViewStepModel.nextStep()
- compare(createAccountStack.currentIndex, passwordSetupPage.stackIndex)
-
- // Back
- WizardViewStepModel.previousStep()
- compare(createAccountStack.currentIndex, nameRegistrationPage.stackIndex)
- WizardViewStepModel.previousStep()
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to CreateRendezVous page (createAccount)
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.CreateRendezVous)
- compare(createAccountPage.isRendezVous, true)
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- createAccountPage)
- compare(createAccountStack.currentIndex, nameRegistrationPage.stackIndex)
-
- // Go to passwordSetup page
- WizardViewStepModel.nextStep()
- compare(createAccountStack.currentIndex, passwordSetupPage.stackIndex)
-
- // Back
- WizardViewStepModel.previousStep()
- compare(createAccountStack.currentIndex, nameRegistrationPage.stackIndex)
- WizardViewStepModel.previousStep()
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
- }
- }
-
TestCase {
name: "Create Jami account ui flow (no registered name)"
when: windowShown
- function test_createJamiAccountUiFlow() {
+ function test_createEmptyJamiAccountUiFlow() {
uut.clearSignalSpy()
var controlPanelStackView = findChild(uut, "controlPanelStackView")
var welcomePage = findChild(uut, "welcomePage")
var createAccountPage = findChild(uut, "createAccountPage")
- var profilePage = findChild(uut, "profilePage")
- var backupKeysPage = findChild(uut, "backupKeysPage")
var usernameEdit = findChild(createAccountPage, "usernameEdit")
+ var popup = findChild(createAccountPage, "popup")
+ var joinButton = findChild(popup, "joinButton")
var createAccountStack = findChild(createAccountPage, "createAccountStack")
- var passwordSwitch = findChild(createAccountPage, "passwordSwitch")
- var passwordEdit = findChild(createAccountPage, "passwordEdit")
- var passwordConfirmEdit = findChild(createAccountPage, "passwordConfirmEdit")
- var createAccountButton = findChild(createAccountPage, "createAccountButton")
-
- var aliasEdit = findChild(profilePage, "aliasEdit")
- var saveProfileBtn = findChild(profilePage, "saveProfileBtn")
-
- var password = "test110"
- var aliasText = "test101"
+ var chooseUsernameButton = findChild(createAccountPage, "chooseUsernameButton")
// WelcomePage initially
compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
@@ -249,153 +114,25 @@ WizardView {
WizardViewStepModel.startAccountCreationFlow(
WizardViewStepModel.AccountCreationOption.CreateJamiAccount)
compare(createAccountStack.currentIndex, 0)
- compare(usernameEdit.focus, true)
- // Go to set up password page
- WizardViewStepModel.nextStep()
- compare(createAccountStack.currentIndex, 1)
- passwordSwitch.checked = true
- compare(passwordEdit.focus, true)
- passwordEdit.text = password
- passwordConfirmEdit.text = password
- createAccountButton.clicked()
+ compare(usernameEdit.visible, true)
+
+ // This will show the popup because no username
+ compare(popup.visible, false)
+ chooseUsernameButton.clicked()
+ compare(popup.visible, true)
+ compare(joinButton.visible, true)
+
+ // Create jami account
+ joinButton.clicked()
// Wait until the account creation is finished
spyAccountIsReady.wait()
compare(spyAccountIsReady.count, 1)
- // Now we are in profile page
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- profilePage)
- compare(aliasEdit.focus, true)
-
spyAccountConfigFinalized.wait()
compare(spyAccountConfigFinalized.count, 1)
- aliasEdit.text = aliasText
- saveProfileBtn.clicked()
-
- var showBackup = (WizardViewStepModel.accountCreationOption ===
- WizardViewStepModel.AccountCreationOption.CreateJamiAccount
- || WizardViewStepModel.accountCreationOption ===
- WizardViewStepModel.AccountCreationOption.CreateRendezVous)
- && !AppSettingsManager.getValue(Settings.NeverShowMeAgain)
- if (showBackup) {
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- backupKeysPage)
- WizardViewStepModel.nextStep()
- }
-
- spyCloseWizardView.wait()
- compare(spyCloseWizardView.count, 1)
-
- // Check alias text
- compare(CurrentAccount.alias, aliasText)
-
- spyAccountStatusChanged.clear()
-
- // Check if password is set
- compare(AccountAdapter.savePassword(LRCInstance.currentAccountId, password, "test"),
- true)
-
- // Wait until the account status change is finished
- spyAccountStatusChanged.wait()
- verify(spyAccountStatusChanged.count >= 1)
-
- AccountAdapter.deleteCurrentAccount()
-
- // Wait until the account removal is finished
- spyAccountIsRemoved.wait()
- compare(spyAccountIsRemoved.count, 1)
- }
-
- function test_createRendezVousAccountUiFlow() {
- uut.clearSignalSpy()
-
- var controlPanelStackView = findChild(uut, "controlPanelStackView")
-
- var welcomePage = findChild(uut, "welcomePage")
- var createAccountPage = findChild(uut, "createAccountPage")
- var profilePage = findChild(uut, "profilePage")
- var backupKeysPage = findChild(uut, "backupKeysPage")
-
- var usernameEdit = findChild(createAccountPage, "usernameEdit")
- var createAccountStack = findChild(createAccountPage, "createAccountStack")
- var passwordSwitch = findChild(createAccountPage, "passwordSwitch")
- var passwordEdit = findChild(createAccountPage, "passwordEdit")
- var passwordConfirmEdit = findChild(createAccountPage, "passwordConfirmEdit")
- var createAccountButton = findChild(createAccountPage, "createAccountButton")
-
- var aliasEdit = findChild(profilePage, "aliasEdit")
- var saveProfileBtn = findChild(profilePage, "saveProfileBtn")
-
- var password = "test110"
- var aliasText = "test101"
-
- // WelcomePage initially
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to createRendezVous page
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.CreateRendezVous)
- compare(createAccountStack.currentIndex, 0)
- compare(usernameEdit.focus, true)
-
- // Go to set up password page
- WizardViewStepModel.nextStep()
- compare(createAccountStack.currentIndex, 1)
- passwordSwitch.checked = true
- compare(passwordEdit.focus, true)
- passwordEdit.text = password
- passwordConfirmEdit.text = password
- createAccountButton.clicked()
-
- // Wait until the account creation is finished
- spyAccountIsReady.wait()
- compare(spyAccountIsReady.count, 1)
-
- // Now we are in profile page
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- profilePage)
- compare(aliasEdit.focus, true)
-
- spyAccountConfigFinalized.wait()
- compare(spyAccountConfigFinalized.count, 1)
-
- // Check if it is a RendezVous acc
- compare(CurrentAccount.isRendezVous, true)
-
- aliasEdit.text = aliasText
- saveProfileBtn.clicked()
-
- var showBackup = (WizardViewStepModel.accountCreationOption ===
- WizardViewStepModel.AccountCreationOption.CreateJamiAccount
- || WizardViewStepModel.accountCreationOption ===
- WizardViewStepModel.AccountCreationOption.CreateRendezVous)
- && !AppSettingsManager.getValue(Settings.NeverShowMeAgain)
- if (showBackup) {
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- backupKeysPage)
- WizardViewStepModel.nextStep()
- }
-
- spyCloseWizardView.wait()
- compare(spyCloseWizardView.count, 1)
-
- // Check alias text
- compare(CurrentAccount.alias, aliasText)
-
- spyAccountStatusChanged.clear()
-
- // Check if password is set
- compare(AccountAdapter.savePassword(LRCInstance.currentAccountId, password, "test"),
- true)
-
- // Wait until the account status change is finished
- spyAccountStatusChanged.wait()
- verify(spyAccountStatusChanged.count >= 1)
-
AccountAdapter.deleteCurrentAccount()
// Wait until the account removal is finished
@@ -405,1180 +142,42 @@ WizardView {
}
TestCase {
- name: "Create Sip account ui flow"
+ name: "Create SIP account ui flow"
when: windowShown
- function test_createSipAccountUiFlow() {
+ function test_createEmptyJamiAccountUiFlow() {
uut.clearSignalSpy()
var controlPanelStackView = findChild(uut, "controlPanelStackView")
var welcomePage = findChild(uut, "welcomePage")
var createSIPAccountPage = findChild(uut, "createSIPAccountPage")
- var profilePage = findChild(uut, "profilePage")
- var sipUsernameEdit = findChild(createSIPAccountPage, "sipUsernameEdit")
- var sipPasswordEdit = findChild(createSIPAccountPage, "sipPasswordEdit")
var sipServernameEdit = findChild(createSIPAccountPage, "sipServernameEdit")
- var sipProxyEdit = findChild(createSIPAccountPage, "sipProxyEdit")
- var createAccountButton = findChild(createSIPAccountPage, "createSIPAccountButton")
-
- var saveProfileBtn = findChild(profilePage, "saveProfileBtn")
+ var createAccountStack = findChild(createSIPAccountPage, "createAccountStack")
+ var createSIPAccountButton = findChild(createSIPAccountPage, "createSIPAccountButton")
// WelcomePage initially
compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
welcomePage)
- // Go to createSipAccount page
+ // Go to createAccount page
WizardViewStepModel.startAccountCreationFlow(
WizardViewStepModel.AccountCreationOption.CreateSipAccount)
- compare(sipServernameEdit.focus, true)
+ compare(createAccountStack.currentIndex, 0)
- // Set up paras
- var userName = "testUserName"
- var serverName = "testServerName"
- var password = "testPassword"
- var proxy = "testProxy"
+ compare(sipServernameEdit.visible, true)
- sipUsernameEdit.text = userName
- sipPasswordEdit.text = password
- sipServernameEdit.text = serverName
- sipProxyEdit.text = proxy
-
- createAccountButton.clicked()
+ // Create SIP Account
+ createSIPAccountButton.clicked()
// Wait until the account creation is finished
spyAccountIsReady.wait()
compare(spyAccountIsReady.count, 1)
- // Now we are in profile page
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- profilePage)
-
spyAccountConfigFinalized.wait()
compare(spyAccountConfigFinalized.count, 1)
- // Check if paras match with setup
- compare(CurrentAccount.routeset, proxy)
- compare(CurrentAccount.username, userName)
- compare(CurrentAccount.hostname, serverName)
- compare(CurrentAccount.password, password)
-
- WizardViewStepModel.nextStep()
-
- spyCloseWizardView.wait()
- compare(spyCloseWizardView.count, 1)
-
- AccountAdapter.deleteCurrentAccount()
-
- // Wait until the account removal is finished
- spyAccountIsRemoved.wait()
- compare(spyAccountIsRemoved.count, 1)
- }
- }
-
- TestCase {
- name: "Create Jami account from backup ui flow"
- when: windowShown
-
- function test_createJamiAccountFromBackupUiFlow() {
- uut.clearSignalSpy()
-
- var controlPanelStackView = findChild(uut, "controlPanelStackView")
-
- var welcomePage = findChild(uut, "welcomePage")
- var importFromBackupPage = findChild(uut, "importFromBackupPage")
- var profilePage = findChild(uut, "profilePage")
-
- var passwordFromBackupEdit = findChild(importFromBackupPage, "passwordFromBackupEdit")
- var connectBtn = findChild(importFromBackupPage, "importFromBackupPageConnectBtn")
- var errorLabel = findChild(importFromBackupPage, "errorLabel")
- var backButton = findChild(importFromBackupPage, "importFromBackupPageBackButton")
-
- // WelcomePage initially
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to importFromBackup page
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.ImportFromBackup)
-
- spyBackButtonVisible.target = backButton
-
- compare(passwordFromBackupEdit.focus, true)
-
- var fileName = "gz_test.gz"
- var password = "qqq"
- importFromBackupPage.filePath = UtilsAdapter.toFileAbsolutepath(
- "tests/qml/src/resources/gz_test.gz") + "/" + fileName
-
- compare(connectBtn.enabled, true)
-
- // Create without password
- connectBtn.clicked()
- spyReportFailure.wait()
- verify(spyReportFailure.count >= 1)
- spyBackButtonVisible.wait()
- verify(spyBackButtonVisible.count >= 2)
- spyBackButtonVisible.clear()
-
- compare(importFromBackupPage.errorText, JamiStrings.errorCreateAccount)
- compare(errorLabel.visible, true)
-
- // Recreate with password
- passwordFromBackupEdit.text = password
- connectBtn.clicked()
-
- // Wait until the account creation is finished
- spyAccountIsReady.wait()
- compare(spyAccountIsReady.count, 1)
- spyAccountConfigFinalized.wait()
- compare(spyAccountConfigFinalized.count, 1)
- spyCloseWizardView.wait()
- compare(spyCloseWizardView.count, 1)
-
- AccountAdapter.deleteCurrentAccount()
-
- // Wait until the account removal is finished
- spyAccountIsRemoved.wait()
- compare(spyAccountIsRemoved.count, 1)
- }
- }
-
- TestCase {
- name: "Wizardview key navigation"
- when: windowShown
-
- function test_welcomePageKeyNavigation() {
- var welcomePage = findChild(uut, "welcomePage")
-
- var newAccountButton = findChild(welcomePage, "newAccountButton")
- var newRdvButton = findChild(welcomePage, "newRdvButton")
- var fromDeviceButton = findChild(welcomePage, "fromDeviceButton")
- var fromBackupButton = findChild(welcomePage, "fromBackupButton")
- var showAdvancedButton = findChild(welcomePage, "showAdvancedButton")
- var connectAccountManagerButton = findChild(welcomePage, "connectAccountManagerButton")
- var newSIPAccountButton = findChild(welcomePage, "newSIPAccountButton")
- var welcomePageBackButton = findChild(welcomePage, "welcomePageBackButton")
-
- welcomePageBackButton.visible = true
-
- // ShowAdvanced is false
- keyClick(Qt.Key_Tab)
- compare(newAccountButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(newRdvButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(fromDeviceButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(fromBackupButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(showAdvancedButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(welcomePageBackButton.focus, true)
-
- // Set showAdvanced to true
- keyClick(Qt.Key_Up)
- compare(showAdvancedButton.focus, true)
-
- keyClick(Qt.Key_Enter)
- compare(showAdvancedButton.showAdvanced, true)
-
- keyClick(Qt.Key_Tab)
- compare(connectAccountManagerButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(newSIPAccountButton.focus, true)
-
- // Use down button
- keyClick(Qt.Key_Down)
- compare(welcomePageBackButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(newAccountButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(newRdvButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(fromDeviceButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(fromBackupButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(showAdvancedButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(connectAccountManagerButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(newSIPAccountButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(welcomePageBackButton.focus, true)
-
- // Use up button
- keyClick(Qt.Key_Up)
- compare(newSIPAccountButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(connectAccountManagerButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(showAdvancedButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(fromBackupButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(fromDeviceButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(newRdvButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(newAccountButton.focus, true)
- }
-
- function test_createAccountPageKeyNavigation() {
- uut.clearSignalSpy()
-
- var welcomePage = findChild(uut, "welcomePage")
- var createAccountPage = findChild(uut, "createAccountPage")
-
- var newAccountButton = findChild(welcomePage, "newAccountButton")
-
- var usernameEdit = findChild(createAccountPage, "usernameEdit")
- var chooseUsernameButton = findChild(createAccountPage,
- "chooseUsernameButton")
- var nameRegistrationPageSkipButton = findChild(createAccountPage,
- "nameRegistrationPageSkipButton")
- var passwordEdit = findChild(createAccountPage, "passwordEdit")
- var passwordSwitch = findChild(createAccountPage, "passwordSwitch")
- var passwordConfirmEdit = findChild(createAccountPage, "passwordConfirmEdit")
- var createAccountButton = findChild(createAccountPage,
- "createAccountButton")
- var createAccountPageBackButton = findChild(createAccountPage,
- "createAccountPageBackButton")
-
- // To createAccountPage - nameRegistrationPage
- keyClick(Qt.Key_Tab)
- compare(newAccountButton.focus, true)
-
- keyClick(Qt.Key_Enter)
- compare(usernameEdit.focus, true)
-
- // No username
- keyClick(Qt.Key_Tab)
- compare(nameRegistrationPageSkipButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(usernameEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(nameRegistrationPageSkipButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(usernameEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(nameRegistrationPageSkipButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(usernameEdit.focus, true)
-
- // With username
- usernameEdit.nameRegistrationState =
- UsernameLineEdit.NameRegistrationState.FREE
-
- keyClick(Qt.Key_Tab)
- compare(chooseUsernameButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(nameRegistrationPageSkipButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(usernameEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(chooseUsernameButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(nameRegistrationPageSkipButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(usernameEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(nameRegistrationPageSkipButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(chooseUsernameButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(usernameEdit.focus, true)
-
- // To createAccountPage - passwordSetupPage
- keyClick(Qt.Key_Enter)
- keyClick(Qt.Key_Tab)
- compare(passwordSwitch.focus, true)
-
- // No password
- keyClick(Qt.Key_Tab)
- compare(createAccountButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(passwordSwitch.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(createAccountButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordSwitch.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(createAccountButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordSwitch.focus, true)
-
- // With password - no text entered
- keyClick(Qt.Key_Enter)
- compare(passwordEdit.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(passwordConfirmEdit.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(passwordSwitch.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordConfirmEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordSwitch.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordConfirmEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordSwitch.focus, true)
-
- // With password - with text entered
- passwordEdit.text = "test"
- passwordConfirmEdit.text = "test"
-
- keyClick(Qt.Key_Tab)
- compare(passwordEdit.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(passwordConfirmEdit.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(createAccountButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(passwordSwitch.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordConfirmEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(createAccountButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordSwitch.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(createAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(createAccountButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordConfirmEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordSwitch.focus, true)
-
- passwordEdit.text = ""
- passwordConfirmEdit.text = ""
-
- // Check lineEdit enter key press corrspond correctly
- keyClick(Qt.Key_Tab)
- keyClick(Qt.Key_Enter)
- keyClick(Qt.Key_Enter)
- compare(passwordConfirmEdit.focus, true)
-
- passwordEdit.text = "test"
- passwordConfirmEdit.text = "test"
-
- keyClick(Qt.Key_Enter)
-
- // Wait until the account creation is finished
- spyAccountIsReady.wait()
- compare(spyAccountIsReady.count, 1)
-
- // Go back to welcomePage
- WizardViewStepModel.nextStep()
-
- var showBackup = (WizardViewStepModel.accountCreationOption ===
- WizardViewStepModel.AccountCreationOption.CreateJamiAccount
- || WizardViewStepModel.accountCreationOption ===
- WizardViewStepModel.AccountCreationOption.CreateRendezVous)
- && !AppSettingsManager.getValue(Settings.NeverShowMeAgain)
- if (showBackup) {
- WizardViewStepModel.nextStep()
- }
-
- spyAccountConfigFinalized.wait()
- compare(spyAccountConfigFinalized.count, 1)
-
- spyCloseWizardView.wait()
- compare(spyCloseWizardView.count, 1)
-
- AccountAdapter.deleteCurrentAccount()
-
- // Wait until the account removal is finished
- spyAccountIsRemoved.wait()
- compare(spyAccountIsRemoved.count, 1)
- }
-
- function test_importFromDevicePageKeyNavigation() {
- uut.clearSignalSpy()
-
- var welcomePage = findChild(uut, "welcomePage")
- var importFromDevicePage = findChild(uut, "importFromDevicePage")
-
- var fromDeviceButton = findChild(welcomePage, "fromDeviceButton")
-
- var pinFromDevice = findChild(importFromDevicePage, "pinFromDevice")
- var importFromDevicePageConnectBtn = findChild(importFromDevicePage,
- "importFromDevicePageConnectBtn")
- var passwordFromDevice = findChild(importFromDevicePage, "passwordFromDevice")
- var importFromDevicePageBackButton = findChild(importFromDevicePage,
- "importFromDevicePageBackButton")
-
- // To importFromDevicePage
- keyClick(Qt.Key_Tab)
- keyClick(Qt.Key_Tab)
- keyClick(Qt.Key_Tab)
- compare(fromDeviceButton.focus, true)
-
- keyClick(Qt.Key_Enter)
- compare(pinFromDevice.focus, true)
-
- // No device pin
- keyClick(Qt.Key_Tab)
- compare(importFromDevicePageBackButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(passwordFromDevice.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(pinFromDevice.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(importFromDevicePageBackButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordFromDevice.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(pinFromDevice.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordFromDevice.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(importFromDevicePageBackButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(pinFromDevice.focus, true)
-
- // With device pin
- pinFromDevice.text = "test"
-
- keyClick(Qt.Key_Tab)
- compare(importFromDevicePageConnectBtn.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(importFromDevicePageBackButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(passwordFromDevice.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(pinFromDevice.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(importFromDevicePageConnectBtn.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(importFromDevicePageBackButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordFromDevice.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(pinFromDevice.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordFromDevice.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(importFromDevicePageBackButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(importFromDevicePageConnectBtn.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(pinFromDevice.focus, true)
-
- // Account creation in process
- importFromDevicePageConnectBtn.spinnerTriggered = true
-
- keyClick(Qt.Key_Tab)
- compare(passwordFromDevice.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(pinFromDevice.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordFromDevice.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(pinFromDevice.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordFromDevice.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(pinFromDevice.focus, true)
-
- importFromDevicePageConnectBtn.spinnerTriggered = false
-
- // Check lineEdit enter key press corrspond correctly
- keyClick(Qt.Key_Enter)
- compare(pinFromDevice.focus, true)
-
- keyClick(Qt.Key_Up)
- keyClick(Qt.Key_Enter)
- compare(pinFromDevice.focus, true)
-
- pinFromDevice.text = "test"
- keyClick(Qt.Key_Enter)
-
- spyReportFailure.wait(15000)
- verify(spyReportFailure.count >= 1)
-
- // Go back to welcomePage
- keyClick(Qt.Key_Up)
- keyClick(Qt.Key_Up)
- keyClick(Qt.Key_Enter)
- }
-
- function test_importFromBackupPageKeyNavigation() {
- uut.clearSignalSpy()
-
- var welcomePage = findChild(uut, "welcomePage")
- var importFromBackupPage = findChild(uut, "importFromBackupPage")
-
- var fromBackupButton = findChild(welcomePage, "fromBackupButton")
-
- var passwordFromBackupEdit = findChild(importFromBackupPage, "passwordFromBackupEdit")
- var importFromBackupPageBackButton = findChild(importFromBackupPage,
- "importFromBackupPageBackButton")
- var importFromBackupPageConnectBtn = findChild(importFromBackupPage,
- "importFromBackupPageConnectBtn")
- var fileImportBtn = findChild(importFromBackupPage, "fileImportBtn")
-
- // To importFromBackupPage
- keyClick(Qt.Key_Tab)
- keyClick(Qt.Key_Tab)
- keyClick(Qt.Key_Tab)
- keyClick(Qt.Key_Tab)
- compare(fromBackupButton.focus, true)
-
- keyClick(Qt.Key_Enter)
- compare(passwordFromBackupEdit.focus, true)
-
- // No filePath loaded
- keyClick(Qt.Key_Tab)
- compare(importFromBackupPageBackButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(fileImportBtn.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(passwordFromBackupEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(importFromBackupPageBackButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(fileImportBtn.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordFromBackupEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(fileImportBtn.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(importFromBackupPageBackButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordFromBackupEdit.focus, true)
-
- // With filePath loaded
- importFromBackupPage.filePath = "test"
-
- keyClick(Qt.Key_Tab)
- compare(importFromBackupPageConnectBtn.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(importFromBackupPageBackButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(fileImportBtn.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(passwordFromBackupEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(importFromBackupPageConnectBtn.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(importFromBackupPageBackButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(fileImportBtn.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordFromBackupEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(fileImportBtn.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(importFromBackupPageBackButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(importFromBackupPageConnectBtn.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordFromBackupEdit.focus, true)
-
- // Account creation in process
- importFromBackupPageConnectBtn.spinnerTriggered = true
-
- keyClick(Qt.Key_Tab)
- compare(fileImportBtn.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(passwordFromBackupEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(fileImportBtn.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(passwordFromBackupEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(fileImportBtn.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(passwordFromBackupEdit.focus, true)
-
- importFromBackupPageConnectBtn.spinnerTriggered = false
-
- // Check lineEdit enter key press corrspond correctly
- var fileName = "gz_test.gz"
- var wrongPassword = "ccc"
- importFromBackupPage.filePath = UtilsAdapter.toFileAbsolutepath(
- "tests/qml/src/resources/gz_test.gz") + "/" + fileName
- passwordFromBackupEdit.text = wrongPassword
-
- keyClick(Qt.Key_Enter)
-
- spyReportFailure.wait(15000)
- verify(spyReportFailure.count >= 1)
-
- // Go back to welcomePage
- keyClick(Qt.Key_Up)
- keyClick(Qt.Key_Up)
- keyClick(Qt.Key_Enter)
- }
-
- function test_createSIPAccountPageKeyNavigation() {
- uut.clearSignalSpy()
-
- var welcomePage = findChild(uut, "welcomePage")
- var createSIPAccountPage = findChild(uut, "createSIPAccountPage")
-
- var showAdvancedButton = findChild(welcomePage, "showAdvancedButton")
-
- var newSIPAccountButton = findChild(welcomePage, "newSIPAccountButton")
-
- var sipServernameEdit = findChild(createSIPAccountPage, "sipServernameEdit")
- var sipProxyEdit = findChild(createSIPAccountPage, "sipProxyEdit")
- var sipUsernameEdit = findChild(createSIPAccountPage, "sipUsernameEdit")
- var sipPasswordEdit = findChild(createSIPAccountPage, "sipPasswordEdit")
- var createSIPAccountButton = findChild(createSIPAccountPage, "createSIPAccountButton")
- var createSIPAccountPageBackButton = findChild(createSIPAccountPage,
- "createSIPAccountPageBackButton")
-
- // To connectToAccountManagerPage
- keyClick(Qt.Key_Tab)
- keyClick(Qt.Key_Up)
- keyClick(Qt.Key_Enter)
- keyClick(Qt.Key_Tab)
- keyClick(Qt.Key_Tab)
- compare(newSIPAccountButton.focus, true)
-
- keyClick(Qt.Key_Enter)
- compare(sipServernameEdit.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(sipProxyEdit.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(sipUsernameEdit.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(sipPasswordEdit.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(createSIPAccountButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(createSIPAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(sipServernameEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(sipProxyEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(sipUsernameEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(sipPasswordEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(createSIPAccountButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(createSIPAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(sipServernameEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(createSIPAccountPageBackButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(createSIPAccountButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(sipPasswordEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(sipUsernameEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(sipProxyEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(sipServernameEdit.focus, true)
-
- // Check lineEdit enter key press corrspond correctly
- keyClick(Qt.Key_Enter)
- keyClick(Qt.Key_Enter)
- keyClick(Qt.Key_Enter)
- keyClick(Qt.Key_Enter)
-
- // Wait until the account creation is finished
- spyAccountIsReady.wait()
- compare(spyAccountIsReady.count, 1)
-
- spyAccountStatusChanged.wait()
- verify(spyAccountStatusChanged.count >= 1)
-
- WizardViewStepModel.nextStep()
-
- spyAccountConfigFinalized.wait()
- compare(spyAccountConfigFinalized.count, 1)
-
- spyCloseWizardView.wait()
- compare(spyCloseWizardView.count, 1)
-
- AccountAdapter.deleteCurrentAccount()
-
- // Wait until the account removal is finished
- spyAccountIsRemoved.wait()
- compare(spyAccountIsRemoved.count, 1)
-
- // Hide advanced options
- showAdvancedButton.clicked()
- }
-
- function test_profilePageKeyNavigation() {
- uut.clearSignalSpy()
-
- var controlPanelStackView = findChild(uut, "controlPanelStackView")
-
- var welcomePage = findChild(uut, "welcomePage")
- var createAccountPage = findChild(uut, "createAccountPage")
- var profilePage = findChild(uut, "profilePage")
- var backupKeysPage = findChild(uut, "backupKeysPage")
-
- var createAccountButton = findChild(createAccountPage, "createAccountButton")
-
- var aliasEdit = findChild(profilePage, "aliasEdit")
- var saveProfileBtn = findChild(profilePage, "saveProfileBtn")
- var setAvatarWidget = findChild(profilePage, "setAvatarWidget")
- var skipProfileSavingButton = findChild(profilePage, "skipProfileSavingButton")
-
- var photoboothImportFromFileDialog = findChild(setAvatarWidget,
- "photoboothImportFromFileDialog")
- var takePhotoButton = findChild(setAvatarWidget, "takePhotoButton")
- var photoboothViewClearButton = findChild(setAvatarWidget,
- "photoboothViewClearButton")
- var photoboothViewImportButton = findChild(setAvatarWidget,
- "photoboothViewImportButton")
-
- // WelcomePage initially
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to createAccount page
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.CreateJamiAccount)
-
- // Go to set up password page
- WizardViewStepModel.nextStep()
- createAccountButton.clicked()
-
- // Wait until the account creation is finished
- spyAccountIsReady.wait()
- compare(spyAccountIsReady.count, 1)
-
- // Now we are in profile page
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- profilePage)
- compare(aliasEdit.focus, true)
-
- spyAccountConfigFinalized.wait()
- compare(spyAccountConfigFinalized.count, 1)
-
- // Navigation test
- keyClick(Qt.Key_Tab)
- compare(saveProfileBtn.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(skipProfileSavingButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(takePhotoButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(photoboothViewImportButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(aliasEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(saveProfileBtn.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(skipProfileSavingButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(takePhotoButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(photoboothViewImportButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(aliasEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(photoboothViewImportButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(takePhotoButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(skipProfileSavingButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(saveProfileBtn.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(aliasEdit.focus, true)
-
- // Set up photo from fake JamiFileDialog imported file
- spyAccountStatusChanged.clear()
- photoboothViewImportButton.focusAfterFileDialogClosed = true
- photoboothImportFromFileDialog.file = UtilsAdapter.toFileAbsolutepath(
- "tests/qml/src/resources/png_test.png") + "/" + "png_test.png"
- photoboothImportFromFileDialog.accepted()
-
- spyAccountStatusChanged.wait()
- verify(spyAccountStatusChanged.count >= 1)
- compare(photoboothViewImportButton.focus, true)
- compare(photoboothViewClearButton.visible, true)
-
- keyClick(Qt.Key_Tab)
- compare(aliasEdit.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(saveProfileBtn.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(skipProfileSavingButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(takePhotoButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(photoboothViewClearButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(photoboothViewImportButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(aliasEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(saveProfileBtn.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(skipProfileSavingButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(takePhotoButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(photoboothViewClearButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(photoboothViewImportButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(photoboothViewClearButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(takePhotoButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(skipProfileSavingButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(saveProfileBtn.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(aliasEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(photoboothViewImportButton.focus, true)
-
- // Clear photo
- keyClick(Qt.Key_Up)
- compare(photoboothViewClearButton.focus, true)
- keyClick(Qt.Key_Enter)
- compare(takePhotoButton.focus, true)
-
- // Taking photo focus test
- setAvatarWidget.isPreviewing = true
-
- keyClick(Qt.Key_Tab)
- compare(photoboothViewClearButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(aliasEdit.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(saveProfileBtn.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(skipProfileSavingButton.focus, true)
-
- keyClick(Qt.Key_Tab)
- compare(takePhotoButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(photoboothViewClearButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(aliasEdit.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(saveProfileBtn.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(skipProfileSavingButton.focus, true)
-
- keyClick(Qt.Key_Down)
- compare(takePhotoButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(skipProfileSavingButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(saveProfileBtn.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(aliasEdit.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(photoboothViewClearButton.focus, true)
-
- keyClick(Qt.Key_Up)
- compare(takePhotoButton.focus, true)
-
- setAvatarWidget.isPreviewing = false
-
- // Check lineEdit enter key press corrspond correctly
- var aliasName = "test"
- aliasEdit.text = aliasName
- spyAccountStatusChanged.clear()
-
- keyClick(Qt.Key_Tab)
- keyClick(Qt.Key_Tab)
- keyClick(Qt.Key_Tab)
- keyClick(Qt.Key_Enter)
-
- var showBackup = (WizardViewStepModel.accountCreationOption ===
- WizardViewStepModel.AccountCreationOption.CreateJamiAccount
- || WizardViewStepModel.accountCreationOption ===
- WizardViewStepModel.AccountCreationOption.CreateRendezVous)
- && !AppSettingsManager.getValue(Settings.NeverShowMeAgain)
- if (showBackup) {
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- backupKeysPage)
- WizardViewStepModel.nextStep()
- }
-
- spyAccountStatusChanged.wait()
- verify(spyAccountStatusChanged.count >= 1)
-
- spyCloseWizardView.wait()
- compare(spyCloseWizardView.count, 1)
-
- // Check alias text
- compare(CurrentAccount.alias, aliasName)
-
- AccountAdapter.deleteCurrentAccount()
-
- // Wait until the account removal is finished
- spyAccountIsRemoved.wait()
- compare(spyAccountIsRemoved.count, 1)
- }
-
- function test_backupKeysPageNavigation() {
- uut.clearSignalSpy()
-
- var controlPanelStackView = findChild(uut, "controlPanelStackView")
-
- var welcomePage = findChild(uut, "welcomePage")
- var createAccountPage = findChild(uut, "createAccountPage")
- var profilePage = findChild(uut, "profilePage")
- var backupKeysPage = findChild(uut, "backupKeysPage")
-
- var createAccountButton = findChild(createAccountPage, "createAccountButton")
- var skipProfileSavingButton = findChild(profilePage, "skipProfileSavingButton")
-
- // WelcomePage initially
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- welcomePage)
-
- // Go to createAccount page
- WizardViewStepModel.startAccountCreationFlow(
- WizardViewStepModel.AccountCreationOption.CreateJamiAccount)
-
- // Go to set up password page
- WizardViewStepModel.nextStep()
- createAccountButton.clicked()
-
- // Wait until the account creation is finished
- spyAccountIsReady.wait()
- compare(spyAccountIsReady.count, 1)
-
- // Now we are in profile page
- compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
- profilePage)
- spyAccountConfigFinalized.wait()
- compare(spyAccountConfigFinalized.count, 1)
-
- skipProfileSavingButton.clicked()
-
- spyCloseWizardView.wait()
- compare(spyCloseWizardView.count, 1)
-
AccountAdapter.deleteCurrentAccount()
// Wait until the account removal is finished
diff --git a/tests/qml/src/tst_ChatViewFooter.qml b/tests/qml/to_fix/tst_ChatViewFooter.qml
similarity index 100%
rename from tests/qml/src/tst_ChatViewFooter.qml
rename to tests/qml/to_fix/tst_ChatViewFooter.qml
diff --git a/tests/qml/src/tst_FilesToSendContainer.qml b/tests/qml/to_fix/tst_FilesToSendContainer.qml
similarity index 100%
rename from tests/qml/src/tst_FilesToSendContainer.qml
rename to tests/qml/to_fix/tst_FilesToSendContainer.qml
diff --git a/tests/qml/src/tst_PresenceIndicator.qml b/tests/qml/to_fix/tst_PresenceIndicator.qml
similarity index 100%
rename from tests/qml/src/tst_PresenceIndicator.qml
rename to tests/qml/to_fix/tst_PresenceIndicator.qml
diff --git a/tests/qml/to_fix/tst_WizardView.qml b/tests/qml/to_fix/tst_WizardView.qml
new file mode 100644
index 00000000..6a4f971d
--- /dev/null
+++ b/tests/qml/to_fix/tst_WizardView.qml
@@ -0,0 +1,1589 @@
+/*
+ * Copyright (C) 2021-2022 Savoir-faire Linux Inc.
+ * Author: Mingrui Zhang
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+import QtQuick
+import QtTest
+
+import net.jami.Adapters 1.1
+import net.jami.Models 1.1
+import net.jami.Constants 1.1
+import net.jami.Enums 1.1
+
+import "../../../src/app/wizardview"
+import "../../../src/app/commoncomponents"
+
+WizardView {
+ id: uut
+
+ function clearSignalSpy() {
+ spyAccountIsReady.clear()
+ spyAccountIsRemoved.clear()
+ spyAccountConfigFinalized.clear()
+ spyReportFailure.clear()
+ spyCloseWizardView.clear()
+
+ spyBackButtonVisible.target = undefined
+ }
+
+ SignalSpy {
+ id: spyAccountIsReady
+
+ target: WizardViewStepModel
+ signalName: "accountIsReady"
+ }
+
+ SignalSpy {
+ id: spyAccountIsRemoved
+
+ target: AccountAdapter
+ signalName: "accountRemoved"
+ }
+
+ SignalSpy {
+ id: spyAccountStatusChanged
+
+ target: AccountAdapter
+ signalName: "accountStatusChanged"
+ }
+
+ SignalSpy {
+ id: spyAccountConfigFinalized
+
+ target: AccountAdapter
+ signalName: "accountConfigFinalized"
+ }
+
+ SignalSpy {
+ id: spyReportFailure
+
+ target: AccountAdapter
+ signalName: "reportFailure"
+ }
+
+ SignalSpy {
+ id: spyCloseWizardView
+
+ target: WizardViewStepModel
+ signalName: "closeWizardView"
+ }
+
+ SignalSpy {
+ id: spyBackButtonVisible
+
+ signalName: "visibleChanged"
+ }
+
+ TestCase {
+ name: "WelcomePage to different account creation page and return back"
+ when: windowShown
+
+ function test_welcomePageStepInStepOut() {
+ var controlPanelStackView = findChild(uut, "controlPanelStackView")
+
+ var welcomePage = findChild(uut, "welcomePage")
+ var createAccountPage = findChild(uut, "createAccountPage")
+ var importFromDevicePage = findChild(uut, "importFromDevicePage")
+ var importFromBackupPage = findChild(uut, "importFromBackupPage")
+ var connectToAccountManagerPage = findChild(uut, "connectToAccountManagerPage")
+ var createSIPAccountPage = findChild(uut, "createSIPAccountPage")
+
+ // WelcomePage initially
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to createAccount page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.CreateJamiAccount)
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ createAccountPage)
+ WizardViewStepModel.previousStep()
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to CreateRendezVous page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.CreateRendezVous)
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ createAccountPage)
+ WizardViewStepModel.previousStep()
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to CreateRendezVous page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.ImportFromDevice)
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ importFromDevicePage)
+ WizardViewStepModel.previousStep()
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to ImportFromBackup page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.ImportFromBackup)
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ importFromBackupPage)
+ WizardViewStepModel.previousStep()
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to ConnectToAccountManager page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.ConnectToAccountManager)
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ connectToAccountManagerPage)
+ WizardViewStepModel.previousStep()
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to CreateSipAccount page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.CreateSipAccount)
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ createSIPAccountPage)
+ WizardViewStepModel.previousStep()
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+ }
+
+ function test_createAccountPageStepInStepOut() {
+ var controlPanelStackView = findChild(uut, "controlPanelStackView")
+ var welcomePage = findChild(uut, "welcomePage")
+ var createAccountPage = findChild(uut, "createAccountPage")
+
+ var createAccountStack = findChild(createAccountPage, "createAccountStack")
+ var passwordSetupPage = findChild(createAccountPage, "passwordSetupPage")
+ var nameRegistrationPage = findChild(createAccountPage, "nameRegistrationPage")
+
+ // WelcomePage initially
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to createAccount page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.CreateJamiAccount)
+ compare(createAccountPage.isRendezVous, false)
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ createAccountPage)
+ compare(createAccountStack.currentIndex, nameRegistrationPage.stackIndex)
+
+ // Go to passwordSetup page
+ WizardViewStepModel.nextStep()
+ compare(createAccountStack.currentIndex, passwordSetupPage.stackIndex)
+
+ // Back
+ WizardViewStepModel.previousStep()
+ compare(createAccountStack.currentIndex, nameRegistrationPage.stackIndex)
+ WizardViewStepModel.previousStep()
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to CreateRendezVous page (createAccount)
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.CreateRendezVous)
+ compare(createAccountPage.isRendezVous, true)
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ createAccountPage)
+ compare(createAccountStack.currentIndex, nameRegistrationPage.stackIndex)
+
+ // Go to passwordSetup page
+ WizardViewStepModel.nextStep()
+ compare(createAccountStack.currentIndex, passwordSetupPage.stackIndex)
+
+ // Back
+ WizardViewStepModel.previousStep()
+ compare(createAccountStack.currentIndex, nameRegistrationPage.stackIndex)
+ WizardViewStepModel.previousStep()
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+ }
+ }
+
+ TestCase {
+ name: "Create Jami account ui flow (no registered name)"
+ when: windowShown
+
+ function test_createJamiAccountUiFlow() {
+ uut.clearSignalSpy()
+
+ var controlPanelStackView = findChild(uut, "controlPanelStackView")
+
+ var welcomePage = findChild(uut, "welcomePage")
+ var createAccountPage = findChild(uut, "createAccountPage")
+ var profilePage = findChild(uut, "profilePage")
+ var backupKeysPage = findChild(uut, "backupKeysPage")
+
+ var usernameEdit = findChild(createAccountPage, "usernameEdit")
+ var createAccountStack = findChild(createAccountPage, "createAccountStack")
+ var passwordSwitch = findChild(createAccountPage, "passwordSwitch")
+ var passwordEdit = findChild(createAccountPage, "passwordEdit")
+ var passwordConfirmEdit = findChild(createAccountPage, "passwordConfirmEdit")
+ var createAccountButton = findChild(createAccountPage, "createAccountButton")
+
+ var aliasEdit = findChild(profilePage, "aliasEdit")
+ var saveProfileBtn = findChild(profilePage, "saveProfileBtn")
+
+ var password = "test110"
+ var aliasText = "test101"
+
+ // WelcomePage initially
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to createAccount page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.CreateJamiAccount)
+ compare(createAccountStack.currentIndex, 0)
+ compare(usernameEdit.focus, true)
+
+ // Go to set up password page
+ WizardViewStepModel.nextStep()
+ compare(createAccountStack.currentIndex, 1)
+ passwordSwitch.checked = true
+ compare(passwordEdit.focus, true)
+ passwordEdit.text = password
+ passwordConfirmEdit.text = password
+ createAccountButton.clicked()
+
+ // Wait until the account creation is finished
+ spyAccountIsReady.wait()
+ compare(spyAccountIsReady.count, 1)
+
+ // Now we are in profile page
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ profilePage)
+ compare(aliasEdit.focus, true)
+
+ spyAccountConfigFinalized.wait()
+ compare(spyAccountConfigFinalized.count, 1)
+
+ aliasEdit.text = aliasText
+ saveProfileBtn.clicked()
+
+ var showBackup = (WizardViewStepModel.accountCreationOption ===
+ WizardViewStepModel.AccountCreationOption.CreateJamiAccount
+ || WizardViewStepModel.accountCreationOption ===
+ WizardViewStepModel.AccountCreationOption.CreateRendezVous)
+ && !AppSettingsManager.getValue(Settings.NeverShowMeAgain)
+ if (showBackup) {
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ backupKeysPage)
+ WizardViewStepModel.nextStep()
+ }
+
+ spyCloseWizardView.wait()
+ compare(spyCloseWizardView.count, 1)
+
+ // Check alias text
+ compare(CurrentAccount.alias, aliasText)
+
+ spyAccountStatusChanged.clear()
+
+ // Check if password is set
+ compare(AccountAdapter.savePassword(LRCInstance.currentAccountId, password, "test"),
+ true)
+
+ // Wait until the account status change is finished
+ spyAccountStatusChanged.wait()
+ verify(spyAccountStatusChanged.count >= 1)
+
+ AccountAdapter.deleteCurrentAccount()
+
+ // Wait until the account removal is finished
+ spyAccountIsRemoved.wait()
+ compare(spyAccountIsRemoved.count, 1)
+ }
+
+ function test_createRendezVousAccountUiFlow() {
+ uut.clearSignalSpy()
+
+ var controlPanelStackView = findChild(uut, "controlPanelStackView")
+
+ var welcomePage = findChild(uut, "welcomePage")
+ var createAccountPage = findChild(uut, "createAccountPage")
+ var profilePage = findChild(uut, "profilePage")
+ var backupKeysPage = findChild(uut, "backupKeysPage")
+
+ var usernameEdit = findChild(createAccountPage, "usernameEdit")
+ var createAccountStack = findChild(createAccountPage, "createAccountStack")
+ var passwordSwitch = findChild(createAccountPage, "passwordSwitch")
+ var passwordEdit = findChild(createAccountPage, "passwordEdit")
+ var passwordConfirmEdit = findChild(createAccountPage, "passwordConfirmEdit")
+ var createAccountButton = findChild(createAccountPage, "createAccountButton")
+
+ var aliasEdit = findChild(profilePage, "aliasEdit")
+ var saveProfileBtn = findChild(profilePage, "saveProfileBtn")
+
+ var password = "test110"
+ var aliasText = "test101"
+
+ // WelcomePage initially
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to createRendezVous page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.CreateRendezVous)
+ compare(createAccountStack.currentIndex, 0)
+ compare(usernameEdit.focus, true)
+
+ // Go to set up password page
+ WizardViewStepModel.nextStep()
+ compare(createAccountStack.currentIndex, 1)
+ passwordSwitch.checked = true
+ compare(passwordEdit.focus, true)
+ passwordEdit.text = password
+ passwordConfirmEdit.text = password
+ createAccountButton.clicked()
+
+ // Wait until the account creation is finished
+ spyAccountIsReady.wait()
+ compare(spyAccountIsReady.count, 1)
+
+ // Now we are in profile page
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ profilePage)
+ compare(aliasEdit.focus, true)
+
+ spyAccountConfigFinalized.wait()
+ compare(spyAccountConfigFinalized.count, 1)
+
+ // Check if it is a RendezVous acc
+ compare(CurrentAccount.isRendezVous, true)
+
+ aliasEdit.text = aliasText
+ saveProfileBtn.clicked()
+
+ var showBackup = (WizardViewStepModel.accountCreationOption ===
+ WizardViewStepModel.AccountCreationOption.CreateJamiAccount
+ || WizardViewStepModel.accountCreationOption ===
+ WizardViewStepModel.AccountCreationOption.CreateRendezVous)
+ && !AppSettingsManager.getValue(Settings.NeverShowMeAgain)
+ if (showBackup) {
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ backupKeysPage)
+ WizardViewStepModel.nextStep()
+ }
+
+ spyCloseWizardView.wait()
+ compare(spyCloseWizardView.count, 1)
+
+ // Check alias text
+ compare(CurrentAccount.alias, aliasText)
+
+ spyAccountStatusChanged.clear()
+
+ // Check if password is set
+ compare(AccountAdapter.savePassword(LRCInstance.currentAccountId, password, "test"),
+ true)
+
+ // Wait until the account status change is finished
+ spyAccountStatusChanged.wait()
+ verify(spyAccountStatusChanged.count >= 1)
+
+ AccountAdapter.deleteCurrentAccount()
+
+ // Wait until the account removal is finished
+ spyAccountIsRemoved.wait()
+ compare(spyAccountIsRemoved.count, 1)
+ }
+ }
+
+ TestCase {
+ name: "Create Sip account ui flow"
+ when: windowShown
+
+ function test_createSipAccountUiFlow() {
+ uut.clearSignalSpy()
+
+ var controlPanelStackView = findChild(uut, "controlPanelStackView")
+
+ var welcomePage = findChild(uut, "welcomePage")
+ var createSIPAccountPage = findChild(uut, "createSIPAccountPage")
+ var profilePage = findChild(uut, "profilePage")
+
+ var sipUsernameEdit = findChild(createSIPAccountPage, "sipUsernameEdit")
+ var sipPasswordEdit = findChild(createSIPAccountPage, "sipPasswordEdit")
+ var sipServernameEdit = findChild(createSIPAccountPage, "sipServernameEdit")
+ var sipProxyEdit = findChild(createSIPAccountPage, "sipProxyEdit")
+ var createAccountButton = findChild(createSIPAccountPage, "createSIPAccountButton")
+
+ var saveProfileBtn = findChild(profilePage, "saveProfileBtn")
+
+ // WelcomePage initially
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to createSipAccount page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.CreateSipAccount)
+ compare(sipServernameEdit.focus, true)
+
+ // Set up paras
+ var userName = "testUserName"
+ var serverName = "testServerName"
+ var password = "testPassword"
+ var proxy = "testProxy"
+
+ sipUsernameEdit.text = userName
+ sipPasswordEdit.text = password
+ sipServernameEdit.text = serverName
+ sipProxyEdit.text = proxy
+
+ createAccountButton.clicked()
+
+ // Wait until the account creation is finished
+ spyAccountIsReady.wait()
+ compare(spyAccountIsReady.count, 1)
+
+ // Now we are in profile page
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ profilePage)
+
+ spyAccountConfigFinalized.wait()
+ compare(spyAccountConfigFinalized.count, 1)
+
+ // Check if paras match with setup
+ compare(CurrentAccount.routeset, proxy)
+ compare(CurrentAccount.username, userName)
+ compare(CurrentAccount.hostname, serverName)
+ compare(CurrentAccount.password, password)
+
+ WizardViewStepModel.nextStep()
+
+ spyCloseWizardView.wait()
+ compare(spyCloseWizardView.count, 1)
+
+ AccountAdapter.deleteCurrentAccount()
+
+ // Wait until the account removal is finished
+ spyAccountIsRemoved.wait()
+ compare(spyAccountIsRemoved.count, 1)
+ }
+ }
+
+ TestCase {
+ name: "Create Jami account from backup ui flow"
+ when: windowShown
+
+ function test_createJamiAccountFromBackupUiFlow() {
+ uut.clearSignalSpy()
+
+ var controlPanelStackView = findChild(uut, "controlPanelStackView")
+
+ var welcomePage = findChild(uut, "welcomePage")
+ var importFromBackupPage = findChild(uut, "importFromBackupPage")
+ var profilePage = findChild(uut, "profilePage")
+
+ var passwordFromBackupEdit = findChild(importFromBackupPage, "passwordFromBackupEdit")
+ var connectBtn = findChild(importFromBackupPage, "importFromBackupPageConnectBtn")
+ var errorLabel = findChild(importFromBackupPage, "errorLabel")
+ var backButton = findChild(importFromBackupPage, "importFromBackupPageBackButton")
+
+ // WelcomePage initially
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to importFromBackup page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.ImportFromBackup)
+
+ spyBackButtonVisible.target = backButton
+
+ compare(passwordFromBackupEdit.focus, true)
+
+ var fileName = "gz_test.gz"
+ var password = "qqq"
+ importFromBackupPage.filePath = UtilsAdapter.toFileAbsolutepath(
+ "tests/qml/src/resources/gz_test.gz") + "/" + fileName
+
+ compare(connectBtn.enabled, true)
+
+ // Create without password
+ connectBtn.clicked()
+ spyReportFailure.wait()
+ verify(spyReportFailure.count >= 1)
+ spyBackButtonVisible.wait()
+ verify(spyBackButtonVisible.count >= 2)
+ spyBackButtonVisible.clear()
+
+ compare(importFromBackupPage.errorText, JamiStrings.errorCreateAccount)
+ compare(errorLabel.visible, true)
+
+ // Recreate with password
+ passwordFromBackupEdit.text = password
+ connectBtn.clicked()
+
+ // Wait until the account creation is finished
+ spyAccountIsReady.wait()
+ compare(spyAccountIsReady.count, 1)
+ spyAccountConfigFinalized.wait()
+ compare(spyAccountConfigFinalized.count, 1)
+ spyCloseWizardView.wait()
+ compare(spyCloseWizardView.count, 1)
+
+ AccountAdapter.deleteCurrentAccount()
+
+ // Wait until the account removal is finished
+ spyAccountIsRemoved.wait()
+ compare(spyAccountIsRemoved.count, 1)
+ }
+ }
+
+ TestCase {
+ name: "Wizardview key navigation"
+ when: windowShown
+
+ function test_welcomePageKeyNavigation() {
+ var welcomePage = findChild(uut, "welcomePage")
+
+ var newAccountButton = findChild(welcomePage, "newAccountButton")
+ var newRdvButton = findChild(welcomePage, "newRdvButton")
+ var fromDeviceButton = findChild(welcomePage, "fromDeviceButton")
+ var fromBackupButton = findChild(welcomePage, "fromBackupButton")
+ var showAdvancedButton = findChild(welcomePage, "showAdvancedButton")
+ var connectAccountManagerButton = findChild(welcomePage, "connectAccountManagerButton")
+ var newSIPAccountButton = findChild(welcomePage, "newSIPAccountButton")
+ var welcomePageBackButton = findChild(welcomePage, "welcomePageBackButton")
+
+ welcomePageBackButton.visible = true
+
+ // ShowAdvanced is false
+ keyClick(Qt.Key_Tab)
+ compare(newAccountButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(newRdvButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(fromDeviceButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(fromBackupButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(showAdvancedButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(welcomePageBackButton.focus, true)
+
+ // Set showAdvanced to true
+ keyClick(Qt.Key_Up)
+ compare(showAdvancedButton.focus, true)
+
+ keyClick(Qt.Key_Enter)
+ compare(showAdvancedButton.showAdvanced, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(connectAccountManagerButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(newSIPAccountButton.focus, true)
+
+ // Use down button
+ keyClick(Qt.Key_Down)
+ compare(welcomePageBackButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(newAccountButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(newRdvButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(fromDeviceButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(fromBackupButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(showAdvancedButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(connectAccountManagerButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(newSIPAccountButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(welcomePageBackButton.focus, true)
+
+ // Use up button
+ keyClick(Qt.Key_Up)
+ compare(newSIPAccountButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(connectAccountManagerButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(showAdvancedButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(fromBackupButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(fromDeviceButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(newRdvButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(newAccountButton.focus, true)
+ }
+
+ function test_createAccountPageKeyNavigation() {
+ uut.clearSignalSpy()
+
+ var welcomePage = findChild(uut, "welcomePage")
+ var createAccountPage = findChild(uut, "createAccountPage")
+
+ var newAccountButton = findChild(welcomePage, "newAccountButton")
+
+ var usernameEdit = findChild(createAccountPage, "usernameEdit")
+ var chooseUsernameButton = findChild(createAccountPage,
+ "chooseUsernameButton")
+ var nameRegistrationPageSkipButton = findChild(createAccountPage,
+ "nameRegistrationPageSkipButton")
+ var passwordEdit = findChild(createAccountPage, "passwordEdit")
+ var passwordSwitch = findChild(createAccountPage, "passwordSwitch")
+ var passwordConfirmEdit = findChild(createAccountPage, "passwordConfirmEdit")
+ var createAccountButton = findChild(createAccountPage,
+ "createAccountButton")
+ var createAccountPageBackButton = findChild(createAccountPage,
+ "createAccountPageBackButton")
+
+ // To createAccountPage - nameRegistrationPage
+ keyClick(Qt.Key_Tab)
+ compare(newAccountButton.focus, true)
+
+ keyClick(Qt.Key_Enter)
+ compare(usernameEdit.focus, true)
+
+ // No username
+ keyClick(Qt.Key_Tab)
+ compare(nameRegistrationPageSkipButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(usernameEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(nameRegistrationPageSkipButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(usernameEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(nameRegistrationPageSkipButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(usernameEdit.focus, true)
+
+ // With username
+ usernameEdit.nameRegistrationState =
+ UsernameLineEdit.NameRegistrationState.FREE
+
+ keyClick(Qt.Key_Tab)
+ compare(chooseUsernameButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(nameRegistrationPageSkipButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(usernameEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(chooseUsernameButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(nameRegistrationPageSkipButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(usernameEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(nameRegistrationPageSkipButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(chooseUsernameButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(usernameEdit.focus, true)
+
+ // To createAccountPage - passwordSetupPage
+ keyClick(Qt.Key_Enter)
+ keyClick(Qt.Key_Tab)
+ compare(passwordSwitch.focus, true)
+
+ // No password
+ keyClick(Qt.Key_Tab)
+ compare(createAccountButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordSwitch.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(createAccountButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordSwitch.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(createAccountButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordSwitch.focus, true)
+
+ // With password - no text entered
+ keyClick(Qt.Key_Enter)
+ compare(passwordEdit.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordConfirmEdit.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordSwitch.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordConfirmEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordSwitch.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordConfirmEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordSwitch.focus, true)
+
+ // With password - with text entered
+ passwordEdit.text = "test"
+ passwordConfirmEdit.text = "test"
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordEdit.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordConfirmEdit.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(createAccountButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordSwitch.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordConfirmEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(createAccountButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordSwitch.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(createAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(createAccountButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordConfirmEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordSwitch.focus, true)
+
+ passwordEdit.text = ""
+ passwordConfirmEdit.text = ""
+
+ // Check lineEdit enter key press corrspond correctly
+ keyClick(Qt.Key_Tab)
+ keyClick(Qt.Key_Enter)
+ keyClick(Qt.Key_Enter)
+ compare(passwordConfirmEdit.focus, true)
+
+ passwordEdit.text = "test"
+ passwordConfirmEdit.text = "test"
+
+ keyClick(Qt.Key_Enter)
+
+ // Wait until the account creation is finished
+ spyAccountIsReady.wait()
+ compare(spyAccountIsReady.count, 1)
+
+ // Go back to welcomePage
+ WizardViewStepModel.nextStep()
+
+ var showBackup = (WizardViewStepModel.accountCreationOption ===
+ WizardViewStepModel.AccountCreationOption.CreateJamiAccount
+ || WizardViewStepModel.accountCreationOption ===
+ WizardViewStepModel.AccountCreationOption.CreateRendezVous)
+ && !AppSettingsManager.getValue(Settings.NeverShowMeAgain)
+ if (showBackup) {
+ WizardViewStepModel.nextStep()
+ }
+
+ spyAccountConfigFinalized.wait()
+ compare(spyAccountConfigFinalized.count, 1)
+
+ spyCloseWizardView.wait()
+ compare(spyCloseWizardView.count, 1)
+
+ AccountAdapter.deleteCurrentAccount()
+
+ // Wait until the account removal is finished
+ spyAccountIsRemoved.wait()
+ compare(spyAccountIsRemoved.count, 1)
+ }
+
+ function test_importFromDevicePageKeyNavigation() {
+ uut.clearSignalSpy()
+
+ var welcomePage = findChild(uut, "welcomePage")
+ var importFromDevicePage = findChild(uut, "importFromDevicePage")
+
+ var fromDeviceButton = findChild(welcomePage, "fromDeviceButton")
+
+ var pinFromDevice = findChild(importFromDevicePage, "pinFromDevice")
+ var importFromDevicePageConnectBtn = findChild(importFromDevicePage,
+ "importFromDevicePageConnectBtn")
+ var passwordFromDevice = findChild(importFromDevicePage, "passwordFromDevice")
+ var importFromDevicePageBackButton = findChild(importFromDevicePage,
+ "importFromDevicePageBackButton")
+
+ // To importFromDevicePage
+ keyClick(Qt.Key_Tab)
+ keyClick(Qt.Key_Tab)
+ keyClick(Qt.Key_Tab)
+ compare(fromDeviceButton.focus, true)
+
+ keyClick(Qt.Key_Enter)
+ compare(pinFromDevice.focus, true)
+
+ // No device pin
+ keyClick(Qt.Key_Tab)
+ compare(importFromDevicePageBackButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordFromDevice.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(pinFromDevice.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(importFromDevicePageBackButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordFromDevice.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(pinFromDevice.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordFromDevice.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(importFromDevicePageBackButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(pinFromDevice.focus, true)
+
+ // With device pin
+ pinFromDevice.text = "test"
+
+ keyClick(Qt.Key_Tab)
+ compare(importFromDevicePageConnectBtn.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(importFromDevicePageBackButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordFromDevice.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(pinFromDevice.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(importFromDevicePageConnectBtn.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(importFromDevicePageBackButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordFromDevice.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(pinFromDevice.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordFromDevice.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(importFromDevicePageBackButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(importFromDevicePageConnectBtn.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(pinFromDevice.focus, true)
+
+ // Account creation in process
+ importFromDevicePageConnectBtn.spinnerTriggered = true
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordFromDevice.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(pinFromDevice.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordFromDevice.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(pinFromDevice.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordFromDevice.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(pinFromDevice.focus, true)
+
+ importFromDevicePageConnectBtn.spinnerTriggered = false
+
+ // Check lineEdit enter key press corrspond correctly
+ keyClick(Qt.Key_Enter)
+ compare(pinFromDevice.focus, true)
+
+ keyClick(Qt.Key_Up)
+ keyClick(Qt.Key_Enter)
+ compare(pinFromDevice.focus, true)
+
+ pinFromDevice.text = "test"
+ keyClick(Qt.Key_Enter)
+
+ spyReportFailure.wait(15000)
+ verify(spyReportFailure.count >= 1)
+
+ // Go back to welcomePage
+ keyClick(Qt.Key_Up)
+ keyClick(Qt.Key_Up)
+ keyClick(Qt.Key_Enter)
+ }
+
+ function test_importFromBackupPageKeyNavigation() {
+ uut.clearSignalSpy()
+
+ var welcomePage = findChild(uut, "welcomePage")
+ var importFromBackupPage = findChild(uut, "importFromBackupPage")
+
+ var fromBackupButton = findChild(welcomePage, "fromBackupButton")
+
+ var passwordFromBackupEdit = findChild(importFromBackupPage, "passwordFromBackupEdit")
+ var importFromBackupPageBackButton = findChild(importFromBackupPage,
+ "importFromBackupPageBackButton")
+ var importFromBackupPageConnectBtn = findChild(importFromBackupPage,
+ "importFromBackupPageConnectBtn")
+ var fileImportBtn = findChild(importFromBackupPage, "fileImportBtn")
+
+ // To importFromBackupPage
+ keyClick(Qt.Key_Tab)
+ keyClick(Qt.Key_Tab)
+ keyClick(Qt.Key_Tab)
+ keyClick(Qt.Key_Tab)
+ compare(fromBackupButton.focus, true)
+
+ keyClick(Qt.Key_Enter)
+ compare(passwordFromBackupEdit.focus, true)
+
+ // No filePath loaded
+ keyClick(Qt.Key_Tab)
+ compare(importFromBackupPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(fileImportBtn.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordFromBackupEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(importFromBackupPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(fileImportBtn.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordFromBackupEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(fileImportBtn.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(importFromBackupPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordFromBackupEdit.focus, true)
+
+ // With filePath loaded
+ importFromBackupPage.filePath = "test"
+
+ keyClick(Qt.Key_Tab)
+ compare(importFromBackupPageConnectBtn.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(importFromBackupPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(fileImportBtn.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordFromBackupEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(importFromBackupPageConnectBtn.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(importFromBackupPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(fileImportBtn.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordFromBackupEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(fileImportBtn.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(importFromBackupPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(importFromBackupPageConnectBtn.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordFromBackupEdit.focus, true)
+
+ // Account creation in process
+ importFromBackupPageConnectBtn.spinnerTriggered = true
+
+ keyClick(Qt.Key_Tab)
+ compare(fileImportBtn.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(passwordFromBackupEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(fileImportBtn.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(passwordFromBackupEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(fileImportBtn.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(passwordFromBackupEdit.focus, true)
+
+ importFromBackupPageConnectBtn.spinnerTriggered = false
+
+ // Check lineEdit enter key press corrspond correctly
+ var fileName = "gz_test.gz"
+ var wrongPassword = "ccc"
+ importFromBackupPage.filePath = UtilsAdapter.toFileAbsolutepath(
+ "tests/qml/src/resources/gz_test.gz") + "/" + fileName
+ passwordFromBackupEdit.text = wrongPassword
+
+ keyClick(Qt.Key_Enter)
+
+ spyReportFailure.wait(15000)
+ verify(spyReportFailure.count >= 1)
+
+ // Go back to welcomePage
+ keyClick(Qt.Key_Up)
+ keyClick(Qt.Key_Up)
+ keyClick(Qt.Key_Enter)
+ }
+
+ function test_createSIPAccountPageKeyNavigation() {
+ uut.clearSignalSpy()
+
+ var welcomePage = findChild(uut, "welcomePage")
+ var createSIPAccountPage = findChild(uut, "createSIPAccountPage")
+
+ var showAdvancedButton = findChild(welcomePage, "showAdvancedButton")
+
+ var newSIPAccountButton = findChild(welcomePage, "newSIPAccountButton")
+
+ var sipServernameEdit = findChild(createSIPAccountPage, "sipServernameEdit")
+ var sipProxyEdit = findChild(createSIPAccountPage, "sipProxyEdit")
+ var sipUsernameEdit = findChild(createSIPAccountPage, "sipUsernameEdit")
+ var sipPasswordEdit = findChild(createSIPAccountPage, "sipPasswordEdit")
+ var createSIPAccountButton = findChild(createSIPAccountPage, "createSIPAccountButton")
+ var createSIPAccountPageBackButton = findChild(createSIPAccountPage,
+ "createSIPAccountPageBackButton")
+
+ // To connectToAccountManagerPage
+ keyClick(Qt.Key_Tab)
+ keyClick(Qt.Key_Up)
+ keyClick(Qt.Key_Enter)
+ keyClick(Qt.Key_Tab)
+ keyClick(Qt.Key_Tab)
+ compare(newSIPAccountButton.focus, true)
+
+ keyClick(Qt.Key_Enter)
+ compare(sipServernameEdit.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(sipProxyEdit.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(sipUsernameEdit.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(sipPasswordEdit.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(createSIPAccountButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(createSIPAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(sipServernameEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(sipProxyEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(sipUsernameEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(sipPasswordEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(createSIPAccountButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(createSIPAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(sipServernameEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(createSIPAccountPageBackButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(createSIPAccountButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(sipPasswordEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(sipUsernameEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(sipProxyEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(sipServernameEdit.focus, true)
+
+ // Check lineEdit enter key press corrspond correctly
+ keyClick(Qt.Key_Enter)
+ keyClick(Qt.Key_Enter)
+ keyClick(Qt.Key_Enter)
+ keyClick(Qt.Key_Enter)
+
+ // Wait until the account creation is finished
+ spyAccountIsReady.wait()
+ compare(spyAccountIsReady.count, 1)
+
+ spyAccountStatusChanged.wait()
+ verify(spyAccountStatusChanged.count >= 1)
+
+ WizardViewStepModel.nextStep()
+
+ spyAccountConfigFinalized.wait()
+ compare(spyAccountConfigFinalized.count, 1)
+
+ spyCloseWizardView.wait()
+ compare(spyCloseWizardView.count, 1)
+
+ AccountAdapter.deleteCurrentAccount()
+
+ // Wait until the account removal is finished
+ spyAccountIsRemoved.wait()
+ compare(spyAccountIsRemoved.count, 1)
+
+ // Hide advanced options
+ showAdvancedButton.clicked()
+ }
+
+ function test_profilePageKeyNavigation() {
+ uut.clearSignalSpy()
+
+ var controlPanelStackView = findChild(uut, "controlPanelStackView")
+
+ var welcomePage = findChild(uut, "welcomePage")
+ var createAccountPage = findChild(uut, "createAccountPage")
+ var profilePage = findChild(uut, "profilePage")
+ var backupKeysPage = findChild(uut, "backupKeysPage")
+
+ var createAccountButton = findChild(createAccountPage, "createAccountButton")
+
+ var aliasEdit = findChild(profilePage, "aliasEdit")
+ var saveProfileBtn = findChild(profilePage, "saveProfileBtn")
+ var setAvatarWidget = findChild(profilePage, "setAvatarWidget")
+ var skipProfileSavingButton = findChild(profilePage, "skipProfileSavingButton")
+
+ var photoboothImportFromFileDialog = findChild(setAvatarWidget,
+ "photoboothImportFromFileDialog")
+ var takePhotoButton = findChild(setAvatarWidget, "takePhotoButton")
+ var photoboothViewClearButton = findChild(setAvatarWidget,
+ "photoboothViewClearButton")
+ var photoboothViewImportButton = findChild(setAvatarWidget,
+ "photoboothViewImportButton")
+
+ // WelcomePage initially
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to createAccount page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.CreateJamiAccount)
+
+ // Go to set up password page
+ WizardViewStepModel.nextStep()
+ createAccountButton.clicked()
+
+ // Wait until the account creation is finished
+ spyAccountIsReady.wait()
+ compare(spyAccountIsReady.count, 1)
+
+ // Now we are in profile page
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ profilePage)
+ compare(aliasEdit.focus, true)
+
+ spyAccountConfigFinalized.wait()
+ compare(spyAccountConfigFinalized.count, 1)
+
+ // Navigation test
+ keyClick(Qt.Key_Tab)
+ compare(saveProfileBtn.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(skipProfileSavingButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(takePhotoButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(photoboothViewImportButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(aliasEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(saveProfileBtn.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(skipProfileSavingButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(takePhotoButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(photoboothViewImportButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(aliasEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(photoboothViewImportButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(takePhotoButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(skipProfileSavingButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(saveProfileBtn.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(aliasEdit.focus, true)
+
+ // Set up photo from fake JamiFileDialog imported file
+ spyAccountStatusChanged.clear()
+ photoboothViewImportButton.focusAfterFileDialogClosed = true
+ photoboothImportFromFileDialog.file = UtilsAdapter.toFileAbsolutepath(
+ "tests/qml/src/resources/png_test.png") + "/" + "png_test.png"
+ photoboothImportFromFileDialog.accepted()
+
+ spyAccountStatusChanged.wait()
+ verify(spyAccountStatusChanged.count >= 1)
+ compare(photoboothViewImportButton.focus, true)
+ compare(photoboothViewClearButton.visible, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(aliasEdit.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(saveProfileBtn.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(skipProfileSavingButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(takePhotoButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(photoboothViewClearButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(photoboothViewImportButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(aliasEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(saveProfileBtn.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(skipProfileSavingButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(takePhotoButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(photoboothViewClearButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(photoboothViewImportButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(photoboothViewClearButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(takePhotoButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(skipProfileSavingButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(saveProfileBtn.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(aliasEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(photoboothViewImportButton.focus, true)
+
+ // Clear photo
+ keyClick(Qt.Key_Up)
+ compare(photoboothViewClearButton.focus, true)
+ keyClick(Qt.Key_Enter)
+ compare(takePhotoButton.focus, true)
+
+ // Taking photo focus test
+ setAvatarWidget.isPreviewing = true
+
+ keyClick(Qt.Key_Tab)
+ compare(photoboothViewClearButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(aliasEdit.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(saveProfileBtn.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(skipProfileSavingButton.focus, true)
+
+ keyClick(Qt.Key_Tab)
+ compare(takePhotoButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(photoboothViewClearButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(aliasEdit.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(saveProfileBtn.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(skipProfileSavingButton.focus, true)
+
+ keyClick(Qt.Key_Down)
+ compare(takePhotoButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(skipProfileSavingButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(saveProfileBtn.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(aliasEdit.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(photoboothViewClearButton.focus, true)
+
+ keyClick(Qt.Key_Up)
+ compare(takePhotoButton.focus, true)
+
+ setAvatarWidget.isPreviewing = false
+
+ // Check lineEdit enter key press corrspond correctly
+ var aliasName = "test"
+ aliasEdit.text = aliasName
+ spyAccountStatusChanged.clear()
+
+ keyClick(Qt.Key_Tab)
+ keyClick(Qt.Key_Tab)
+ keyClick(Qt.Key_Tab)
+ keyClick(Qt.Key_Enter)
+
+ var showBackup = (WizardViewStepModel.accountCreationOption ===
+ WizardViewStepModel.AccountCreationOption.CreateJamiAccount
+ || WizardViewStepModel.accountCreationOption ===
+ WizardViewStepModel.AccountCreationOption.CreateRendezVous)
+ && !AppSettingsManager.getValue(Settings.NeverShowMeAgain)
+ if (showBackup) {
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ backupKeysPage)
+ WizardViewStepModel.nextStep()
+ }
+
+ spyAccountStatusChanged.wait()
+ verify(spyAccountStatusChanged.count >= 1)
+
+ spyCloseWizardView.wait()
+ compare(spyCloseWizardView.count, 1)
+
+ // Check alias text
+ compare(CurrentAccount.alias, aliasName)
+
+ AccountAdapter.deleteCurrentAccount()
+
+ // Wait until the account removal is finished
+ spyAccountIsRemoved.wait()
+ compare(spyAccountIsRemoved.count, 1)
+ }
+
+ function test_backupKeysPageNavigation() {
+ uut.clearSignalSpy()
+
+ var controlPanelStackView = findChild(uut, "controlPanelStackView")
+
+ var welcomePage = findChild(uut, "welcomePage")
+ var createAccountPage = findChild(uut, "createAccountPage")
+ var profilePage = findChild(uut, "profilePage")
+ var backupKeysPage = findChild(uut, "backupKeysPage")
+
+ var createAccountButton = findChild(createAccountPage, "createAccountButton")
+ var skipProfileSavingButton = findChild(profilePage, "skipProfileSavingButton")
+
+ // WelcomePage initially
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ welcomePage)
+
+ // Go to createAccount page
+ WizardViewStepModel.startAccountCreationFlow(
+ WizardViewStepModel.AccountCreationOption.CreateJamiAccount)
+
+ // Go to set up password page
+ WizardViewStepModel.nextStep()
+ createAccountButton.clicked()
+
+ // Wait until the account creation is finished
+ spyAccountIsReady.wait()
+ compare(spyAccountIsReady.count, 1)
+
+ // Now we are in profile page
+ compare(controlPanelStackView.children[controlPanelStackView.currentIndex],
+ profilePage)
+ spyAccountConfigFinalized.wait()
+ compare(spyAccountConfigFinalized.count, 1)
+
+ skipProfileSavingButton.clicked()
+
+ spyCloseWizardView.wait()
+ compare(spyCloseWizardView.count, 1)
+
+ AccountAdapter.deleteCurrentAccount()
+
+ // Wait until the account removal is finished
+ spyAccountIsRemoved.wait()
+ compare(spyAccountIsRemoved.count, 1)
+ }
+ }
+}