File indexing completed on 2024-05-12 05:52:46
0001 /* 0002 * SPDX-License-Identifier: GPL-3.0-or-later 0003 * SPDX-FileCopyrightText: 2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com> 0004 */ 0005 #include "account/actions_p.h" 0006 0007 #include "../test-utils/output.h" 0008 #include "../../test-utils/spy.h" 0009 0010 #include <QFile> 0011 #include <QSet> 0012 #include <QSignalSpy> 0013 #include <QString> 0014 #include <QTest> 0015 #include <QUuid> 0016 #include <QtDebug> 0017 0018 static QString existingAccountsIni(QLatin1String("existing-accounts.ini")); 0019 static QString emptyAccountsIni(QLatin1String("empty-accounts.ini")); 0020 0021 class DeleteAccountsTest: public QObject 0022 { 0023 Q_OBJECT 0024 private Q_SLOTS: 0025 void removeAccounts(void); 0026 void removeAccounts_data(void); 0027 }; 0028 0029 static void define_test_data(void) 0030 { 0031 QTest::addColumn<QSet<QUuid>>("ids"); 0032 QTest::addColumn<QString>("accounts"); 0033 QTest::addColumn<QString>("isolated"); 0034 QTest::addColumn<QString>("expected"); 0035 } 0036 0037 static void define_test_case(const char *label, const QString &accounts, const QString &isolated, const QString &expected, const QSet<QUuid> &toRemove) 0038 { 0039 QTest::newRow(label) << toRemove << accounts << isolated << expected; 0040 } 0041 0042 void DeleteAccountsTest::removeAccounts(void) 0043 { 0044 QFETCH(QSet<QUuid>, ids); 0045 QFETCH(QString, accounts); 0046 QFETCH(QString, isolated); 0047 QFETCH(QString, expected); 0048 0049 QVERIFY2(test::copyResourceAsWritable(accounts, isolated), "accounts INI resource should be available as file"); 0050 0051 bool actionRun = false; 0052 const QString actual = test::path(isolated); 0053 const accounts::SettingsProvider settings([&actual, &actionRun](const accounts::PersistenceAction &action) -> void 0054 { 0055 QSettings data(actual, QSettings::IniFormat); 0056 actionRun = true; 0057 action(data); 0058 }); 0059 0060 accounts::DeleteAccounts uut(settings, ids); 0061 QSignalSpy invalidSettings(&uut, &accounts::DeleteAccounts::invalid); 0062 QSignalSpy jobFinished(&uut, &accounts::DeleteAccounts::finished); 0063 0064 uut.run(); 0065 0066 QVERIFY2(test::signal_eventually_emitted_once(jobFinished), "job should be finished"); 0067 QVERIFY2(actionRun, "accounts action should have run"); 0068 QCOMPARE(invalidSettings.count(), 0); 0069 0070 QFile result(actual); 0071 QVERIFY2(result.exists(), "accounts file should still exist"); 0072 QCOMPARE(test::slurp(actual), test::slurp(expected)); 0073 } 0074 0075 void DeleteAccountsTest::removeAccounts_data(void) 0076 { 0077 static const QString existing(QLatin1String(":/delete-accounts/sample-accounts.ini")); 0078 static const QString empty(QLatin1String(":/delete-accounts/empty-accounts.ini")); 0079 static const QString hotp(QLatin1String(":/delete-accounts/only-hotp-left.ini")); 0080 static const QString totp(QLatin1String(":/delete-accounts/only-totp-left.ini")); 0081 0082 define_test_data(); 0083 define_test_case("remove hotp from sample accounts", existing, QLatin1String("remove-hotp-from-sample.ini"), totp, QSet<QUuid>() << QUuid(QLatin1String("072a645d-6c26-57cc-81eb-d9ef3b9b39e2")) ); 0084 define_test_case("remove totp from sample accounts", existing, QLatin1String("remove-totp-from-sample.ini"), hotp, QSet<QUuid>() << QUuid(QLatin1String("534cc72e-e9ec-5e39-a1ff-9f017c9be8cc"))); 0085 define_test_case("remove both from sample accounts", existing, QLatin1String("remove-both-from-sample.ini"), empty, QSet<QUuid>() << QUuid(QLatin1String("072a645d-6c26-57cc-81eb-d9ef3b9b39e2")) << QUuid(QLatin1String("534cc72e-e9ec-5e39-a1ff-9f017c9be8cc"))); 0086 define_test_case("remove hotp from totp only account", totp, QLatin1String("remove-hotp-from-totp.ini"), totp, QSet<QUuid>() << QUuid(QLatin1String("072a645d-6c26-57cc-81eb-d9ef3b9b39e2"))); 0087 define_test_case("remove totp from hotp only account", hotp, QLatin1String("remove-totp-from-hotp.ini"), hotp, QSet<QUuid>() << QUuid(QLatin1String("534cc72e-e9ec-5e39-a1ff-9f017c9be8cc"))); 0088 define_test_case("remove both from empty accounts", empty, QLatin1String("remove-both-from-empty.ini"), empty, QSet<QUuid>() << QUuid(QLatin1String("072a645d-6c26-57cc-81eb-d9ef3b9b39e2")) << QUuid(QLatin1String("534cc72e-e9ec-5e39-a1ff-9f017c9be8cc"))); 0089 define_test_case("remove bogus accounts from sample accounts", existing, QLatin1String("remove-bogus-from-sample.ini"), existing, QSet<QUuid>() << QUuid(QLatin1String("1885b51f-c4cf-448d-8cad-53306a1f558e"))); 0090 define_test_case("remove nothing from sample accounts", existing, QLatin1String("remove-nothing-from-sample.ini"), existing, QSet<QUuid>()); 0091 } 0092 0093 QTEST_MAIN(DeleteAccountsTest) 0094 0095 #include "delete-accounts.moc"