new unit tests, hehe 67
tests / linux (push) Failing after 2m18s
tests / windows (push) Skipped
tests / macos (push) Skipped
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped

Signed-off-by: galeon <dertiellis@gmail.com>
This commit is contained in:
galeon committed 2026-10-12 13:14:08 +03:00
1 parent ebf8ff7869
commit 41599fa82f
67 files changed
+8775 -4

No files matched your search

+75
View File
@@ -0,0 +1,75 @@
#include "testenv.h"
#include "msaauthservice.h"
#include <QUrlQuery>
class TestMsaRedirect : public QObject
{
Q_OBJECT
private slots:
void authorizationUrlCarriesClientAndRedirect()
{
const QUrl url = MsaAuthService::authorizationUrl();
QCOMPARE(url.scheme(), QStringLiteral("https"));
QCOMPARE(url.host(), QStringLiteral("login.live.com"));
const QUrlQuery query(url);
QCOMPARE(query.queryItemValue("client_id"), MsaAuthService::clientId());
QCOMPARE(query.queryItemValue("response_type"), QStringLiteral("code"));
QVERIFY(!query.queryItemValue("scope").isEmpty());
// Код возвращается на тот адрес, который потом распознаёт matchRedirect.
const QUrl redirect(query.queryItemValue("redirect_uri", QUrl::FullyDecoded));
QString code;
QVERIFY(MsaAuthService::matchRedirect(QUrl(redirect.toString() + "?code=abc"), &code, nullptr));
QCOMPARE(code, QStringLiteral("abc"));
}
void matchRedirect_data()
{
QTest::addColumn<QString>("url");
QTest::addColumn<bool>("matches");
QTest::addColumn<QString>("code");
QTest::addColumn<QString>("error");
QTest::newRow("code in query")
<< "https://login.live.com/oauth20_desktop.srf?code=M.C123-abc&lc=1049" << true << "M.C123-abc" << "";
QTest::newRow("code in fragment")
<< "https://login.live.com/oauth20_desktop.srf#code=FRAG&state=1" << true << "FRAG" << "";
QTest::newRow("encoded code")
<< "https://login.live.com/oauth20_desktop.srf?code=a%2Bb%3D" << true << "a+b=" << "";
QTest::newRow("error with description")
<< "https://login.live.com/oauth20_desktop.srf?error=access_denied&error_description=The%20user%20denied"
<< true << "" << "The user denied";
QTest::newRow("error only")
<< "https://login.live.com/oauth20_desktop.srf?error=server_error" << true << "" << "server_error";
QTest::newRow("host case-insensitive")
<< "https://LOGIN.LIVE.COM/oauth20_desktop.srf?code=x" << true << "x" << "";
QTest::newRow("redirect without params")
<< "https://login.live.com/oauth20_desktop.srf" << true << "" << "";
QTest::newRow("authorize page") << "https://login.live.com/oauth20_authorize.srf?code=x" << false << "" << "";
QTest::newRow("foreign host") << "https://evil.example/oauth20_desktop.srf?code=x" << false << "" << "";
QTest::newRow("empty") << "" << false << "" << "";
}
void matchRedirect()
{
QFETCH(QString, url);
QFETCH(bool, matches);
QFETCH(QString, code);
QFETCH(QString, error);
QString actualCode = QStringLiteral("untouched");
QString actualError = QStringLiteral("untouched");
QCOMPARE(MsaAuthService::matchRedirect(QUrl(url), &actualCode, &actualError), matches);
if (matches) {
QCOMPARE(actualCode, code);
QCOMPARE(actualError, error);
} else {
QCOMPARE(actualCode, QStringLiteral("untouched"));
}
}
};
BILAUNCHER_TEST_MAIN(TestMsaRedirect)
#include "tst_msaredirect.moc"