mirror of
https://invent.kde.org/graphics/okular
synced 2024-08-27 11:40:07 +00:00
![Sune Vuorela](/assets/img/avatar_default.png)
This is an abi break, but it menas we can extend signature and certificate info in the future without breaking the abi again. While we are at it, there is no need to hand around pointers to certificate/signature info any longer, so clean up that. Fix memleaks as side effect.
121 lines
3.6 KiB
C++
121 lines
3.6 KiB
C++
/*
|
|
SPDX-FileCopyrightText: 2022 Albert Astals Cid <aacid@kde.org>
|
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#include <QDialogButtonBox>
|
|
#include <QLineEdit>
|
|
#include <QMimeDatabase>
|
|
#include <QPushButton>
|
|
#include <QTemporaryFile>
|
|
#include <QTest>
|
|
#include <QTimer>
|
|
|
|
#include "../core/document.h"
|
|
#include "../core/form.h"
|
|
#include "../core/page.h"
|
|
#include "../settings_core.h"
|
|
|
|
class EnterPasswordDialogHelper : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
EnterPasswordDialogHelper()
|
|
{
|
|
QTimer::singleShot(0, this, &EnterPasswordDialogHelper::enterPassword);
|
|
}
|
|
|
|
void enterPassword()
|
|
{
|
|
QWidget *dialog = qApp->activeModalWidget();
|
|
if (!dialog) {
|
|
QTimer::singleShot(0, this, &EnterPasswordDialogHelper::enterPassword);
|
|
return;
|
|
}
|
|
QLineEdit *lineEdit = dialog->findChild<QLineEdit *>();
|
|
lineEdit->setText(QStringLiteral("fakeokular"));
|
|
|
|
QDialogButtonBox *buttonBox = dialog->findChild<QDialogButtonBox *>();
|
|
buttonBox->button(QDialogButtonBox::Ok)->click();
|
|
}
|
|
};
|
|
|
|
class SignUnsignedFieldTest : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
private Q_SLOTS:
|
|
void initTestCase();
|
|
void init();
|
|
void cleanup();
|
|
void testSignUnsignedField();
|
|
|
|
private:
|
|
Okular::Document *m_document;
|
|
};
|
|
|
|
void SignUnsignedFieldTest::initTestCase()
|
|
{
|
|
QStandardPaths::setTestModeEnabled(true);
|
|
Okular::SettingsCore::instance(QStringLiteral("signunsignedfieldtest"));
|
|
|
|
KConfig cfg(QStringLiteral("okular-generator-popplerrc"));
|
|
KConfigGroup g = cfg.group(QStringLiteral("Signatures"));
|
|
g.writeEntry(QStringLiteral("UseDefaultCertDB"), false);
|
|
g.writeEntry(QStringLiteral("DBCertificatePath"), "file://" KDESRCDIR "data/fake_okular_certstore");
|
|
|
|
m_document = new Okular::Document(nullptr);
|
|
}
|
|
|
|
void SignUnsignedFieldTest::init()
|
|
{
|
|
const QString testFile = QStringLiteral(KDESRCDIR "data/hello_with_dummy_signature.pdf");
|
|
QMimeDatabase db;
|
|
const QMimeType mime = db.mimeTypeForFile(testFile);
|
|
QCOMPARE(m_document->openDocument(testFile, QUrl(), mime), Okular::Document::OpenSuccess);
|
|
}
|
|
|
|
void SignUnsignedFieldTest::cleanup()
|
|
{
|
|
m_document->closeDocument();
|
|
}
|
|
|
|
void SignUnsignedFieldTest::testSignUnsignedField()
|
|
{
|
|
const QList<Okular::FormField *> forms = m_document->page(0)->formFields();
|
|
QCOMPARE(forms.count(), 1);
|
|
Okular::FormFieldSignature *ffs = dynamic_cast<Okular::FormFieldSignature *>(forms.first());
|
|
|
|
QCOMPARE(ffs->signatureType(), Okular::FormFieldSignature::UnsignedSignature);
|
|
|
|
const Okular::CertificateStore *certStore = m_document->certificateStore();
|
|
bool userCancelled, nonDateValidCerts;
|
|
{
|
|
EnterPasswordDialogHelper helper;
|
|
const QList<Okular::CertificateInfo> &certs = certStore->signingCertificatesForNow(&userCancelled, &nonDateValidCerts);
|
|
QCOMPARE(certs.count(), 1);
|
|
}
|
|
|
|
Okular::NewSignatureData data;
|
|
data.setCertNickname(QStringLiteral("fake-okular"));
|
|
QTemporaryFile f;
|
|
f.open();
|
|
QVERIFY(ffs->sign(data, f.fileName()));
|
|
|
|
m_document->closeDocument();
|
|
QMimeDatabase db;
|
|
const QMimeType mime = db.mimeTypeForFile(f.fileName());
|
|
QCOMPARE(m_document->openDocument(f.fileName(), QUrl(), mime), Okular::Document::OpenSuccess);
|
|
|
|
const QList<Okular::FormField *> newForms = m_document->page(0)->formFields();
|
|
QCOMPARE(newForms.count(), 1);
|
|
ffs = dynamic_cast<Okular::FormFieldSignature *>(newForms.first());
|
|
QCOMPARE(ffs->signatureType(), Okular::FormFieldSignature::AdbePkcs7detached);
|
|
QCOMPARE(ffs->signatureInfo().signerName(), QStringLiteral("FakeOkular"));
|
|
}
|
|
|
|
QTEST_MAIN(SignUnsignedFieldTest)
|
|
#include "signunsignedfieldtest.moc"
|