Test explicit self pairing menu, resume, and both PIN input steps
This commit is contained in:
1 parent
f2a2983986
commit
e36e16f139
1 file changed
+37
-13
@@ -3,6 +3,7 @@
|
||||
#include "../src/accountdelegate.h"
|
||||
#include "../src/devgroupdialog.h"
|
||||
#include <QInputDialog>
|
||||
#include <QLineEdit>
|
||||
#include <QDialogButtonBox>
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
@@ -181,8 +182,16 @@ private slots:
|
||||
debug_config_init(); debug_set_level(DEBUG_LEVEL_WARN);
|
||||
}
|
||||
|
||||
void deviceInvitationOpensPinAutomaticallyAndReturnsEnteredPin() {
|
||||
QWidget window; devgroupRequests.clear(); initDevgroupUi(&window);
|
||||
void deviceInvitationWaitsForSelfMenuAndSupportsBothPins_data() {
|
||||
QTest::addColumn<bool>("grouped");
|
||||
QTest::newRow("self") << false; QTest::newRow("collapsed-own-group") << true;
|
||||
}
|
||||
void deviceInvitationWaitsForSelfMenuAndSupportsBothPins() {
|
||||
QFETCH(bool, grouped);
|
||||
AccountList window; window.resize(420, 600); window.show();
|
||||
auto self = row(7, true, 5, 30, 255, 0, true);
|
||||
if (grouped) { memset(self.data() + 164, 42, 32); memcpy(self.data() + 196, "Devices", 8); }
|
||||
fill(window, "123", self); devgroupRequests.clear(); initDevgroupUi(&window);
|
||||
QVERIFY(devgroupCallback && !devgroupRequests.empty());
|
||||
auto respond = [](quint64 request, const QByteArray& json) {
|
||||
QByteArray bytes(9, 0); mf_put64(reinterpret_cast<uint8_t*>(bytes.data()), request); bytes[8] = 1; bytes += json;
|
||||
@@ -190,24 +199,39 @@ private slots:
|
||||
};
|
||||
const QByteArray invite = "0123456789abcdef0123456789abcdef";
|
||||
const QByteArray snapshot = "{\"group\":\"\",\"name\":\"\",\"invitations\":[{\"id\":\"" + invite +
|
||||
"\",\"peer\":\"0000000000000007\",\"channel\":\"123\",\"outgoing\":0,\"state\":1}]}";
|
||||
"\",\"peer\":\"0000000000000007\",\"channel\":\"123\",\"outgoing\":0,\"state\":1,\"input\":1}]}";
|
||||
respond(devgroupRequests.back().request_id, snapshot);
|
||||
auto* dialog = window.findChild<QInputDialog*>("devgroupIncomingPin"); QVERIFY(dialog && dialog->isVisible());
|
||||
QVERIFY(dialog->labelText().contains("personal device subgroup"));
|
||||
QVERIFY(dialog->labelText().contains("simply close this window"));
|
||||
QVERIFY(hasPendingDevicePairing()); QVERIFY(!window.findChild<QDialog*>("devgroupPairingDialog"));
|
||||
QVERIFY(context(window, "Finish pairing"));
|
||||
auto* dialog = window.findChild<QDialog*>("devgroupPairingDialog"); QVERIFY(dialog && dialog->isVisible());
|
||||
auto* label = dialog->findChild<QLabel*>(); QVERIFY(label->text().contains("personal device subgroup"));
|
||||
QVERIFY(label->text().contains("simply close this window"));
|
||||
QVERIFY(dialog->grab().save(QDir::tempPath() + "/device-link-pin-help.png"));
|
||||
auto* box = dialog->findChild<QDialogButtonBox*>(); QVERIFY(box); QVERIFY(!box->button(QDialogButtonBox::Ok)->isEnabled());
|
||||
dialog->setTextValue("1234"); QVERIFY(box->button(QDialogButtonBox::Ok)->isEnabled()); dialog->accept();
|
||||
auto* edit = dialog->findChild<QLineEdit*>("devgroupPinInput"); QVERIFY(edit);
|
||||
auto* check = dialog->findChild<QPushButton*>("devgroupCheckPin"); QVERIFY(check && !check->isEnabled());
|
||||
edit->setText("1234"); QVERIFY(check->isEnabled()); check->click();
|
||||
QCOMPARE(devgroupRequests.back().action, CHAT_DEVGROUP_ACCEPT);
|
||||
QCOMPARE(QByteArray(devgroupRequests.back().text), invite); QCOMPARE(QByteArray(devgroupRequests.back().pin), QByteArray("1234"));
|
||||
// Неверный PIN возвращает waiting: поле появляется повторно, сетевые повторы его не дублируют.
|
||||
// Неверный PIN разрешает повтор в том же окне, а закрытие не открывает его автоматически.
|
||||
respond(devgroupRequests.back().request_id, snapshot);
|
||||
QVERIFY(edit->isEnabled()); QVERIFY(!check->isEnabled()); dialog->close();
|
||||
QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
|
||||
dialog = window.findChild<QInputDialog*>("devgroupIncomingPin"); QVERIFY(dialog && dialog->isVisible());
|
||||
dialog->reject();
|
||||
devgroupCallback(nullptr, 0); respond(devgroupRequests.back().request_id, snapshot);
|
||||
QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
|
||||
QVERIFY(!window.findChild<QInputDialog*>("devgroupIncomingPin"));
|
||||
QVERIFY(!window.findChild<QDialog*>("devgroupPairingDialog"));
|
||||
QVERIFY(context(window, "Finish pairing"));
|
||||
dialog = window.findChild<QDialog*>("devgroupPairingDialog"); QVERIFY(dialog && dialog->isVisible());
|
||||
const QByteArray second = "{\"group\":\"\",\"name\":\"\",\"invitations\":[{\"id\":\"" + invite +
|
||||
"\",\"peer\":\"0000000000000007\",\"outgoing\":0,\"state\":8,\"pin\":\"5678\",\"input\":0}]}";
|
||||
respond(devgroupRequests.back().request_id, second);
|
||||
QVERIFY(dialog->findChild<QLabel*>()->text().contains("Return PIN: 5678"));
|
||||
QVERIFY(!dialog->findChild<QLineEdit*>()->isVisible());
|
||||
const QByteArray outgoing = "{\"group\":\"\",\"name\":\"\",\"invitations\":[{\"id\":\"" + invite +
|
||||
"\",\"peer\":\"0000000000000007\",\"outgoing\":1,\"state\":8,\"input\":2}]}";
|
||||
devgroupCallback(nullptr, 0); respond(devgroupRequests.back().request_id, outgoing);
|
||||
edit = dialog->findChild<QLineEdit*>(); QVERIFY(edit->isVisible()); edit->setText("5678");
|
||||
dialog->findChild<QPushButton*>("devgroupCheckPin")->click();
|
||||
QCOMPARE(devgroupRequests.back().action, CHAT_DEVGROUP_ACCEPT);
|
||||
QCOMPARE(QByteArray(devgroupRequests.back().pin), QByteArray("5678"));
|
||||
}
|
||||
|
||||
void addMyDeviceImmediatelyRequestsInvitationAndShowsPin() {
|
||||
|
||||
Reference in new issue
Block a user