Falkon Develop
Cross-platform Qt-based web browser
qmlcookiesapitest.cpp
Go to the documentation of this file.
1/* ============================================================
2* Falkon - Qt web browser
3* Copyright (C) 2018 Anmol Gautam <tarptaeya@gmail.com>
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License as published by
7* the Free Software Foundation, either version 3 of the License, or
8* (at your option) any later version.
9*
10* This program is distributed in the hope that it will be useful,
11* but WITHOUT ANY WARRANTY; without even the implied warranty of
12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13* GNU General Public License for more details.
14*
15* You should have received a copy of the GNU General Public License
16* along with this program. If not, see <http://www.gnu.org/licenses/>.
17* ============================================================ */
18#include "qmlcookiesapitest.h"
19#include "autotests.h"
20#include "mainapplication.h"
21#include "cookiejar.h"
23#include <QWebEngineProfile>
24
25void QmlCookiesApiTest::initTestCase()
26{
27}
28
29void QmlCookiesApiTest::cleanupTestCase()
30{
31}
32
33void QmlCookiesApiTest::testCookieAdditionRemoval()
34{
35 QSignalSpy cookieAddSpy(mApp->cookieJar(), &CookieJar::cookieAdded);
36 m_testHelper.evaluate(QL1S("Falkon.Cookies.set({"
37 " name: 'Example',"
38 " url: '.example.com',"
39 " expirationDate: Date.now() + 60*1000"
40 "})"));
41 QTRY_COMPARE(cookieAddSpy.count(), 1);
42 QNetworkCookie netCookie = qvariant_cast<QNetworkCookie>(cookieAddSpy.at(0).at(0));
43 QCOMPARE(netCookie.name(), QByteArrayLiteral("Example"));
44 QObject *object = m_testHelper.evaluateQObject(QSL("Falkon.Cookies"));
45 QVERIFY(object);
46 QSignalSpy qmlCookieSpy(object, SIGNAL(changed(QVariantMap)));
47 QNetworkCookie anotherNetCookie;
48 anotherNetCookie.setName(QSL("Hello").toLocal8Bit());
49 anotherNetCookie.setDomain(QSL(".mydomain.com"));
50 anotherNetCookie.setExpirationDate(QDateTime::currentDateTime().addSecs(60));
51 mApp->webProfile()->cookieStore()->setCookie(anotherNetCookie);
52 QTRY_COMPARE(qmlCookieSpy.count(), 1);
53 QVariantMap addedQmlCookieMap = QVariant(qmlCookieSpy.at(0).at(0)).toMap();
54 auto *addedQmlCookie = qvariant_cast<QObject*>(addedQmlCookieMap.value(QSL("cookie")));
55 bool removed = addedQmlCookieMap.value(QSL("removed")).toBool();
56 QCOMPARE(addedQmlCookie->property("name").toString(), QSL("Hello"));
57 QCOMPARE(removed, false);
58
59 mApp->webProfile()->cookieStore()->deleteCookie(netCookie);
60 QTRY_COMPARE(qmlCookieSpy.count(), 2);
61 QVariantMap removedQmlCookieMap = QVariant(qmlCookieSpy.at(1).at(0)).toMap();
62 auto *removedQmlCookie = qvariant_cast<QObject*>(removedQmlCookieMap.value(QSL("cookie")));
63 removed = removedQmlCookieMap.value(QSL("removed")).toBool();
64 QCOMPARE(removedQmlCookie->property("name").toString(), QSL("Example"));
65 QCOMPARE(removed, true);
66
67 QSignalSpy cookieRemoveSpy(mApp->cookieJar(), &CookieJar::cookieRemoved);
68 m_testHelper.evaluate(QL1S("Falkon.Cookies.remove({"
69 " name: 'Hello',"
70 " url: '.mydomain.com',"
71 "})"));
72 QTRY_COMPARE(cookieRemoveSpy.count(), 1);
73 netCookie = qvariant_cast<QNetworkCookie>(cookieRemoveSpy.at(0).at(0));
74 QCOMPARE(netCookie.name(), QByteArrayLiteral("Hello"));
75}
76
77void QmlCookiesApiTest::testCookieGet()
78{
79 QDateTime current = QDateTime::currentDateTime();
80 QSignalSpy cookieAddSpy(mApp->cookieJar(), &CookieJar::cookieAdded);
81
82 QNetworkCookie netCookie_1;
83 netCookie_1.setName(QSL("Apple").toLocal8Bit());
84 netCookie_1.setDomain(QSL(".apple-domain.com"));
85 netCookie_1.setExpirationDate(current.addSecs(60));
86 mApp->webProfile()->cookieStore()->setCookie(netCookie_1);
87
88 QNetworkCookie netCookie_2;
89 netCookie_2.setName(QSL("Mango").toLocal8Bit());
90 netCookie_2.setDomain(QSL(".mango-domain.com"));
91 netCookie_2.setExpirationDate(current.addSecs(120));
92 mApp->webProfile()->cookieStore()->setCookie(netCookie_2);
93
94 QNetworkCookie netCookie_3;
95 netCookie_3.setName(QSL("Mango").toLocal8Bit());
96 netCookie_3.setDomain(QSL(".yet-another-mango-domain.com"));
97 netCookie_3.setExpirationDate(current.addSecs(180));
98 mApp->webProfile()->cookieStore()->setCookie(netCookie_3);
99
100 QTRY_COMPARE(cookieAddSpy.count(), 3);
101
102 QNetworkCookie actualMangoCookie;
103 for (const QNetworkCookie &cookie : mApp->cookieJar()->getAllCookies()) {
104 if (QString::fromUtf8(cookie.name()) == QSL("Mango") && cookie.domain() == QSL(".mango-domain.com")) {
105 actualMangoCookie = cookie;
106 }
107 }
108
109 QObject *mangoCookie = m_testHelper.evaluateQObject(QL1S("Falkon.Cookies.get({"
110 " name: 'Mango',"
111 " url: '.mango-domain.com'"
112 "})"));
113 QVERIFY(mangoCookie);
114 QCOMPARE(mangoCookie->property("name").toString(), QSL("Mango"));
115 QCOMPARE(mangoCookie->property("expirationDate").toDateTime(), actualMangoCookie.expirationDate());
116
117 QList<QVariant> mangoCookies = m_testHelper.evaluate(QSL("Falkon.Cookies.getAll({name: 'Mango'})")).toVariant().toList();
118 QCOMPARE(mangoCookies.length(), 2);
119}
120
#define FALKONTEST_MAIN(Test)
Definition: autotests.h:23
QObject * evaluateQObject(const QString &source)
QJSValue evaluate(const QString &source)
#define mApp
#define QL1S(x)
Definition: qzcommon.h:44
#define QSL(x)
Definition: qzcommon.h:40