testsyncconflictsmodel.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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/syncconflictsmodel.h"
  15. #include "folderman.h"
  16. #include "accountstate.h"
  17. #include "configfile.h"
  18. #include "syncfileitem.h"
  19. #include "syncenginetestutils.h"
  20. #include "testhelper.h"
  21. #include <QTest>
  22. #include <QAbstractItemModelTester>
  23. #include <QSignalSpy>
  24. namespace {
  25. QStringList findConflicts(const FileInfo &dir)
  26. {
  27. QStringList conflicts;
  28. for (const auto &item : dir.children) {
  29. if (item.name.contains("(conflicted copy")) {
  30. conflicts.append(item.path());
  31. }
  32. }
  33. return conflicts;
  34. }
  35. }
  36. using namespace OCC;
  37. class TestSyncConflictsModel : public QObject
  38. {
  39. Q_OBJECT
  40. private:
  41. private slots:
  42. void initTestCase()
  43. {
  44. }
  45. void testSuccessfulFetchShares()
  46. {
  47. auto dir = QTemporaryDir {};
  48. ConfigFile::setConfDir(dir.path()); // we don't want to pollute the user's config file
  49. FolderMan fm;
  50. auto account = Account::create();
  51. auto url = QUrl{"http://example.de"};
  52. auto cred = new HttpCredentialsTest("testuser", "secret");
  53. account->setCredentials(cred);
  54. account->setUrl(url);
  55. url.setUserName(cred->user());
  56. auto newAccountState{AccountStatePtr{ new AccountState{account}}};
  57. auto folderman = FolderMan::instance();
  58. QCOMPARE(folderman, &fm);
  59. auto fakeFolder = FakeFolder{FileInfo::A12_B12_C12_S12()};
  60. QVERIFY(folderman->addFolder(newAccountState.data(), folderDefinition(fakeFolder.localPath())));
  61. QVERIFY(fakeFolder.syncOnce());
  62. fakeFolder.localModifier().appendByte("A/a2");
  63. fakeFolder.remoteModifier().appendByte("A/a2");
  64. fakeFolder.remoteModifier().appendByte("A/a2");
  65. QVERIFY(fakeFolder.syncOnce());
  66. OCC::ActivityList allConflicts;
  67. const auto conflicts = findConflicts(fakeFolder.currentLocalState().children["A"]);
  68. for (const auto &conflict : conflicts) {
  69. auto conflictActivity = OCC::Activity{};
  70. conflictActivity._file = fakeFolder.localPath() + conflict;
  71. conflictActivity._folder = fakeFolder.localPath();
  72. allConflicts.push_back(std::move(conflictActivity));
  73. }
  74. SyncConflictsModel model;
  75. QAbstractItemModelTester modelTester(&model);
  76. model.setConflictActivities(allConflicts);
  77. QCOMPARE(model.rowCount(), 1);
  78. QCOMPARE(model.data(model.index(0), static_cast<int>(SyncConflictsModel::SyncConflictRoles::ExistingFileName)), QString{"a2"});
  79. QCOMPARE(model.data(model.index(0), static_cast<int>(SyncConflictsModel::SyncConflictRoles::ExistingSize)), QString{"6 bytes"});
  80. QCOMPARE(model.data(model.index(0), static_cast<int>(SyncConflictsModel::SyncConflictRoles::ConflictSize)), QString{"5 bytes"});
  81. QVERIFY(!model.data(model.index(0), static_cast<int>(SyncConflictsModel::SyncConflictRoles::ExistingDate)).toString().isEmpty());
  82. QVERIFY(!model.data(model.index(0), static_cast<int>(SyncConflictsModel::SyncConflictRoles::ConflictDate)).toString().isEmpty());
  83. QCOMPARE(model.data(model.index(0), static_cast<int>(SyncConflictsModel::SyncConflictRoles::ExistingPreviewUrl)), QVariant::fromValue(QUrl{QStringLiteral("image://tray-image-provider/:/fileicon%1A/a2").arg(fakeFolder.localPath())}));
  84. QCOMPARE(model.data(model.index(0), static_cast<int>(SyncConflictsModel::SyncConflictRoles::ConflictPreviewUrl)), QVariant::fromValue(QUrl{QStringLiteral("image://tray-image-provider/:/fileicon%1%2").arg(fakeFolder.localPath(), conflicts.constFirst())}));
  85. QCOMPARE(model.data(model.index(0), static_cast<int>(SyncConflictsModel::SyncConflictRoles::ExistingSelected)), false);
  86. QCOMPARE(model.data(model.index(0), static_cast<int>(SyncConflictsModel::SyncConflictRoles::ConflictSelected)), false);
  87. }
  88. };
  89. QTEST_GUILESS_MAIN(TestSyncConflictsModel)
  90. #include "testsyncconflictsmodel.moc"