sharetestutils.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*
  2. * Copyright (C) 2022 by Claudio Cambra <claudio.cambra@nextcloud.com>
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful, but
  10. * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11. * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  12. * for more details.
  13. */
  14. #pragma once
  15. #include <QObject>
  16. #include <QJsonArray>
  17. #include <QJsonObject>
  18. #include <QJsonDocument>
  19. #include <QNetworkReply>
  20. #include <QNetworkRequest>
  21. #include "gui/accountmanager.h"
  22. #include "gui/folderman.h"
  23. #include "gui/sharemanager.h"
  24. #include "syncenginetestutils.h"
  25. using namespace OCC;
  26. struct FakeFileReplyDefinition
  27. {
  28. QString fileOwnerUid;
  29. QString fileOwnerDisplayName;
  30. QString fileTarget;
  31. bool fileHasPreview;
  32. QString fileFileParent;
  33. QString fileSource;
  34. QString fileItemSource;
  35. QString fileItemType;
  36. int fileMailSend;
  37. QString fileMimeType;
  38. QString fileParent;
  39. QString filePath;
  40. int fileStorage;
  41. QString fileStorageId;
  42. };
  43. struct FakeShareDefinition
  44. {
  45. FakeShareDefinition() = default;
  46. FakeShareDefinition(ShareTestHelper *helper,
  47. const Share::ShareType type,
  48. const QString &shareWith,
  49. const QString &displayString,
  50. const QString &password = QString(),
  51. const QString &note = QString(),
  52. const QString &expiration = QString());
  53. FakeFileReplyDefinition fileDefinition;
  54. QString shareId;
  55. bool shareCanDelete;
  56. bool shareCanEdit;
  57. QString shareUidOwner;
  58. QString shareDisplayNameOwner;
  59. QString sharePassword;
  60. int sharePermissions;
  61. QString shareNote;
  62. int shareHideDownload;
  63. QString shareExpiration;
  64. bool shareSendPasswordByTalk;
  65. int shareType;
  66. QString shareShareWith;
  67. QString shareShareWithDisplayName;
  68. QString shareToken;
  69. QString linkShareName;
  70. QString linkShareLabel;
  71. QString linkShareUrl;
  72. [[nodiscard]] QJsonObject toShareJsonObject() const;
  73. [[nodiscard]] QByteArray toRequestReply() const;
  74. };
  75. class ShareTestHelper : public QObject
  76. {
  77. Q_OBJECT
  78. public:
  79. ShareTestHelper(QObject *parent = nullptr);
  80. ~ShareTestHelper() override;
  81. FolderMan fm;
  82. FakeFolder fakeFolder{FileInfo{}};
  83. FakeFileReplyDefinition fakeFileDefinition;
  84. AccountPtr account;
  85. AccountStatePtr accountState;
  86. int latestShareId = 0;
  87. static constexpr auto testFileName = "file.md";
  88. static constexpr auto searchResultsReplyDelay = 100;
  89. static constexpr auto expectedDtFormat = "yyyy-MM-dd 00:00:00";
  90. const QByteArray createNewShare(const Share::ShareType shareType, const QString &shareWith, const QString &password);
  91. [[nodiscard]] int shareCount() const;
  92. signals:
  93. void setupSucceeded();
  94. public slots:
  95. void setup();
  96. void appendShareReplyData(const FakeShareDefinition &definition);
  97. void resetTestShares();
  98. void resetTestData();
  99. private slots:
  100. [[nodiscard]] QNetworkReply *qnamOverride(const QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *device);
  101. [[nodiscard]] QNetworkReply *handleSharePostOperation(const QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *device);
  102. [[nodiscard]] QNetworkReply *handleSharePutOperation(const QNetworkAccessManager::Operation op, const QNetworkRequest &req, const QString &reqPath, QIODevice *device);
  103. [[nodiscard]] QNetworkReply *handleShareDeleteOperation(const QNetworkAccessManager::Operation op, const QNetworkRequest &req, const QString &reqPath);
  104. [[nodiscard]] QNetworkReply *handleShareGetOperation(const QNetworkAccessManager::Operation op, const QNetworkRequest &req, const QString &reqPath);
  105. private:
  106. QScopedPointer<FakeQNAM> _fakeQnam;
  107. QByteArray _fake404Response = R"({"ocs":{"meta":{"status":"failure","statuscode":404,"message":"Invalid query, please check the syntax. API specifications are here: http:\/\/www.freedesktop.org\/wiki\/Specifications\/open-collaboration-services.\n"},"data":[]}})";
  108. QByteArray _fake403Response = R"({"ocs":{"meta":{"status":"failure","statuscode":403,"message":"Operation not allowed."},"data":[]}})";
  109. QByteArray _fake400Response = R"({"ocs":{"meta":{"status":"failure","statuscode":400,"message":"Parameter is incorrect.\n"},"data":[]}})";
  110. QByteArray _fake200JsonResponse = R"({"ocs":{"data":[],"meta":{"message":"OK","status":"ok","statuscode":200}}})";
  111. QJsonArray _sharesReplyData;
  112. QVariantMap _fakeCapabilities;
  113. QSet<int> _liveShareIds;
  114. };