Files
fedora-tools/fedora-tools-settings/tests/test-toolmodel.cpp
T

110 lines
5.5 KiB
C++

// SPDX-License-Identifier: MIT
#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;
const PackageRecord installed{QStringLiteral("touchpad-hold-tap"), QStringLiteral("0.1.0-5.fc44"), QStringLiteral("noarch"), QStringLiteral("Gesture")};
const PackageRecord available{QStringLiteral("touchpad-hold-tap"), QStringLiteral("0.1.0-6.fc44"), QStringLiteral("noarch"), QStringLiteral("Gesture")};
model.setPackages({installed}, {available}, {QStringLiteral("touchpad-hold-tap")});
QCOMPARE(model.rowCount(), 1);
const QModelIndex index = model.index(0);
QCOMPARE(model.data(index, ToolModel::InstalledRole).toBool(), true);
QCOMPARE(model.data(index, ToolModel::AvailableRole).toBool(), true);
QCOMPARE(model.data(index, ToolModel::UpdateAvailableRole).toBool(), true);
QCOMPARE(model.mayInstall(QStringLiteral("touchpad-hold-tap")), true);
QCOMPARE(model.mayRemove(QStringLiteral("touchpad-hold-tap")), true);
QCOMPARE(model.mayRemove(QStringLiteral("missing-tool")), false);
}
void doesNotGuessUpdatesFromDifferentVersionStrings()
{
ToolModel model;
const PackageRecord installed{QStringLiteral("touchpad-hold-tap"), QStringLiteral("0.1.0-7.fc44"), QStringLiteral("noarch"), QStringLiteral("Gesture")};
const PackageRecord available{QStringLiteral("touchpad-hold-tap"), QStringLiteral("0.1.0-6.fc44"), QStringLiteral("noarch"), QStringLiteral("Gesture")};
model.setPackages({installed}, {available});
QCOMPARE(model.data(model.index(0), ToolModel::UpdateAvailableRole).toBool(), false);
}
void makesFingerprintControllerConfigurable()
{
ToolModel model;
const PackageRecord package{QStringLiteral("plasma-fingerprint-workaround"), QStringLiteral("0.1.0-2.fc44"), QStringLiteral("noarch"), QStringLiteral("Fingerprint")};
model.setPackages({package}, {package});
QCOMPARE(model.data(model.index(0), ToolModel::ConfigurableRole).toBool(), true);
}
void sortsAlphabeticallyRegardlessOfInstallState()
{
ToolModel model;
const PackageRecord installed{QStringLiteral("touchpad-hold-tap"), QStringLiteral("1"), QStringLiteral("noarch"), QStringLiteral("Touchpad")};
const PackageRecord availableFirst{QStringLiteral("plasma-always-show-unlock"), QStringLiteral("1"), QStringLiteral("noarch"), QStringLiteral("Lock screen")};
const PackageRecord availableLast{QStringLiteral("touchpad-hold-tap"), QStringLiteral("1"), QStringLiteral("noarch"), QStringLiteral("Old touchpad summary")};
model.setPackages({installed}, {availableFirst, availableLast});
QCOMPARE(model.data(model.index(0), ToolModel::PackageNameRole).toString(),
QStringLiteral("plasma-always-show-unlock"));
QCOMPARE(model.data(model.index(1), ToolModel::PackageNameRole).toString(),
QStringLiteral("touchpad-hold-tap"));
QCOMPARE(model.data(model.index(1), ToolModel::SummaryRole).toString(),
QStringLiteral("Touchpad"));
}
void makesInstalledToolsWithSettingsConfigurable()
{
ToolModel model;
const PackageRecord shortcuts{QStringLiteral("plasma-task-group-shortcuts"), QStringLiteral("1"), QStringLiteral("x86_64"), QStringLiteral("Shortcuts")};
const PackageRecord touchpad{QStringLiteral("touchpad-hold-tap"), QStringLiteral("1"), QStringLiteral("noarch"), QStringLiteral("Touchpad")};
model.setPackages({shortcuts, touchpad}, {shortcuts, touchpad});
QCOMPARE(model.data(model.index(0), ToolModel::ConfigurableRole).toBool(), true);
QCOMPARE(model.data(model.index(1), ToolModel::ConfigurableRole).toBool(), true);
}
};
QTEST_MAIN(ToolModelTest)
#include "test-toolmodel.moc"