File indexing completed on 2024-04-28 04:55:54
0001 /* ============================================================ 0002 * Falkon - Qt web browser 0003 * Copyright (C) 2018 Anmol Gautam <tarptaeya@gmail.com> 0004 * 0005 * This program is free software: you can redistribute it and/or modify 0006 * it under the terms of the GNU General Public License as published by 0007 * the Free Software Foundation, either version 3 of the License, or 0008 * (at your option) any later version. 0009 * 0010 * This program is distributed in the hope that it will be useful, 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0013 * GNU General Public License for more details. 0014 * 0015 * You should have received a copy of the GNU General Public License 0016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0017 * ============================================================ */ 0018 #include "qmlcookiesapitest.h" 0019 #include "autotests.h" 0020 #include "mainapplication.h" 0021 #include "cookiejar.h" 0022 #include "qml/api/cookies/qmlcookie.h" 0023 #include <QWebEngineProfile> 0024 0025 void QmlCookiesApiTest::initTestCase() 0026 { 0027 } 0028 0029 void QmlCookiesApiTest::cleanupTestCase() 0030 { 0031 } 0032 0033 void QmlCookiesApiTest::testCookieAdditionRemoval() 0034 { 0035 QSignalSpy cookieAddSpy(mApp->cookieJar(), &CookieJar::cookieAdded); 0036 m_testHelper.evaluate(QL1S("Falkon.Cookies.set({" 0037 " name: 'Example'," 0038 " url: '.example.com'," 0039 " expirationDate: Date.now() + 60*1000" 0040 "})")); 0041 QTRY_COMPARE(cookieAddSpy.count(), 1); 0042 QNetworkCookie netCookie = qvariant_cast<QNetworkCookie>(cookieAddSpy.at(0).at(0)); 0043 QCOMPARE(netCookie.name(), QByteArrayLiteral("Example")); 0044 QObject *object = m_testHelper.evaluateQObject(QSL("Falkon.Cookies")); 0045 QVERIFY(object); 0046 QSignalSpy qmlCookieSpy(object, SIGNAL(changed(QVariantMap))); 0047 QNetworkCookie anotherNetCookie; 0048 anotherNetCookie.setName(QSL("Hello").toLocal8Bit()); 0049 anotherNetCookie.setDomain(QSL(".mydomain.com")); 0050 anotherNetCookie.setExpirationDate(QDateTime::currentDateTime().addSecs(60)); 0051 mApp->webProfile()->cookieStore()->setCookie(anotherNetCookie); 0052 QTRY_COMPARE(qmlCookieSpy.count(), 1); 0053 QVariantMap addedQmlCookieMap = QVariant(qmlCookieSpy.at(0).at(0)).toMap(); 0054 auto *addedQmlCookie = qvariant_cast<QObject*>(addedQmlCookieMap.value(QSL("cookie"))); 0055 bool removed = addedQmlCookieMap.value(QSL("removed")).toBool(); 0056 QCOMPARE(addedQmlCookie->property("name").toString(), QSL("Hello")); 0057 QCOMPARE(removed, false); 0058 0059 mApp->webProfile()->cookieStore()->deleteCookie(netCookie); 0060 QTRY_COMPARE(qmlCookieSpy.count(), 2); 0061 QVariantMap removedQmlCookieMap = QVariant(qmlCookieSpy.at(1).at(0)).toMap(); 0062 auto *removedQmlCookie = qvariant_cast<QObject*>(removedQmlCookieMap.value(QSL("cookie"))); 0063 removed = removedQmlCookieMap.value(QSL("removed")).toBool(); 0064 QCOMPARE(removedQmlCookie->property("name").toString(), QSL("Example")); 0065 QCOMPARE(removed, true); 0066 0067 QSignalSpy cookieRemoveSpy(mApp->cookieJar(), &CookieJar::cookieRemoved); 0068 m_testHelper.evaluate(QL1S("Falkon.Cookies.remove({" 0069 " name: 'Hello'," 0070 " url: '.mydomain.com'," 0071 "})")); 0072 QTRY_COMPARE(cookieRemoveSpy.count(), 1); 0073 netCookie = qvariant_cast<QNetworkCookie>(cookieRemoveSpy.at(0).at(0)); 0074 QCOMPARE(netCookie.name(), QByteArrayLiteral("Hello")); 0075 } 0076 0077 void QmlCookiesApiTest::testCookieGet() 0078 { 0079 QDateTime current = QDateTime::currentDateTime(); 0080 QSignalSpy cookieAddSpy(mApp->cookieJar(), &CookieJar::cookieAdded); 0081 0082 QNetworkCookie netCookie_1; 0083 netCookie_1.setName(QSL("Apple").toLocal8Bit()); 0084 netCookie_1.setDomain(QSL(".apple-domain.com")); 0085 netCookie_1.setExpirationDate(current.addSecs(60)); 0086 mApp->webProfile()->cookieStore()->setCookie(netCookie_1); 0087 0088 QNetworkCookie netCookie_2; 0089 netCookie_2.setName(QSL("Mango").toLocal8Bit()); 0090 netCookie_2.setDomain(QSL(".mango-domain.com")); 0091 netCookie_2.setExpirationDate(current.addSecs(120)); 0092 mApp->webProfile()->cookieStore()->setCookie(netCookie_2); 0093 0094 QNetworkCookie netCookie_3; 0095 netCookie_3.setName(QSL("Mango").toLocal8Bit()); 0096 netCookie_3.setDomain(QSL(".yet-another-mango-domain.com")); 0097 netCookie_3.setExpirationDate(current.addSecs(180)); 0098 mApp->webProfile()->cookieStore()->setCookie(netCookie_3); 0099 0100 QTRY_COMPARE(cookieAddSpy.count(), 3); 0101 0102 QNetworkCookie actualMangoCookie; 0103 for (const QNetworkCookie &cookie : mApp->cookieJar()->getAllCookies()) { 0104 if (QString::fromUtf8(cookie.name()) == QSL("Mango") && cookie.domain() == QSL(".mango-domain.com")) { 0105 actualMangoCookie = cookie; 0106 } 0107 } 0108 0109 QObject *mangoCookie = m_testHelper.evaluateQObject(QL1S("Falkon.Cookies.get({" 0110 " name: 'Mango'," 0111 " url: '.mango-domain.com'" 0112 "})")); 0113 QVERIFY(mangoCookie); 0114 QCOMPARE(mangoCookie->property("name").toString(), QSL("Mango")); 0115 QCOMPARE(mangoCookie->property("expirationDate").toDateTime(), actualMangoCookie.expirationDate()); 0116 0117 QList<QVariant> mangoCookies = m_testHelper.evaluate(QSL("Falkon.Cookies.getAll({name: 'Mango'})")).toVariant().toList(); 0118 QCOMPARE(mangoCookies.length(), 2); 0119 } 0120 0121 FALKONTEST_MAIN(QmlCookiesApiTest)