Offer attachment encryption after selecting a file

This commit is contained in:
evgeny committed 2026-10-18 11:47:53 +02:00
1 parent 7e08135bba
commit b3495349e1
4 files changed
+57 -26

No files matched your search

+34 -4
View File
@@ -22,6 +22,7 @@ extern "C" {
#include <QMessageBox>
#include <QAbstractButton>
#include <QPushButton>
#include <QCheckBox>
static QString makeFile(const QTemporaryDir& dir, const QString& name, const QByteArray& contents = "test") {
const QString path = dir.filePath(name);
@@ -47,12 +48,19 @@ static bool dropUrls(QWidget* target, const QList<QUrl>& urls, bool process = tr
class FileDropTest : public QObject {
Q_OBJECT
private slots:
void encryptedAttachmentCapturesTargetAndResetsChoice_data() {
QTest::addColumn<bool>("picker");
QTest::newRow("drop") << false; QTest::newRow("file-picker") << true;
}
void encryptedAttachmentCapturesTargetAndResetsChoice() {
QFETCH(bool, picker);
QTemporaryDir dir; QVERIFY(dir.isValid());
const QString file = makeFile(dir, "private.txt", "private bytes");
InputBar bar(nullptr, nullptr); bar.show(); bar.setRecordingContext(dir.filePath("media"), "123");
auto* editor = bar.findChild<QTextEdit*>(); QVERIFY(editor);
auto* encrypt = bar.findChild<QPushButton*>("encryptAttachmentButton"); QVERIFY(encrypt);
auto* encrypt = bar.findChild<QCheckBox*>("encryptAttachmentCheckBox"); QVERIFY(encrypt);
auto* clear = bar.findChild<QPushButton*>("clearAttachmentButton"); QVERIFY(clear);
QVERIFY(!encrypt->isVisible()); QVERIFY(!encrypt->isChecked());
QSignalSpy ordinary(&bar, &InputBar::sendFileAttachment);
int encrypted = 0;
connect(&bar, &InputBar::submitAttachment, &bar, [&](const QString& target, attachment_send_req* request) {
@@ -60,13 +68,35 @@ private slots:
QCOMPARE(QString::fromUtf8(request->source), file); QCOMPARE(QString::fromUtf8(request->info.name), QString("private.txt"));
++encrypted; u_free(request);
});
QVERIFY(dropUrls(editor->viewport(), {QUrl::fromLocalFile(file)}));
QTimer timer; timer.setInterval(1);
if (picker) {
connect(&timer, &QTimer::timeout, &bar, [&] {
auto* dialog = qobject_cast<QFileDialog*>(QApplication::activeModalWidget());
if (!dialog) return;
timer.stop(); dialog->selectFile(file);
QMetaObject::invokeMethod(dialog, "accept", Qt::DirectConnection);
});
timer.start(); QVERIFY(QMetaObject::invokeMethod(&bar, "onAttachClicked", Qt::DirectConnection));
} else QVERIFY(dropUrls(editor->viewport(), {QUrl::fromLocalFile(file)}));
QVERIFY(encrypt->isVisible()); QVERIFY(!encrypt->isChecked());
QTest::mouseClick(encrypt, Qt::LeftButton); QVERIFY(encrypt->isChecked());
QTest::keyClick(editor, Qt::Key_Return);
QCOMPARE(encrypted, 1); QCOMPARE(ordinary.size(), 0); QVERIFY(!encrypt->isChecked()); QVERIFY(QFile::exists(file));
QVERIFY(!encrypt->isVisible());
QVERIFY(dropUrls(editor->viewport(), {QUrl::fromLocalFile(file)}));
QTest::mouseClick(encrypt, Qt::LeftButton); QVERIFY(encrypt->isChecked());
bar.setRecordingContext(dir.filePath("media"), "456"); QVERIFY(!encrypt->isChecked());
bar.setDmMode(true); QVERIFY(encrypt->isHidden()); QVERIFY(!encrypt->isChecked());
QTest::mouseClick(clear, Qt::LeftButton); QVERIFY(!encrypt->isVisible()); QVERIFY(!encrypt->isChecked());
QVERIFY(dropUrls(editor->viewport(), {QUrl::fromLocalFile(file)}));
QTest::mouseClick(encrypt, Qt::LeftButton); QVERIFY(encrypt->isChecked());
QVERIFY(dropUrls(editor->viewport(), {QUrl::fromLocalFile(dir.filePath("missing.txt"))}));
QVERIFY(encrypt->isChecked());
QVERIFY(dropUrls(editor->viewport(), {QUrl::fromLocalFile(makeFile(dir, "second.txt"))}));
QVERIFY(encrypt->isVisible()); QVERIFY(!encrypt->isChecked());
QTest::mouseClick(encrypt, Qt::LeftButton); QVERIFY(encrypt->isChecked());
bar.setRecordingContext(dir.filePath("media"), "456"); QVERIFY(!encrypt->isVisible()); QVERIFY(!encrypt->isChecked());
bar.setDmMode(true);
QVERIFY(dropUrls(editor->viewport(), {QUrl::fromLocalFile(file)}));
QVERIFY(!encrypt->isVisible()); QVERIFY(!encrypt->isChecked());
}
void replyDraftAndLateResults() {