| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- /*
- * Copyright (C) by Claudio Cambra <claudio.cambra@nextcloud.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- */
- #include "gui/filedetails/sortedsharemodel.h"
- #include <QTest>
- #include <QAbstractItemModelTester>
- #include <QSignalSpy>
- #include "sharetestutils.h"
- using namespace OCC;
- class TestSortedShareModel : public QObject
- {
- Q_OBJECT
- public slots:
- void addAllTestShares()
- {
- // Let's insert them in the opposite order we want from the model
- for (auto it = _expectedOrder.crbegin(); it != _expectedOrder.crend(); ++it) {
- const auto shareDef = *it;
- if(it->shareType == Share::TypeInternalLink || it->shareType == Share::TypePlaceholderLink) {
- continue; // Don't add the shares that are only internal in the client
- }
- helper.appendShareReplyData(*it);
- }
- }
- private:
- ShareTestHelper helper;
- FakeShareDefinition _userADefinition;
- FakeShareDefinition _userBDefinition;
- FakeShareDefinition _groupADefinition;
- FakeShareDefinition _groupBDefinition;
- FakeShareDefinition _linkADefinition;
- FakeShareDefinition _linkBDefinition;
- FakeShareDefinition _emailADefinition;
- FakeShareDefinition _emailBDefinition;
- FakeShareDefinition _remoteADefinition;
- FakeShareDefinition _remoteBDefinition;
- FakeShareDefinition _roomADefinition;
- FakeShareDefinition _roomBDefinition;
- FakeShareDefinition _internalLinkDefinition;
- QVector<FakeShareDefinition> _expectedOrder;
- static constexpr auto _expectedRemoteShareCount = 12;
- private slots:
- void initTestCase()
- {
- QSignalSpy helperSetupSucceeded(&helper, &ShareTestHelper::setupSucceeded);
- helper.setup();
- QCOMPARE(helperSetupSucceeded.count(), 1);
- const auto userAShareWith = QStringLiteral("user_a");
- const auto userAShareWithDisplayName = QStringLiteral("User A");
- _userADefinition = FakeShareDefinition(&helper, Share::TypeUser, userAShareWith, userAShareWithDisplayName);
- const auto userBShareWith = QStringLiteral("user_b");
- const auto userBShareWithDisplayName = QStringLiteral("User B");
- _userBDefinition = FakeShareDefinition(&helper, Share::TypeUser, userBShareWith, userBShareWithDisplayName);
- const auto groupAShareWith = QStringLiteral("group_a");
- const auto groupAShareWithDisplayName = QStringLiteral("Group A");
- _groupADefinition = FakeShareDefinition(&helper, Share::TypeGroup, groupAShareWith, groupAShareWithDisplayName);
- const auto groupBShareWith = QStringLiteral("group_b");
- const auto groupBShareWithDisplayName = QStringLiteral("Group B");
- _groupBDefinition = FakeShareDefinition(&helper, Share::TypeGroup, groupBShareWith, groupBShareWithDisplayName);
- const auto linkALabel = QStringLiteral("Link share label A");
- _linkADefinition = FakeShareDefinition(&helper, Share::TypeLink, {}, linkALabel);
- const auto linkBLabel = QStringLiteral("Link share label B");
- _linkBDefinition = FakeShareDefinition(&helper, Share::TypeLink, {}, linkBLabel);
- const auto emailAShareWith = QStringLiteral("email_a@nextcloud.com");
- const auto emailAShareWithDisplayName = QStringLiteral("email_a@nextcloud.com");
- _emailADefinition = FakeShareDefinition(&helper, Share::TypeEmail, emailAShareWith, emailAShareWithDisplayName);
- const auto emailBShareWith = QStringLiteral("email_b@nextcloud.com");
- const auto emailBShareWithDisplayName = QStringLiteral("email_b@nextcloud.com");
- _emailBDefinition = FakeShareDefinition(&helper, Share::TypeEmail, emailBShareWith, emailBShareWithDisplayName);
- const auto remoteAShareWith = QStringLiteral("remote_a");
- const auto remoteAShareWithDisplayName = QStringLiteral("Remote share A");
- _remoteADefinition = FakeShareDefinition(&helper, Share::TypeRemote, remoteAShareWith, remoteAShareWithDisplayName);
- const auto remoteBShareWith = QStringLiteral("remote_b");
- const auto remoteBShareWithDisplayName = QStringLiteral("Remote share B");
- _remoteBDefinition = FakeShareDefinition(&helper, Share::TypeRemote, remoteBShareWith, remoteBShareWithDisplayName);
- const auto roomAShareWith = QStringLiteral("room_a");
- const auto roomAShareWithDisplayName = QStringLiteral("Room A");
- _roomADefinition = FakeShareDefinition(&helper, Share::TypeRoom, roomAShareWith, roomAShareWithDisplayName);
- const auto roomBShareWith = QStringLiteral("room_b");
- const auto roomBShareWithDisplayName = QStringLiteral("Room B");
- _roomBDefinition = FakeShareDefinition(&helper, Share::TypeRoom, roomBShareWith, roomBShareWithDisplayName);
- // Dummy internal link share, just use it to check position
- _internalLinkDefinition.shareId = QStringLiteral("__internalLinkShareId__");
- _internalLinkDefinition.shareType = Share::TypeInternalLink;
- _expectedOrder = {// Placeholder link shares always go first, followed by normal link shares.
- _linkADefinition,
- _linkBDefinition,
- // For all other share types, we follow the Share::ShareType enum.
- _userADefinition,
- _userBDefinition,
- _groupADefinition,
- _groupBDefinition,
- _emailADefinition,
- _emailBDefinition,
- _remoteADefinition,
- _remoteBDefinition,
- _roomADefinition,
- _roomBDefinition,
- _internalLinkDefinition};
- }
- void testSetModel()
- {
- helper.resetTestData();
- addAllTestShares();
- QCOMPARE(helper.shareCount(), _expectedRemoteShareCount);
- ShareModel model;
- QSignalSpy sharesChanged(&model, &ShareModel::sharesChanged);
- model.setAccountState(helper.accountState.data());
- model.setLocalPath(helper.fakeFolder.localPath() + helper.testFileName);
- QVERIFY(sharesChanged.wait(5000));
- QCOMPARE(model.rowCount(), helper.shareCount() + 1); // Remember the internal link share!
- SortedShareModel sortedModel;
- QAbstractItemModelTester sortedModelTester(&sortedModel);
- QSignalSpy sortedModelReset(&sortedModel, &SortedShareModel::modelReset);
- QSignalSpy shareModelChanged(&sortedModel, &SortedShareModel::sourceModelChanged);
- sortedModel.setSourceModel(&model);
- QCOMPARE(shareModelChanged.count(), 1);
- QCOMPARE(sortedModelReset.count(), 1);
- QCOMPARE(sortedModel.rowCount(), model.rowCount());
- QCOMPARE(sortedModel.sourceModel(), &model);
- }
- void testCorrectSort()
- {
- helper.resetTestData();
- addAllTestShares();
- QCOMPARE(helper.shareCount(), _expectedRemoteShareCount);
- ShareModel model;
- QSignalSpy sharesChanged(&model, &ShareModel::sharesChanged);
- model.setAccountState(helper.accountState.data());
- model.setLocalPath(helper.fakeFolder.localPath() + helper.testFileName);
- QVERIFY(sharesChanged.wait(5000));
- QCOMPARE(model.rowCount(), helper.shareCount() + 1); // Remember the internal link share!
- SortedShareModel sortedModel;
- QAbstractItemModelTester sortedModelTester(&sortedModel);
- QSignalSpy sortedModelReset(&sortedModel, &SortedShareModel::modelReset);
- sortedModel.setSourceModel(&model);
- QCOMPARE(sortedModelReset.count(), 1);
- QCOMPARE(sortedModel.rowCount(), model.rowCount());
- for(auto i = 0; i < sortedModel.rowCount(); ++i) {
- const auto shareIndex = sortedModel.index(i, 0);
- const auto expectedShareDefinition = _expectedOrder.at(i);
- QCOMPARE(shareIndex.data(ShareModel::ShareTypeRole).toInt(), expectedShareDefinition.shareType);
- QCOMPARE(shareIndex.data(ShareModel::ShareIdRole).toString(), expectedShareDefinition.shareId);
- }
- }
- };
- QTEST_MAIN(TestSortedShareModel)
- #include "testsortedsharemodel.moc"
|