Discover external tool settings and refresh cached settings UI
This commit is contained in:
@@ -16,3 +16,9 @@ add_executable(test-toolmodel
|
||||
target_include_directories(test-toolmodel PRIVATE ../src)
|
||||
target_link_libraries(test-toolmodel PRIVATE Qt6::Core Qt6::Test)
|
||||
add_test(NAME toolmodel COMMAND test-toolmodel)
|
||||
|
||||
add_executable(test-qmlresource test-qmlresource.cpp)
|
||||
target_link_libraries(test-qmlresource PRIVATE Qt6::Core Qt6::Test)
|
||||
target_compile_definitions(test-qmlresource PRIVATE KCM_PLUGIN_PATH="$<TARGET_FILE:kcm_fedora_tools>")
|
||||
add_dependencies(test-qmlresource kcm_fedora_tools)
|
||||
add_test(NAME qmlresource COMMAND test-qmlresource)
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
#include <QDateTime>
|
||||
#include <QFile>
|
||||
#include <QFileInfo>
|
||||
#include <QLibrary>
|
||||
#include <QTest>
|
||||
|
||||
class QmlResourceTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
private Q_SLOTS:
|
||||
void packagedUiHasItsOwnCacheStamp()
|
||||
{
|
||||
QLibrary plugin(QString::fromUtf8(KCM_PLUGIN_PATH));
|
||||
QVERIFY2(plugin.load(), qPrintable(plugin.errorString()));
|
||||
QFile ui(QStringLiteral(":/kcm/kcm_fedora_tools/main.qml"));
|
||||
QVERIFY(ui.open(QIODevice::ReadOnly));
|
||||
const auto source = ui.readAll();
|
||||
QVERIFY(source.contains("configureExternalTool"));
|
||||
QVERIFY(!source.contains("configurePanelActions"));
|
||||
const auto stamp = QFileInfo(ui).lastModified().toSecsSinceEpoch();
|
||||
QVERIFY(stamp > 0);
|
||||
const auto packageDate = qgetenv("SOURCE_DATE_EPOCH").toLongLong();
|
||||
if (packageDate > 0) {
|
||||
QVERIFY2(stamp != packageDate, "QML resources must not share the RPM changelog timestamp across revisions");
|
||||
}
|
||||
}
|
||||
};
|
||||
QTEST_GUILESS_MAIN(QmlResourceTest)
|
||||
#include "test-qmlresource.moc"
|
||||
@@ -3,12 +3,40 @@
|
||||
#include "toolmodel.h"
|
||||
|
||||
#include <QTest>
|
||||
#include <QDir>
|
||||
#include <QFile>
|
||||
#include <QTemporaryDir>
|
||||
|
||||
class ToolModelTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private Q_SLOTS:
|
||||
void discoversLocallyInstalledToolSettings()
|
||||
{
|
||||
QTemporaryDir directory;
|
||||
QVERIFY(directory.isValid());
|
||||
const QByteArray original = qgetenv("XDG_DATA_HOME");
|
||||
qputenv("XDG_DATA_HOME", directory.path().toUtf8());
|
||||
QVERIFY(QDir(directory.path()).mkpath(QStringLiteral("fedora-tools/settings")));
|
||||
QFile registration(directory.filePath(QStringLiteral("fedora-tools/settings/local-tool.json")));
|
||||
QVERIFY(registration.open(QIODevice::WriteOnly));
|
||||
registration.write("{\"command\":[\"/bin/true\",\"--settings\"]}");
|
||||
registration.close();
|
||||
ToolModel model;
|
||||
const PackageRecord package{QStringLiteral("local-tool"), QStringLiteral("1"), QStringLiteral("noarch"), QStringLiteral("Local tool")};
|
||||
model.setPackages({package}, {});
|
||||
QCOMPARE(model.rowCount(), 1);
|
||||
QVERIFY(model.data(model.index(0), ToolModel::ConfigurableRole).toBool());
|
||||
QVERIFY(model.data(model.index(0), ToolModel::ExternalConfigurationRole).toBool());
|
||||
QVERIFY(!model.data(model.index(0), ToolModel::AvailableRole).toBool());
|
||||
QCOMPARE(model.configurationCommand(package.name), QStringList({QStringLiteral("/bin/true"), QStringLiteral("--settings")}));
|
||||
// Repository entries alone must not expose locally registered commands.
|
||||
model.setPackages({}, {package});
|
||||
QVERIFY(!model.data(model.index(0), ToolModel::ConfigurableRole).toBool());
|
||||
QVERIFY(model.configurationCommand(package.name).isEmpty());
|
||||
qputenv("XDG_DATA_HOME", original);
|
||||
}
|
||||
void mergesInstalledAndAvailablePackages()
|
||||
{
|
||||
ToolModel model;
|
||||
|
||||
Reference in New Issue
Block a user