testactivitydata.cpp 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /*
  2. * Copyright (C) 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. #include "gui/tray/activitydata.h"
  15. #include "account.h"
  16. #include "accountstate.h"
  17. #include "configfile.h"
  18. #include "syncenginetestutils.h"
  19. #include "syncfileitem.h"
  20. #include "folder.h"
  21. #include "folderman.h"
  22. #include "testhelper.h"
  23. #include <QTest>
  24. class TestActivityData : public QObject
  25. {
  26. Q_OBJECT
  27. public:
  28. TestActivityData() = default;
  29. void createJsonSpecificFormatData(QString fileFormat, QString mimeType)
  30. {
  31. const auto objectType = QStringLiteral("files");
  32. const auto subject = QStringLiteral("You created path/test.").append(fileFormat);
  33. const auto path = QStringLiteral("path/test.").append(fileFormat);
  34. const auto fileName = QStringLiteral("test.").append(fileFormat);
  35. const auto activityType = QStringLiteral("file");
  36. const auto activityId = 90000;
  37. const auto message = QStringLiteral();
  38. const auto objectName = QStringLiteral("test.").append(fileFormat);
  39. const auto link = account->url().toString().append(QStringLiteral("/f/")).append(activityId);
  40. const auto datetime = QDateTime::currentDateTime().toString(Qt::ISODate);
  41. const auto icon = account->url().toString().append(QStringLiteral("/apps/files/img/add-color.svg"));
  42. const QJsonObject richStringData({
  43. {QStringLiteral("type"), activityType},
  44. {QStringLiteral("id"), activityId},
  45. {QStringLiteral("link"), link},
  46. {QStringLiteral("name"), fileName},
  47. {QStringLiteral("path"), objectName}
  48. });
  49. const auto subjectRichString = QStringLiteral("You created {file1}");
  50. const auto subjectRichObj = QJsonObject({{QStringLiteral("file1"), richStringData}});
  51. const auto subjectRichData = QJsonArray({subjectRichString, subjectRichObj});
  52. const auto previewUrl = account->url().toString().append(QStringLiteral("/index.php/core/preview.png?file=/")).append(path);
  53. // Text file previews should be replaced by mimetype icon
  54. const QJsonObject previewData({
  55. {QStringLiteral("link"), link},
  56. {QStringLiteral("mimeType"), mimeType},
  57. {QStringLiteral("fileId"), activityId},
  58. {QStringLiteral("filename"), fileName},
  59. {QStringLiteral("view"), QStringLiteral("files")},
  60. {QStringLiteral("source"), previewUrl},
  61. {QStringLiteral("isMimeTypeIcon"), false},
  62. });
  63. QJsonObject testData({
  64. {QStringLiteral("object_type"), objectType},
  65. {QStringLiteral("activity_id"), activityId},
  66. {QStringLiteral("type"), activityType},
  67. {QStringLiteral("subject"), subject},
  68. {QStringLiteral("message"), message},
  69. {QStringLiteral("object_name"), objectName},
  70. {QStringLiteral("link"), link},
  71. {QStringLiteral("datetime"), datetime},
  72. {QStringLiteral("icon"), icon},
  73. {QStringLiteral("subject_rich"), subjectRichData},
  74. {QStringLiteral("previews"), QJsonArray({previewData})},
  75. });
  76. QTest::addRow("data") << testData << fileFormat << mimeType << objectType << subject << path << fileName << activityType << activityId << message << objectName << link << datetime << icon << subjectRichString << subjectRichData << previewUrl;
  77. }
  78. QScopedPointer<FakeQNAM> fakeQnam;
  79. OCC::AccountPtr account;
  80. private slots:
  81. void initTestCase()
  82. {
  83. account = OCC::Account::create();
  84. account->setCredentials(new FakeCredentials{fakeQnam.data()});
  85. account->setUrl(QUrl(("http://example.de")));
  86. auto *cred = new HttpCredentialsTest("testuser", "secret");
  87. account->setCredentials(cred);
  88. }
  89. void testFromJson_data()
  90. {
  91. QTest::addColumn<QJsonObject>("activityJsonObject");
  92. QTest::addColumn<QString>("fileFormat");
  93. QTest::addColumn<QString>("mimeTypeExpected");
  94. QTest::addColumn<QString>("objectTypeExpected");
  95. QTest::addColumn<QString>("subjectExpected");
  96. QTest::addColumn<QString>("pathExpected");
  97. QTest::addColumn<QString>("fileNameExpected");
  98. QTest::addColumn<QString>("activityTypeExpected");
  99. QTest::addColumn<int>("activityIdExpected");
  100. QTest::addColumn<QString>("messageExpected");
  101. QTest::addColumn<QString>("objectNameExpected");
  102. QTest::addColumn<QString>("linkExpected");
  103. QTest::addColumn<QString>("datetimeExpected");
  104. QTest::addColumn<QString>("iconExpected");
  105. QTest::addColumn<QString>("subjectRichStringExpected");
  106. QTest::addColumn<QJsonArray>("subjectRichDataExpected");
  107. QTest::addColumn<QString>("previewUrlExpected");
  108. createJsonSpecificFormatData(QStringLiteral("jpg"), QStringLiteral("image/jpg"));
  109. createJsonSpecificFormatData(QStringLiteral("txt"), QStringLiteral("text/plain"));
  110. createJsonSpecificFormatData(QStringLiteral("pdf"), QStringLiteral("application/pdf"));
  111. }
  112. void testFromJson()
  113. {
  114. QFETCH(QJsonObject, activityJsonObject);
  115. QFETCH(QString, fileFormat);
  116. QFETCH(QString, mimeTypeExpected);
  117. QFETCH(QString, objectTypeExpected);
  118. QFETCH(QString, subjectExpected);
  119. QFETCH(QString, pathExpected);
  120. QFETCH(QString, fileNameExpected);
  121. QFETCH(QString, activityTypeExpected);
  122. QFETCH(int, activityIdExpected);
  123. QFETCH(QString, messageExpected);
  124. QFETCH(QString, objectNameExpected);
  125. QFETCH(QString, linkExpected);
  126. QFETCH(QString, datetimeExpected);
  127. QFETCH(QString, iconExpected);
  128. QFETCH(QString, subjectRichStringExpected);
  129. QFETCH(QJsonArray, subjectRichDataExpected);
  130. QFETCH(QString, previewUrlExpected);
  131. OCC::Activity activity = OCC::Activity::fromActivityJson(activityJsonObject, account);
  132. QCOMPARE(activity._type, OCC::Activity::ActivityType);
  133. QCOMPARE(activity._objectType, objectTypeExpected);
  134. QCOMPARE(activity._id, activityIdExpected);
  135. QCOMPARE(activity._fileAction, activityTypeExpected);
  136. QCOMPARE(activity._accName, account->displayName());
  137. QCOMPARE(activity._subject, subjectExpected);
  138. QCOMPARE(activity._message, messageExpected);
  139. QCOMPARE(activity._file, objectNameExpected);
  140. QCOMPARE(activity._link, linkExpected);
  141. QCOMPARE(activity._dateTime, QDateTime::fromString(datetimeExpected, Qt::ISODate));
  142. QCOMPARE(activity._subjectRichParameters.count(), 1);
  143. QCOMPARE(activity._subjectDisplay, QStringLiteral("You created ").append(fileNameExpected));
  144. QCOMPARE(activity._previews.count(), 1);
  145. // We want the different icon when we have a preview
  146. //QCOMPARE(activity._icon, iconExpected);
  147. if(fileFormat == "txt") {
  148. QCOMPARE(activity._previews[0]._source, account->url().toString().append(QStringLiteral("/index.php/apps/theming/img/core/filetypes/text.svg")));
  149. QCOMPARE(activity._previews[0]._isMimeTypeIcon, true);
  150. QCOMPARE(activity._previews[0]._mimeType, mimeTypeExpected);
  151. } else if(fileFormat == "pdf") {
  152. QCOMPARE(activity._previews[0]._source, account->url().toString().append(QStringLiteral("/index.php/apps/theming/img/core/filetypes/application-pdf.svg")));
  153. QCOMPARE(activity._previews[0]._isMimeTypeIcon, true);
  154. } else {
  155. QCOMPARE(activity._previews[0]._source, previewUrlExpected);
  156. QCOMPARE(activity._previews[0]._isMimeTypeIcon, false);
  157. }
  158. QCOMPARE(activity._previews[0]._mimeType, mimeTypeExpected);
  159. }
  160. };
  161. QTEST_MAIN(TestActivityData)
  162. #include "testactivitydata.moc"