Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package qt6-networkauth for openSUSE:Factory 
checked in at 2026-10-18 19:21:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/qt6-networkauth (Old)
 and      /work/SRC/openSUSE:Factory/.qt6-networkauth.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "qt6-networkauth"

Sun Oct 18 19:21:30 2026 rev:44 rq:1384400 version:6.12.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/qt6-networkauth/qt6-networkauth.changes  
2026-08-21 16:51:51.837861652 +0200
+++ 
/work/SRC/openSUSE:Factory/.qt6-networkauth.new.3698736/qt6-networkauth.changes 
    2026-10-18 19:21:38.367569963 +0200
@@ -1,0 +2,6 @@
+Wed Sep 30 16:11:19 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 6.12.0
+  https://www.qt.io/blog/qt-6.12-released
+
+-------------------------------------------------------------------

Old:
----
  qtnetworkauth-everywhere-src-6.11.2.tar.xz

New:
----
  qtnetworkauth-everywhere-src-6.12.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ qt6-networkauth.spec ++++++
--- /var/tmp/diff_new_pack.VtP1Dx/_old  2026-10-18 19:21:39.131601639 +0200
+++ /var/tmp/diff_new_pack.VtP1Dx/_new  2026-10-18 19:21:39.133601722 +0200
@@ -16,8 +16,8 @@
 #
 
 
-%define real_version 6.11.2
-%define short_version 6.11
+%define real_version 6.12.0
+%define short_version 6.12
 %define short_name qtnetworkauth
 %define tar_name qtnetworkauth-everywhere-src
 %define tar_suffix %{nil}
@@ -28,7 +28,7 @@
 %endif
 #
 Name:           qt6-networkauth%{?pkg_suffix}
-Version:        6.11.2
+Version:        6.12.0
 Release:        0
 Summary:        Set of APIs to obtain limited access to online accounts and 
HTTP services
 License:        GPL-3.0-only WITH Qt-GPL-exception-1.0

++++++ qtnetworkauth-everywhere-src-6.11.2.tar.xz -> 
qtnetworkauth-everywhere-src-6.12.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtnetworkauth-everywhere-src-6.11.2/.cmake.conf 
new/qtnetworkauth-everywhere-src-6.12.0/.cmake.conf
--- old/qtnetworkauth-everywhere-src-6.11.2/.cmake.conf 2026-08-11 
19:38:11.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-6.12.0/.cmake.conf 2026-09-26 
12:11:34.000000000 +0200
@@ -1,9 +1,10 @@
-set(QT_REPO_MODULE_VERSION "6.11.2")
+set(QT_REPO_MODULE_VERSION "6.12.0")
 set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1")
 set(QT_EXTRA_INTERNAL_TARGET_DEFINES
     "QT_ENABLE_STRICT_MODE_UP_TO=QT_VERSION_CHECK(6,11,0)"
     # not yet in strict mode:
     "QT_LEAN_HEADERS=2"
+    "QT_NO_DISCONNECT_CONST_CONNECTION=1"
     "QT_NO_SINGLE_ARGUMENT_QHASH_OVERLOAD=1"
     "QT_NO_QPAIR=1"
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtnetworkauth-everywhere-src-6.11.2/.tag 
new/qtnetworkauth-everywhere-src-6.12.0/.tag
--- old/qtnetworkauth-everywhere-src-6.11.2/.tag        2026-08-11 
19:38:11.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-6.12.0/.tag        2026-09-26 
12:11:34.000000000 +0200
@@ -1 +1 @@
-3dc4ab6bd5087fc2f799be67470f5789eb06633c
+d38b832b9b19b0684f6b3539788d610a76ccb99b
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtnetworkauth-everywhere-src-6.11.2/CONTRIBUTING.md 
new/qtnetworkauth-everywhere-src-6.12.0/CONTRIBUTING.md
--- old/qtnetworkauth-everywhere-src-6.11.2/CONTRIBUTING.md     1970-01-01 
01:00:00.000000000 +0100
+++ new/qtnetworkauth-everywhere-src-6.12.0/CONTRIBUTING.md     2026-09-26 
12:11:34.000000000 +0200
@@ -0,0 +1,11 @@
+## Qt contribution guidelines
+
+We welcome contributions to Qt!
+
+Note that we cannot accept pull requests on GitHub. All contributions
+to the Qt project are exclusively handled through the
+[Gerrit code review system](https://codereview.qt-project.org).
+
+See
+[contribute.qt-project.org](https://contribute.qt-project.org/) to learn
+more.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtnetworkauth-everywhere-src-6.11.2/REUSE.toml 
new/qtnetworkauth-everywhere-src-6.12.0/REUSE.toml
--- old/qtnetworkauth-everywhere-src-6.11.2/REUSE.toml  2026-08-11 
19:38:11.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-6.12.0/REUSE.toml  2026-09-26 
12:11:34.000000000 +0200
@@ -28,8 +28,8 @@
 SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR BSD-3-Clause"
 
 [[annotations]]
-path = ["**.qdocconf", "**/doc/images/**",
-        "src/oauth/doc/images/**.webp"]
+path = ["**.qdocconf", "**/doc/images/**", "src/oauth/doc/images/**.webp",
+        "CONTRIBUTING.md"]
 comment = "documentation"
 precedence = "closest"
 SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-6.11.2/dependencies.yaml 
new/qtnetworkauth-everywhere-src-6.12.0/dependencies.yaml
--- old/qtnetworkauth-everywhere-src-6.11.2/dependencies.yaml   2026-08-11 
19:38:11.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-6.12.0/dependencies.yaml   2026-09-26 
12:11:34.000000000 +0200
@@ -1,4 +1,4 @@
 dependencies:
   ../qtbase:
-    ref: ef55f427f2c8b410d34f8a7681020a3000cf6866
+    ref: 025bdad181de241e81bf853c8a2d7bf3d19261a9
     required: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtnetworkauth-everywhere-src-6.11.2/licenseRule.json 
new/qtnetworkauth-everywhere-src-6.12.0/licenseRule.json
--- old/qtnetworkauth-everywhere-src-6.11.2/licenseRule.json    2026-08-11 
19:38:11.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-6.12.0/licenseRule.json    2026-09-26 
12:11:34.000000000 +0200
@@ -63,8 +63,9 @@
     },
     {
         "comment": "Files with the following endings are Documentation 
licensed.",
-        "file_pattern_ending": [".qdoc", ".qdocinc" , ".qdocconf", "README", 
"qt_attribution.json",
-                                 ".webp"],
+        "file_pattern_ending": [".qdoc", ".qdocinc", ".qdocconf", ".webp",
+                                "README", "CONTRIBUTING.md",
+                                "qt_attribution.json"],
         "location":{
             "": {
                 "comment": "",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-6.11.2/src/oauth/doc/qtnetworkauth.qdocconf 
new/qtnetworkauth-everywhere-src-6.12.0/src/oauth/doc/qtnetworkauth.qdocconf
--- 
old/qtnetworkauth-everywhere-src-6.11.2/src/oauth/doc/qtnetworkauth.qdocconf    
    2026-08-11 19:38:11.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-6.12.0/src/oauth/doc/qtnetworkauth.qdocconf    
    2026-09-26 12:11:34.000000000 +0200
@@ -40,6 +40,9 @@
 examplesinstallpath     = oauth
 exampledirs += ../../../examples/oauth snippets
 
+# Path to the root of qtnetworkauth (for automatic linking to source code)
+url.sources.rootdir     = ../../..
+
 #manifestmeta.highlighted.names = "QtNetworkAuth/Twitter Timeline Example"
 
 navigation.landingpage = "Qt Network Authorization"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-6.11.2/src/oauth/qabstractoauth.cpp 
new/qtnetworkauth-everywhere-src-6.12.0/src/oauth/qabstractoauth.cpp
--- old/qtnetworkauth-everywhere-src-6.11.2/src/oauth/qabstractoauth.cpp        
2026-08-11 19:38:11.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-6.12.0/src/oauth/qabstractoauth.cpp        
2026-09-26 12:11:34.000000000 +0200
@@ -181,6 +181,16 @@
     \sa QAbstractOAuthReplyHandler::tokenRequestErrorOccurred()
 */
 
+/*!
+    \fn void QAbstractOAuth::finished(QNetworkReply *reply)
+    \internal
+*/
+
+/*!
+    \fn void QAbstractOAuth::replyDataReceived(const QByteArray &data)
+    \internal
+*/
+
 // ### Qt 7 remove the support for separate HTTP methods (head(), get(), 
post(), put(),
 // deleteResource()), see QTBUG-124329
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-6.11.2/src/oauth/qabstractoauth2.cpp 
new/qtnetworkauth-everywhere-src-6.12.0/src/oauth/qabstractoauth2.cpp
--- old/qtnetworkauth-everywhere-src-6.11.2/src/oauth/qabstractoauth2.cpp       
2026-08-11 19:38:11.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-6.12.0/src/oauth/qabstractoauth2.cpp       
2026-09-26 12:11:34.000000000 +0200
@@ -396,8 +396,10 @@
     \deprecated [6.13] Use serverReportedErrorOccurred instead
     \fn QAbstractOAuth2::error(const QString &error, const QString 
&errorDescription, const QUrl &uri)
 
-    Signal emitted when the server responds to the authorization request with
-    an error as defined in \l 
{https://www.rfc-editor.org/rfc/rfc6749#section-5.2}
+    Signal emitted when the authorization server reports an error while
+    processing an authorization or token request, including a token refresh
+    request, as defined in
+    \l {https://www.rfc-editor.org/rfc/rfc6749#section-5.2}
     {RFC 6749 error response}.
 
     \a error is the name of the error; \a errorDescription describes the error
@@ -413,8 +415,10 @@
                                                      const QUrl &uri)
     \since 6.9
 
-    Signal emitted when the server responds to the authorization request with
-    an error as defined in \l 
{https://www.rfc-editor.org/rfc/rfc6749#section-5.2}
+    Signal emitted when the authorization server reports an error while
+    processing an authorization or token request, including a token refresh
+    request, as defined in
+    \l {https://www.rfc-editor.org/rfc/rfc6749#section-5.2}
     {RFC 6749 error response}.
 
     \a error is the name of the error; \a errorDescription describes the error
@@ -432,6 +436,11 @@
     from the server.
 */
 
+/*!
+    \fn void QAbstractOAuth2::responseTypeChanged(const QString &responseType)
+    \internal
+*/
+
 QAbstractOAuth2Private::QAbstractOAuth2Private(const std::pair<QString, 
QString> &clientCredentials,
                                                const QUrl &authorizationUrl,
                                                QNetworkAccessManager *manager) 
:
@@ -701,8 +710,24 @@
     Q_Q(QAbstractOAuth2);
 
     if (values.contains(QtOAuth2RfcKeywords::error)) {
-        _q_tokenRequestFailed(QAbstractOAuth::Error::ServerError,
-                                    
values.value(QtOAuth2RfcKeywords::error).toString());
+        const QString error = 
values.value(QtOAuth2RfcKeywords::error).toString();
+
+        // RFC 6749 section 5.2: error keyword is required to contain a value
+        if (error.isEmpty()) {
+            _q_tokenRequestFailed(QAbstractOAuth::Error::ServerError,
+                                  u"Received an empty OAuth error code"_s);
+            return;
+        }
+
+        // A failed refresh does not necessarily invalidate an existing
+        // access token. Restore the status before reporting the error.
+        if (status == QAbstractOAuth::Status::RefreshingToken) {
+            if (!q->token().isEmpty())
+                setStatus(QAbstractOAuth::Status::Granted);
+            else
+                setStatus(QAbstractOAuth::Status::NotAuthenticated);
+        }
+        (void)handleRfcErrorResponseIfPresent(values);
         return;
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-6.11.2/src/oauth/qoauth1.cpp 
new/qtnetworkauth-everywhere-src-6.12.0/src/oauth/qoauth1.cpp
--- old/qtnetworkauth-everywhere-src-6.11.2/src/oauth/qoauth1.cpp       
2026-08-11 19:38:11.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-6.12.0/src/oauth/qoauth1.cpp       
2026-09-26 12:11:34.000000000 +0200
@@ -575,6 +575,46 @@
 }
 
 /*!
+    \fn void QOAuth1::signatureMethodChanged(QOAuth1::SignatureMethod method)
+
+    Emitted when the signature \a method changes.
+
+    \sa signatureMethod(), setSignatureMethod()
+*/
+
+/*!
+    \fn void QOAuth1::clientSharedSecretChanged(const QString &credential)
+
+    Emitted when the client shared secret \a credential changes.
+
+    \sa clientSharedSecret(), setClientSharedSecret(), setClientCredentials()
+*/
+
+/*!
+    \fn void QOAuth1::tokenSecretChanged(const QString &token)
+
+    Emitted when the token secret \a token changes.
+
+    \sa tokenSecret(), setTokenSecret(), setTokenCredentials()
+*/
+
+/*!
+    \fn void QOAuth1::temporaryCredentialsUrlChanged(const QUrl &url)
+
+    Emitted when the temporary credentials \a url changes.
+
+    \sa temporaryCredentialsUrl(), setTemporaryCredentialsUrl()
+*/
+
+/*!
+    \fn void QOAuth1::tokenCredentialsUrlChanged(const QUrl &url)
+
+    Emitted when the token credentials \a url changes.
+
+    \sa tokenCredentialsUrl(), setTokenCredentialsUrl()
+*/
+
+/*!
     Sends an authenticated HEAD request and returns a new
     QNetworkReply. The \a url and \a parameters are used to create
     the request.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-6.11.2/src/oauth/qoauthoobreplyhandler.cpp 
new/qtnetworkauth-everywhere-src-6.12.0/src/oauth/qoauthoobreplyhandler.cpp
--- old/qtnetworkauth-everywhere-src-6.11.2/src/oauth/qoauthoobreplyhandler.cpp 
2026-08-11 19:38:11.000000000 +0200
+++ new/qtnetworkauth-everywhere-src-6.12.0/src/oauth/qoauthoobreplyhandler.cpp 
2026-09-26 12:11:34.000000000 +0200
@@ -42,10 +42,7 @@
         emit tokenRequestErrorOccurred(QAbstractOAuth::Error::NetworkError, 
reply->errorString());
         return;
     }
-    if (!restReply.isHttpStatusSuccess()) {
-        emit tokenRequestErrorOccurred(QAbstractOAuth::Error::ServerError, 
reply->errorString());
-        return;
-    }
+    const bool isHttpStatusSuccess = restReply.isHttpStatusSuccess();
     if (reply->header(QNetworkRequest::ContentTypeHeader).isNull()) {
         emit tokenRequestErrorOccurred(QAbstractOAuth::Error::ServerError,
                                        u"Empty Content-type header"_s);
@@ -88,6 +85,14 @@
         return;
     }
 
+    // RFC 6749 section 5.2 specifies that token endpoint errors are typically
+    // returned with HTTP status 400. Let tokensReceived() handler report
+    // the error if it's an actual sever-side reported error. Otherwise error 
out here
+    if (!isHttpStatusSuccess && !ret.contains(u"error"_s)) {
+        emit tokenRequestErrorOccurred(QAbstractOAuth::Error::ServerError, 
reply->errorString());
+        return;
+    }
+
     Q_EMIT tokensReceived(ret);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-6.11.2/tests/auto/abstractoauth2/tst_abstractoauth2.cpp
 
new/qtnetworkauth-everywhere-src-6.12.0/tests/auto/abstractoauth2/tst_abstractoauth2.cpp
--- 
old/qtnetworkauth-everywhere-src-6.11.2/tests/auto/abstractoauth2/tst_abstractoauth2.cpp
    2026-08-11 19:38:11.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-6.12.0/tests/auto/abstractoauth2/tst_abstractoauth2.cpp
    2026-09-26 12:11:34.000000000 +0200
@@ -49,11 +49,15 @@
 void tst_AbstractOAuth2::initTestCase()
 {
     // QLoggingCategory::setFilterRules(QStringLiteral("qt.networkauth* = 
true"));
+#ifdef BUILTIN_TESTDATA
+    testDataDir = QStringLiteral(":/shared/");
+#else
     testDataDir = QFileInfo(QFINDTESTDATA("../shared/certs")).absolutePath();
     if (testDataDir.isEmpty())
         testDataDir = QCoreApplication::applicationDirPath();
     if (!testDataDir.endsWith(QLatin1String("/")))
         testDataDir += QLatin1String("/");
+#endif
 }
 
 void tst_AbstractOAuth2::scopeCharacterWarnings()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-6.11.2/tests/auto/oauth2codeflow/tst_oauth2codeflow.cpp
 
new/qtnetworkauth-everywhere-src-6.12.0/tests/auto/oauth2codeflow/tst_oauth2codeflow.cpp
--- 
old/qtnetworkauth-everywhere-src-6.11.2/tests/auto/oauth2codeflow/tst_oauth2codeflow.cpp
    2026-08-11 19:38:11.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-6.12.0/tests/auto/oauth2codeflow/tst_oauth2codeflow.cpp
    2026-09-26 12:11:34.000000000 +0200
@@ -5,6 +5,7 @@
 
 #include <QtNetworkAuth/qabstractoauthreplyhandler.h>
 #include <QtNetworkAuth/qoauth2authorizationcodeflow.h>
+#include <QtNetworkAuth/qoauthhttpserverreplyhandler.h>
 
 #include "oauthtestutils.h"
 
@@ -25,6 +26,7 @@
     void refreshToken();
     void getAndRefreshToken();
     void tokenRequestErrors();
+    void refreshTokenErrorResponse();
     void authorizationErrors();
     void modifyTokenRequests();
     void pkce_data();
@@ -110,11 +112,15 @@
 void tst_OAuth2CodeFlow::initTestCase()
 {
     // QLoggingCategory::setFilterRules(QStringLiteral("qt.networkauth* = 
true"));
+#ifdef BUILTIN_TESTDATA
+    testDataDir = QStringLiteral(":/shared/");
+#else
     testDataDir = QFileInfo(QFINDTESTDATA("../shared/certs")).absolutePath();
     if (testDataDir.isEmpty())
         testDataDir = QCoreApplication::applicationDirPath();
     if (!testDataDir.endsWith(QLatin1String("/")))
         testDataDir += QLatin1String("/");
+#endif
 }
 
 void tst_OAuth2CodeFlow::state()
@@ -666,6 +672,71 @@
     QCOMPARE(oauth2.status(), QAbstractOAuth::Status::Granted);
 }
 
+void tst_OAuth2CodeFlow::refreshTokenErrorResponse()
+{
+    auto server = createAuthorizationServer<WebServer>(Responses::defaults());
+
+    QOAuth2AuthorizationCodeFlow oauth2;
+    oauth2.setAuthorizationUrl(server->authorizationEndpoint());
+    oauth2.setTokenUrl(server->tokenEndpoint());
+
+    QOAuthHttpServerReplyHandler replyHandler;
+    oauth2.setReplyHandler(&replyHandler);
+
+    connect(&oauth2, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser,
+            &oauth2, [&replyHandler](const QUrl &url) {
+        const QUrlQuery query(url.query());
+        emit replyHandler.callbackReceived({
+            { u"code"_s, u"test"_s },
+            { u"state"_s, query.queryItemValue(u"state"_s) }
+        });
+    });
+
+    QSignalSpy grantedSpy(&oauth2, &QAbstractOAuth::granted);
+    oauth2.grant();
+    QTRY_COMPARE(grantedSpy.size(), 1);
+    QCOMPARE(oauth2.status(), QAbstractOAuth::Status::Granted);
+    QCOMPARE(oauth2.token(), u"an-access-token"_s);
+    QCOMPARE(oauth2.refreshToken(), u"a-refresh-token"_s);
+
+    server->responses.tokenHttpStatus = "400 Bad Request"_ba;
+    // https://datatracker.ietf.org/doc/html/rfc6749#section-5.2
+    // invalid_grant is for expired refresh tokens
+    server->responses.tokenBody = R"({
+        "error": "invalid_grant",
+        "error_description": "Token is not active",
+        "error_uri": "https://example.com/oauth/errors/invalid-grant";
+    })"_ba;
+
+    // We should get both server-side reported error as well as generic 
requestFailed()
+    QSignalSpy serverErrorSpy(&oauth2, 
&QAbstractOAuth2::serverReportedErrorOccurred);
+    QSignalSpy requestFailedSpy(&oauth2, &QAbstractOAuth::requestFailed);
+    QSignalSpy statusSpy(&oauth2, &QAbstractOAuth::statusChanged);
+    QTest::ignoreMessage(QtWarningMsg,
+                         QRegularExpression{"Authorization stage: 
AuthenticationError:.*"});
+
+    oauth2.refreshTokens();
+
+    QTRY_COMPARE(serverErrorSpy.size(), 1);
+    QCOMPARE(serverErrorSpy.at(0).at(0).toString(), u"invalid_grant"_s);
+    QCOMPARE(serverErrorSpy.at(0).at(1).toString(), u"Token is not active"_s);
+    QCOMPARE(serverErrorSpy.at(0).at(2).toUrl(),
+             QUrl{u"https://example.com/oauth/errors/invalid-grant"_s});
+    QCOMPARE(requestFailedSpy.size(), 1);
+    QCOMPARE(requestFailedSpy.at(0).at(0).value<QAbstractOAuth::Error>(),
+             QAbstractOAuth::Error::ServerError);
+    QCOMPARE(statusSpy.size(), 2);
+    QCOMPARE(statusSpy.at(0).at(0).value<QAbstractOAuth::Status>(),
+             QAbstractOAuth::Status::RefreshingToken);
+    // Since we still have access token, the flow returns back to granted
+    // even if refresh failed
+    QCOMPARE(statusSpy.at(1).at(0).value<QAbstractOAuth::Status>(),
+             QAbstractOAuth::Status::Granted);
+    QCOMPARE(oauth2.status(), QAbstractOAuth::Status::Granted);
+    QCOMPARE(oauth2.token(), u"an-access-token"_s);
+    QCOMPARE(oauth2.refreshToken(), u"a-refresh-token"_s);
+}
+
 using Method = QOAuth2AuthorizationCodeFlow::PkceMethod;
 
 void tst_OAuth2CodeFlow::pkce_data()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-6.11.2/tests/auto/oauth2deviceflow/tst_oauth2deviceflow.cpp
 
new/qtnetworkauth-everywhere-src-6.12.0/tests/auto/oauth2deviceflow/tst_oauth2deviceflow.cpp
--- 
old/qtnetworkauth-everywhere-src-6.11.2/tests/auto/oauth2deviceflow/tst_oauth2deviceflow.cpp
        2026-08-11 19:38:11.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-6.12.0/tests/auto/oauth2deviceflow/tst_oauth2deviceflow.cpp
        2026-09-26 12:11:34.000000000 +0200
@@ -141,11 +141,15 @@
 void tst_OAuth2DeviceFlow::initTestCase()
 {
     // QLoggingCategory::setFilterRules(QStringLiteral("qt.networkauth* = 
true"));
+#ifdef BUILTIN_TESTDATA
+    testDataDir = QStringLiteral(":/shared/");
+#else
     testDataDir = QFileInfo(QFINDTESTDATA("../shared/certs")).absolutePath();
     if (testDataDir.isEmpty())
         testDataDir = QCoreApplication::applicationDirPath();
     if (!testDataDir.endsWith(QLatin1String("/")))
         testDataDir += QLatin1String("/");
+#endif
 }
 
 class RequestModifier : public QObject
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-6.11.2/tests/auto/oauthhttpserverreplyhandler/CMakeLists.txt
 
new/qtnetworkauth-everywhere-src-6.12.0/tests/auto/oauthhttpserverreplyhandler/CMakeLists.txt
--- 
old/qtnetworkauth-everywhere-src-6.11.2/tests/auto/oauthhttpserverreplyhandler/CMakeLists.txt
       2026-08-11 19:38:11.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-6.12.0/tests/auto/oauthhttpserverreplyhandler/CMakeLists.txt
       2026-09-26 12:11:34.000000000 +0200
@@ -7,6 +7,8 @@
 ## tst_oauthhttpserverreplyhandler Test:
 #####################################################################
 
+list(APPEND test_data "../shared/certs")
+
 qt_internal_add_test(tst_oauthhttpserverreplyhandler
     SOURCES
         ../shared/webserver.h ../shared/webserver.cpp
@@ -17,6 +19,7 @@
         Qt::CorePrivate
         Qt::Network
         Qt::NetworkAuth
+    TESTDATA ${test_data}
 )
 
 #### Keys ignored in scope 1:.:.:oauthhttpserverreplyhandler.pro:<TRUE>:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtnetworkauth-everywhere-src-6.11.2/tests/auto/oauthhttpserverreplyhandler/tst_oauthhttpserverreplyhandler.cpp
 
new/qtnetworkauth-everywhere-src-6.12.0/tests/auto/oauthhttpserverreplyhandler/tst_oauthhttpserverreplyhandler.cpp
--- 
old/qtnetworkauth-everywhere-src-6.11.2/tests/auto/oauthhttpserverreplyhandler/tst_oauthhttpserverreplyhandler.cpp
  2026-08-11 19:38:11.000000000 +0200
+++ 
new/qtnetworkauth-everywhere-src-6.12.0/tests/auto/oauthhttpserverreplyhandler/tst_oauthhttpserverreplyhandler.cpp
  2026-09-26 12:11:34.000000000 +0200
@@ -67,11 +67,15 @@
 
 void tst_QOAuthHttpServerReplyHandler::initTestCase()
 {
+#ifdef BUILTIN_TESTDATA
+    testDataDir = QStringLiteral(":/shared/");
+#else
     testDataDir = QFileInfo(QFINDTESTDATA("certs")).absolutePath();
     if (testDataDir.isEmpty())
         testDataDir = QCoreApplication::applicationDirPath();
     if (!testDataDir.endsWith(QLatin1String("/")))
         testDataDir += QLatin1String("/");
+#endif
 }
 
 void tst_QOAuthHttpServerReplyHandler::tokenReplyErrors_data()

Reply via email to