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)