4
0
mirror of https://github.com/QuasarApp/installer-framework.git synced 2025-05-09 03:29:33 +00:00
Arttu Tarkiainen 55ecbb9660 Update repository categories on server authentication request
If repositories in a category were located on a server that requires
user authentication, IFW couldn't update information of the repositories
inside a category during runtime. This prevents for example storing
credentials from the authentication request dialog and blocks the
usage of that category.

Add a method for updating contents in repository categories and a
unit test for the new method. Also some minor tweaks to relevant
bits of code.

Task-number: QTIFW-1358
Change-Id: Idfa2559df6d0d2a6de428b8d5fb1f7672aa1e300
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
2019-08-15 10:00:37 +00:00

169 lines
4.7 KiB
C++

#include "repository.h"
#include "repositorycategory.h"
#include "settings.h"
#include <QDataStream>
#include <QString>
#include <QTest>
using namespace QInstaller;
class tst_Repository : public QObject
{
Q_OBJECT
private slots:
void testRepository()
{
Repository repo;
QCOMPARE(repo.isValid(), false);
QCOMPARE(repo.isDefault(), false);
QCOMPARE(repo.isEnabled(), false);
QCOMPARE(repo.url(), QUrl());
QCOMPARE(repo.username(), QString());
QCOMPARE(repo.password(), QString());
repo.setUrl(QUrl("http://www.digia.com"));
QCOMPARE(repo.isValid(), true);
QCOMPARE(repo.url(), QUrl("http://www.digia.com"));
repo.setEnabled(true);
QCOMPARE(repo.isEnabled(), true);
repo.setUsername("tester");
QCOMPARE(repo.username(), QString("tester"));
repo.setPassword("test");
QCOMPARE(repo.password(), QString("test"));
}
void testRepositoryFromUrl()
{
Repository repo(QUrl("http://www.digia.com"), true);
QCOMPARE(repo.isValid(), true);
QCOMPARE(repo.isDefault(), true);
QCOMPARE(repo.isEnabled(), true);
QCOMPARE(repo.url(), QUrl("http://www.digia.com"));
QCOMPARE(repo.username(), QString());
QCOMPARE(repo.password(), QString());
repo.setUrl(QUrl());
QCOMPARE(repo.isValid(), false);
repo.setEnabled(false);
QCOMPARE(repo.isEnabled(), false);
repo.setUsername("tester");
QCOMPARE(repo.username(), QString("tester"));
repo.setPassword("test");
QCOMPARE(repo.password(), QString("test"));
}
void testRepositoryFromUserInput()
{
Repository repo = Repository::fromUserInput("ftp://tester:test@www.digia.com");
QCOMPARE(repo.isValid(), true);
QCOMPARE(repo.isDefault(), false);
QCOMPARE(repo.isEnabled(), true);
QCOMPARE(repo.url(), QUrl("ftp://www.digia.com"));
QCOMPARE(repo.username(), QString("tester"));
QCOMPARE(repo.password(), QString("test"));
repo.setUrl(QUrl());
QCOMPARE(repo.isValid(), false);
repo.setEnabled(false);
QCOMPARE(repo.isEnabled(), false);
repo.setUsername("");
QCOMPARE(repo.username(), QString());
repo.setPassword("");
QCOMPARE(repo.password(), QString());
}
void testRepositoryOperators()
{
Repository lhs, rhs;
// operator==
QVERIFY(lhs == rhs);
// assignment operator
rhs = Repository::fromUserInput("ftp://tester:test@www.digia.com");
// operator!=
QVERIFY(lhs != rhs);
// copy constructor
Repository clhs(rhs);
// operator==
QVERIFY(clhs == rhs);
QByteArray ba1, ba2;
QDataStream s1(&ba1, QIODevice::ReadWrite), s2(&ba2, QIODevice::ReadWrite);
// QDatastream operator
s1 << clhs; s2 << rhs;
QCOMPARE(ba1, ba2);
Repository r1, r2;
s1 >> r1; s2 >> r2;
QCOMPARE(r1, r2);
}
void testUpdateRepositoryCategories()
{
Settings settings;
RepositoryCategory category;
category.setEnabled(true);
category.setDisplayName(QLatin1String("category"));
Repository original(QUrl("http://example.com/"), true);
original.setEnabled(true);
category.addRepository(original);
Repository replacement = original;
replacement.setUsername(QLatin1String("user"));
replacement.setPassword(QLatin1String("pass"));
QSet<RepositoryCategory> categories;
categories.insert(category);
settings.setRepositoryCategories(categories);
QHash<QString, QPair<Repository, Repository>> update;
// non-empty update
update.insert(QLatin1String("replace"), qMakePair(original, replacement));
QVERIFY(settings.updateRepositoryCategories(update) == Settings::UpdatesApplied);
// verify that the values really updated
QVERIFY(settings.repositoryCategories().values().at(0)
.repositories().values().at(0).username() == "user");
QVERIFY(settings.repositoryCategories().values().at(0)
.repositories().values().at(0).password() == "pass");
// empty update
update.clear();
QVERIFY(settings.updateRepositoryCategories(update) == Settings::NoUpdatesApplied);
// non-matching repository update
Repository nonMatching(QUrl("https://www.qt.io/"), true);
nonMatching.setEnabled(true);
update.insert(QLatin1String("replace"), qMakePair(nonMatching, replacement));
QVERIFY(settings.updateRepositoryCategories(update) == Settings::NoUpdatesApplied);
}
};
QTEST_MAIN(tst_Repository)
#include "tst_repository.moc"