// FileInfoDialog::buildSpec unit tests. Lane GUI. // // Pure function, no widgets involved — see the comment on the declaration. Red when an // optional field starts being sent empty instead of omitted, or queueId leaks into a spec // whose startMode isn't "queue". #include #include #include "dialogs/FileInfoDialog.hpp" using velox::gui::FileInfoDialog; class TstFileInfoDialog : public QObject { Q_OBJECT private slots: void requiredFieldsAlwaysPresent(); void emptyOptionalFieldsAreOmitted(); void fullSpecIncludesEveryField(); void queueIdOnlySentForQueueStartMode(); }; void TstFileInfoDialog::requiredFieldsAlwaysPresent() { const QJsonObject spec = FileInfoDialog::buildSpec("https://example.test/file.bin", "", "", "", "", 0, 0, "now", ""); QCOMPARE(spec.value("url").toString(), QStringLiteral("https://example.test/file.bin")); QCOMPARE(spec.value("startMode").toString(), QStringLiteral("now")); } void TstFileInfoDialog::emptyOptionalFieldsAreOmitted() { const QJsonObject spec = FileInfoDialog::buildSpec("https://example.test/file.bin", "", "", "", "", 0, 0, "now", ""); QVERIFY(!spec.contains("filename")); QVERIFY(!spec.contains("saveDir")); QVERIFY(!spec.contains("categoryId")); QVERIFY(!spec.contains("description")); QVERIFY(!spec.contains("segments")); QVERIFY(!spec.contains("bufferBytes")); QVERIFY(!spec.contains("queueId")); } void TstFileInfoDialog::fullSpecIncludesEveryField() { const QJsonObject spec = FileInfoDialog::buildSpec("https://example.test/file.bin", "file.bin", "/home/x/Downloads", "cat1", "a note", 8, 4 * 1024 * 1024, "later", ""); QCOMPARE(spec.value("filename").toString(), QStringLiteral("file.bin")); QCOMPARE(spec.value("saveDir").toString(), QStringLiteral("/home/x/Downloads")); QCOMPARE(spec.value("categoryId").toString(), QStringLiteral("cat1")); QCOMPARE(spec.value("description").toString(), QStringLiteral("a note")); QCOMPARE(spec.value("segments").toInt(), 8); QCOMPARE(spec.value("bufferBytes").toDouble(), static_cast(4 * 1024 * 1024)); } void TstFileInfoDialog::queueIdOnlySentForQueueStartMode() { const QJsonObject queued = FileInfoDialog::buildSpec("https://example.test/file.bin", "", "", "", "", 0, 0, "queue", "q1"); QCOMPARE(queued.value("queueId").toString(), QStringLiteral("q1")); const QJsonObject notQueued = FileInfoDialog::buildSpec("https://example.test/file.bin", "", "", "", "", 0, 0, "now", "q1"); QVERIFY(!notQueued.contains("queueId")); } QTEST_MAIN(TstFileInfoDialog) #include "tst_fileinfodialog.moc"