diff --git a/syncthingtray/default/0001-Mock-setting-the-autostart-path-in-the-wizard-test.patch b/syncthingtray/default/0001-Mock-setting-the-autostart-path-in-the-wizard-test.patch new file mode 100644 index 00000000..11fcac72 --- /dev/null +++ b/syncthingtray/default/0001-Mock-setting-the-autostart-path-in-the-wizard-test.patch @@ -0,0 +1,140 @@ +From 549be45b55e401d2d22a07c87c85ccc9d1e4bbd8 Mon Sep 17 00:00:00 2001 +From: Martchus +Date: Fri, 22 Dec 2023 17:33:21 +0100 +Subject: [PATCH] Mock setting the autostart path in the wizard test + +This test would keep the autostart disabled but override an existing +autostart entry (see https://github.com/Martchus/syncthingtray/issues/221). +With this change it will no longer override an existing entry. Reading and +writing the autostart entry is now mocked and properly checked. +--- + syncthingwidgets/settings/settingsdialog.cpp | 7 ++++++ + syncthingwidgets/tests/wizard.cpp | 26 ++++++++++++++++++-- + 2 files changed, 31 insertions(+), 2 deletions(-) + +diff --git a/syncthingwidgets/settings/settingsdialog.cpp b/syncthingwidgets/settings/settingsdialog.cpp +index bf3f778..c1ebdb0 100644 +--- a/syncthingwidgets/settings/settingsdialog.cpp ++++ b/syncthingwidgets/settings/settingsdialog.cpp +@@ -818,6 +818,10 @@ QWidget *AutostartOptionPage::setupWidget() + */ + std::optional configuredAutostartPath() + { ++ if (qEnvironmentVariableIsSet(PROJECT_VARNAME_UPPER "_AUTOSTART_PATH_MOCK")) { ++ auto mockedPath = qEnvironmentVariable(PROJECT_VARNAME_UPPER "_AUTOSTART_PATH_MOCK"); ++ return mockedPath.isEmpty() ? std::nullopt : std::make_optional(mockedPath); ++ } + #if defined(PLATFORM_LINUX) && !defined(Q_OS_ANDROID) + auto desktopFile = QFile(QStandardPaths::locate(QStandardPaths::ConfigLocation, QStringLiteral("autostart/" PROJECT_NAME ".desktop"))); + // check whether the file can be opened and whether it is enabled but prevent reading large files +@@ -873,6 +877,9 @@ QString supposedAutostartPath() + */ + bool setAutostartPath(const QString &path) + { ++ if (qEnvironmentVariableIsSet(PROJECT_VARNAME_UPPER "_AUTOSTART_PATH_MOCK")) { ++ return qputenv(PROJECT_VARNAME_UPPER "_AUTOSTART_PATH_MOCK", path.toLocal8Bit()); ++ } + #if defined(PLATFORM_LINUX) && !defined(Q_OS_ANDROID) + const auto configPath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); + if (configPath.isEmpty()) { +diff --git a/syncthingwidgets/tests/wizard.cpp b/syncthingwidgets/tests/wizard.cpp +index 8fc00d7..8e6eb09 100644 +--- a/syncthingwidgets/tests/wizard.cpp ++++ b/syncthingwidgets/tests/wizard.cpp +@@ -6,9 +6,12 @@ + // use meta-data of syncthingtray application here + #include "resources/../../tray/resources/config.h" + ++#include ++ + #include + + #include ++#include + #include + #include + #include +@@ -148,6 +151,9 @@ void WizardTests::testShowingSettings() + */ + void WizardTests::testConfiguringLauncher() + { ++ // mock the autostart path; it is supposed to be preserved ++ QVERIFY(qputenv(PROJECT_VARNAME_UPPER "_AUTOSTART_PATH_MOCK", "fake-autostart-path")); ++ + // pretend libsyncthing / systemd is already enabled + // note: Should be unset as we're selecting to use an external binary. + auto &settings = Settings::values(); +@@ -188,6 +194,9 @@ void WizardTests::testConfiguringLauncher() + auto *const mainConfigPage = qobject_cast(wizardDlg.currentPage()); + QVERIFY(mainConfigPage != nullptr); + auto &setupDetection = wizardDlg.setupDetection(); ++ const auto &configuredAutostartPath = setupDetection.autostartConfiguredPath; ++ QVERIFY(configuredAutostartPath.has_value()); ++ QCOMPARE(configuredAutostartPath.value(), QStringLiteral("fake-autostart-path")); + QVERIFY(!setupDetection.hasConfig()); + // -> print debug output in certain launcher error cases to get the full picture if any of the subsequent checks fail + if (setupDetection.launcherError.has_value()) { +@@ -223,6 +232,10 @@ void WizardTests::testConfiguringLauncher() + // keep autostart setting as-is + auto *const autostartPage = qobject_cast(wizardDlg.currentPage()); + QVERIFY(autostartPage != nullptr); ++ auto *const keepExistingCheckBox = autostartPage->findChild(QStringLiteral("keepExistingCheckBox")); ++ QVERIFY(keepExistingCheckBox != nullptr); ++ QVERIFY(keepExistingCheckBox->isVisible()); ++ keepExistingCheckBox->setChecked(true); + wizardDlg.next(); + + // apply settings +@@ -233,7 +246,7 @@ void WizardTests::testConfiguringLauncher() + const auto summary = summaryTextBrowser->toPlainText(); + QVERIFY(summary.contains(QStringLiteral("Start Syncthing via Syncthing Tray's launcher"))); + QVERIFY(summary.contains(QStringLiteral("executable from PATH as separate process"))); +- QVERIFY(summary.contains(QStringLiteral("Keep autostart"))); ++ QVERIFY(summary.contains(QStringLiteral("Keep autostart disabled")) || summary.contains(QStringLiteral("Preserve existing autostart entry"))); + wizardDlg.next(); + + // check results +@@ -343,6 +356,7 @@ void WizardTests::testConfiguringLauncher() + QVERIFY(!settings.connection.primary.syncthingUrl.isEmpty()); + QVERIFY(!settings.connection.primary.apiKey.isEmpty()); + QCOMPARE(settings.connection.secondary.size(), 0); ++ QCOMPARE(qEnvironmentVariable(PROJECT_VARNAME_UPPER "_AUTOSTART_PATH_MOCK"), QStringLiteral("fake-autostart-path")); + } + + /*! +@@ -351,6 +365,9 @@ void WizardTests::testConfiguringLauncher() + */ + void WizardTests::testConfiguringCurrentlyRunningSyncthing() + { ++ // mock the autostart path; it is supposed to be changed ++ QVERIFY(qputenv(PROJECT_VARNAME_UPPER "_AUTOSTART_PATH_MOCK", "fake-autostart-path")); ++ + // change port in config file + auto wizardDlg = Wizard(); + auto &setupDetection = wizardDlg.setupDetection(); +@@ -427,9 +444,13 @@ void WizardTests::testConfiguringCurrentlyRunningSyncthing() + QVERIFY(!cfgNoneRadioButton->isChecked()); + wizardDlg.next(); + +- // keep autostart setting as-is ++ // override existing autostart setting + auto *const autostartPage = qobject_cast(wizardDlg.currentPage()); + QVERIFY(autostartPage != nullptr); ++ auto *const keepExistingCheckBox = autostartPage->findChild(QStringLiteral("keepExistingCheckBox")); ++ QVERIFY(keepExistingCheckBox != nullptr); ++ QVERIFY(keepExistingCheckBox->isVisible()); ++ keepExistingCheckBox->setChecked(false); + wizardDlg.next(); + configureSyncthingArgs(setupDetection); + +@@ -483,6 +504,7 @@ void WizardTests::testConfiguringCurrentlyRunningSyncthing() + QVERIFY(!settings.connection.primary.apiKey.isEmpty()); + QCOMPARE(settings.connection.secondary.size(), 1); + QCOMPARE(settings.connection.secondary[0].label, QStringLiteral("Backup of testconfig (created by wizard)")); ++ QCOMPARE(qEnvironmentVariable(PROJECT_VARNAME_UPPER "_AUTOSTART_PATH_MOCK"), setupDetection.autostartSupposedPath); + } + + bool WizardTests::confirmMessageBox() +-- +2.43.0 + diff --git a/syncthingtray/default/PKGBUILD b/syncthingtray/default/PKGBUILD index 57290545..0e155c49 100644 --- a/syncthingtray/default/PKGBUILD +++ b/syncthingtray/default/PKGBUILD @@ -43,13 +43,20 @@ checkdepends=('cppunit' 'syncthing' 'iproute2') [[ $_enable_kio_plugin ]] && makedepends+=('kio5') [[ $_enable_plasmoid ]] && makedepends+=('plasma-framework5' 'extra-cmake-modules') url="https://github.com/Martchus/${_reponame}" -source=("${pkgname}-${pkgver}.tar.gz::https://github.com/Martchus/${_reponame}/archive/v${pkgver}.tar.gz") -sha256sums=('0c48da193eb29338590bb297052a1274284d9c596a5078541c4d7cdf6b6eba6f') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/Martchus/${_reponame}/archive/v${pkgver}.tar.gz" + 0001-Mock-setting-the-autostart-path-in-the-wizard-test.patch) +sha256sums=('0c48da193eb29338590bb297052a1274284d9c596a5078541c4d7cdf6b6eba6f' + SKIP) ephemeral_port() { comm -23 <(seq 49152 65535) <(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep "[0-9]\{1,5\}" | sort | uniq) | shuf | head -n 1 } +prepare() { + cd "$srcdir/${PROJECT_DIR_NAME:-$_reponame-$pkgver}" + patch -p1 -i ../0001-Mock-setting-the-autostart-path-in-the-wizard-test.patch +} + build() { cd "$srcdir/${PROJECT_DIR_NAME:-$_reponame-$pkgver}" diff --git a/syncthingtray/qt6/0001-Mock-setting-the-autostart-path-in-the-wizard-test.patch b/syncthingtray/qt6/0001-Mock-setting-the-autostart-path-in-the-wizard-test.patch new file mode 120000 index 00000000..3b669e63 --- /dev/null +++ b/syncthingtray/qt6/0001-Mock-setting-the-autostart-path-in-the-wizard-test.patch @@ -0,0 +1 @@ +../default/0001-Mock-setting-the-autostart-path-in-the-wizard-test.patch \ No newline at end of file diff --git a/syncthingtray/qt6/PKGBUILD b/syncthingtray/qt6/PKGBUILD index 466d3714..d662f988 100644 --- a/syncthingtray/qt6/PKGBUILD +++ b/syncthingtray/qt6/PKGBUILD @@ -47,7 +47,8 @@ checkdepends=('cppunit' 'syncthing' 'iproute2') url="https://github.com/Martchus/${_reponame}" source=("${_name}-${pkgver}.tar.gz::https://github.com/Martchus/${_reponame}/archive/v${pkgver}.tar.gz" 0001-Fix-compilation-with-Qt-6.7.0beta1.patch - 0002-Fix-rendering-issues-with-Syncthing-icon-with-Qt-6.7.patch) + 0002-Fix-rendering-issues-with-Syncthing-icon-with-Qt-6.7.patch + 0001-Mock-setting-the-autostart-path-in-the-wizard-test.patch) sha256sums=('0c48da193eb29338590bb297052a1274284d9c596a5078541c4d7cdf6b6eba6f' SKIP SKIP) @@ -59,6 +60,7 @@ prepare() { cd "$srcdir/${PROJECT_DIR_NAME:-$_reponame-$pkgver}" patch -p1 -i ../0001-Fix-compilation-with-Qt-6.7.0beta1.patch patch -p1 -i ../0002-Fix-rendering-issues-with-Syncthing-icon-with-Qt-6.7.patch + patch -p1 -i ../0001-Mock-setting-the-autostart-path-in-the-wizard-test.patch } build() {