| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747 |
- /*
- * Copyright (C) by Felix Weilbach <felix.weilbach@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 "userstatusconnector.h"
- #include "userstatusselectormodel.h"
- #include <QTest>
- #include <QSignalSpy>
- #include <QDateTime>
- #include <memory>
- class FakeUserStatusConnector : public OCC::UserStatusConnector
- {
- public:
- void fetchUserStatus() override
- {
- if (_couldNotFetchUserStatus) {
- emit error(Error::CouldNotFetchUserStatus);
- return;
- } else if (_userStatusNotSupported) {
- emit error(Error::UserStatusNotSupported);
- return;
- } else if (_emojisNotSupported) {
- emit error(Error::EmojisNotSupported);
- return;
- }
- emit userStatusFetched(_userStatus);
- }
- void fetchPredefinedStatuses() override
- {
- if (_couldNotFetchPredefinedUserStatuses) {
- emit error(Error::CouldNotFetchPredefinedUserStatuses);
- return;
- }
- emit predefinedStatusesFetched(_predefinedStatuses);
- }
- void setUserStatus(const OCC::UserStatus &userStatus) override
- {
- if (_couldNotSetUserStatusMessage) {
- emit error(Error::CouldNotSetUserStatus);
- return;
- }
- _userStatusSetByCallerOfSetUserStatus = userStatus;
- emit UserStatusConnector::userStatusSet();
- }
- void clearMessage() override
- {
- if (_couldNotClearUserStatusMessage) {
- emit error(Error::CouldNotClearMessage);
- } else {
- _isMessageCleared = true;
- }
- }
- OCC::UserStatus userStatus() const override
- {
- return {}; // Not implemented
- }
- void setFakeUserStatus(const OCC::UserStatus &userStatus)
- {
- _userStatus = userStatus;
- }
- void setFakePredefinedStatuses(
- const QVector<OCC::UserStatus> &statuses)
- {
- _predefinedStatuses = statuses;
- }
- OCC::UserStatus userStatusSetByCallerOfSetUserStatus() const { return _userStatusSetByCallerOfSetUserStatus; }
- bool messageCleared() const { return _isMessageCleared; }
- void setErrorCouldNotFetchPredefinedUserStatuses(bool value)
- {
- _couldNotFetchPredefinedUserStatuses = value;
- }
- void setErrorCouldNotFetchUserStatus(bool value)
- {
- _couldNotFetchUserStatus = value;
- }
- void setErrorCouldNotSetUserStatusMessage(bool value)
- {
- _couldNotSetUserStatusMessage = value;
- }
- void setErrorUserStatusNotSupported(bool value)
- {
- _userStatusNotSupported = value;
- }
- void setErrorEmojisNotSupported(bool value)
- {
- _emojisNotSupported = value;
- }
- void setErrorCouldNotClearUserStatusMessage(bool value)
- {
- _couldNotClearUserStatusMessage = value;
- }
- private:
- OCC::UserStatus _userStatusSetByCallerOfSetUserStatus;
- OCC::UserStatus _userStatus;
- QVector<OCC::UserStatus> _predefinedStatuses;
- bool _isMessageCleared = false;
- bool _couldNotFetchPredefinedUserStatuses = false;
- bool _couldNotFetchUserStatus = false;
- bool _couldNotSetUserStatusMessage = false;
- bool _userStatusNotSupported = false;
- bool _emojisNotSupported = false;
- bool _couldNotClearUserStatusMessage = false;
- };
- class FakeDateTimeProvider : public OCC::DateTimeProvider
- {
- public:
- void setCurrentDateTime(const QDateTime &dateTime) { _dateTime = dateTime; }
- QDateTime currentDateTime() const override { return _dateTime; }
- QDate currentDate() const override { return _dateTime.date(); }
- private:
- QDateTime _dateTime;
- };
- static QVector<OCC::UserStatus>
- createFakePredefinedStatuses(const QDateTime ¤tTime)
- {
- QVector<OCC::UserStatus> statuses;
- const QString userStatusId("fake-id");
- const QString userStatusMessage("Predefined status");
- const QString userStatusIcon("🏖");
- const OCC::UserStatus::OnlineStatus userStatusState(OCC::UserStatus::OnlineStatus::Online);
- const bool userStatusMessagePredefined(true);
- OCC::Optional<OCC::ClearAt> userStatusClearAt;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::Timestamp;
- clearAt._timestamp = currentTime.addSecs(60 * 60).toSecsSinceEpoch();
- userStatusClearAt = clearAt;
- statuses.append({userStatusId, userStatusMessage, userStatusIcon,
- userStatusState, userStatusMessagePredefined, userStatusClearAt});
- return statuses;
- }
- static QDateTime createDateTime(int year = 2021, int month = 7, int day = 27,
- int hour = 12, int minute = 0, int second = 0)
- {
- QDate fakeDate(year, month, day);
- QTime fakeTime(hour, minute, second);
- QDateTime fakeDateTime;
- fakeDateTime.setDate(fakeDate);
- fakeDateTime.setTime(fakeTime);
- return fakeDateTime;
- }
- class TestSetUserStatusDialog : public QObject
- {
- Q_OBJECT
- private slots:
- void testCtor_fetchStatusAndPredefinedStatuses()
- {
- const QDateTime currentDateTime(QDateTime::currentDateTime());
- const QString userStatusId("fake-id");
- const QString userStatusMessage("Some status");
- const QString userStatusIcon("❤");
- const OCC::UserStatus::OnlineStatus userStatusState(OCC::UserStatus::OnlineStatus::DoNotDisturb);
- const bool userStatusMessagePredefined(false);
- OCC::Optional<OCC::ClearAt> userStatusClearAt;
- {
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::Timestamp;
- clearAt._timestamp = currentDateTime.addDays(1).toSecsSinceEpoch();
- userStatusClearAt = clearAt;
- }
- const OCC::UserStatus userStatus(userStatusId, userStatusMessage,
- userStatusIcon, userStatusState, userStatusMessagePredefined, userStatusClearAt);
- const auto fakePredefinedStatuses = createFakePredefinedStatuses(createDateTime());
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- auto fakeDateTimeProvider = std::make_unique<FakeDateTimeProvider>();
- fakeDateTimeProvider->setCurrentDateTime(currentDateTime);
- fakeUserStatusJob->setFakeUserStatus(userStatus);
- fakeUserStatusJob->setFakePredefinedStatuses(fakePredefinedStatuses);
- OCC::UserStatusSelectorModel model(fakeUserStatusJob, std::move(fakeDateTimeProvider));
- // Was user status set correctly?
- QCOMPARE(model.userStatusMessage(), userStatusMessage);
- QCOMPARE(model.userStatusEmoji(), userStatusIcon);
- QCOMPARE(model.onlineStatus(), userStatusState);
- QCOMPARE(model.clearAtDisplayString(), tr("1 day"));
- // Were predefined statuses fetched correctly?
- const auto predefinedStatusesCount = model.predefinedStatuses().count();
- QCOMPARE(predefinedStatusesCount, fakePredefinedStatuses.size());
- for (int i = 0; i < predefinedStatusesCount; ++i) {
- const auto predefinedStatus = model.predefinedStatuses()[i];
- QCOMPARE(predefinedStatus.id(),
- fakePredefinedStatuses[i].id());
- QCOMPARE(predefinedStatus.message(),
- fakePredefinedStatuses[i].message());
- QCOMPARE(predefinedStatus.icon(),
- fakePredefinedStatuses[i].icon());
- QCOMPARE(predefinedStatus.messagePredefined(),
- fakePredefinedStatuses[i].messagePredefined());
- }
- }
- void testCtor_noStatusSet_showSensibleDefaults()
- {
- OCC::UserStatusSelectorModel model(nullptr, nullptr);
- QCOMPARE(model.userStatusMessage(), "");
- QCOMPARE(model.userStatusEmoji(), "😀");
- QCOMPARE(model.clearAtDisplayString(), tr("Don't clear"));
- }
- void testCtor_fetchStatusButNoStatusSet_showSensibleDefaults()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- fakeUserStatusJob->setFakeUserStatus({ "", "", "",
- OCC::UserStatus::OnlineStatus::Offline, false, {} });
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QCOMPARE(model.onlineStatus(), OCC::UserStatus::OnlineStatus::Online);
- QCOMPARE(model.userStatusMessage(), "");
- QCOMPARE(model.userStatusEmoji(), "😀");
- QCOMPARE(model.clearAtDisplayString(), tr("Don't clear"));
- }
- void testSetOnlineStatus_emitOnlineStatusChanged()
- {
- const OCC::UserStatus::OnlineStatus onlineStatus(OCC::UserStatus::OnlineStatus::Invisible);
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QSignalSpy onlineStatusChangedSpy(&model,
- &OCC::UserStatusSelectorModel::onlineStatusChanged);
- model.setOnlineStatus(onlineStatus);
- QCOMPARE(onlineStatusChangedSpy.count(), 1);
- }
- void testSetUserStatus_setCustomMessage_userStatusSetCorrect()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QSignalSpy finishedSpy(&model, &OCC::UserStatusSelectorModel::finished);
- const QString userStatusMessage("Some status");
- const QString userStatusIcon("❤");
- const OCC::UserStatus::OnlineStatus userStatusState(OCC::UserStatus::OnlineStatus::Online);
- model.setOnlineStatus(userStatusState);
- model.setUserStatusMessage(userStatusMessage);
- model.setUserStatusEmoji(userStatusIcon);
- model.setClearAt(OCC::UserStatusSelectorModel::ClearStageType::HalfHour);
- model.setUserStatus();
- QCOMPARE(finishedSpy.count(), 1);
- const auto userStatusSet = fakeUserStatusJob->userStatusSetByCallerOfSetUserStatus();
- QCOMPARE(userStatusSet.icon(), userStatusIcon);
- QCOMPARE(userStatusSet.message(), userStatusMessage);
- QCOMPARE(userStatusSet.state(), userStatusState);
- QCOMPARE(userStatusSet.messagePredefined(), false);
- const auto clearAt = userStatusSet.clearAt();
- QVERIFY(clearAt.isValid());
- QCOMPARE(clearAt->_type, OCC::ClearAtType::Period);
- QCOMPARE(clearAt->_period, 60 * 30);
- }
- void testSetUserStatusMessage_predefinedStatusWasSet_userStatusSetCorrect()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- fakeUserStatusJob->setFakePredefinedStatuses(createFakePredefinedStatuses(createDateTime()));
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- model.setPredefinedStatus(model.predefinedStatuses()[0]);
- QSignalSpy finishedSpy(&model, &OCC::UserStatusSelectorModel::finished);
- const QString userStatusMessage("Some status");
- const OCC::UserStatus::OnlineStatus userStatusState(OCC::UserStatus::OnlineStatus::Online);
- model.setOnlineStatus(userStatusState);
- model.setUserStatusMessage(userStatusMessage);
- model.setClearAt(OCC::UserStatusSelectorModel::ClearStageType::HalfHour);
- model.setUserStatus();
- QCOMPARE(finishedSpy.count(), 1);
- const auto userStatusSet = fakeUserStatusJob->userStatusSetByCallerOfSetUserStatus();
- QCOMPARE(userStatusSet.message(), userStatusMessage);
- QCOMPARE(userStatusSet.state(), userStatusState);
- QCOMPARE(userStatusSet.messagePredefined(), false);
- const auto clearAt = userStatusSet.clearAt();
- QVERIFY(clearAt.isValid());
- QCOMPARE(clearAt->_type, OCC::ClearAtType::Period);
- QCOMPARE(clearAt->_period, 60 * 30);
- }
- void testSetUserStatusEmoji_predefinedStatusWasSet_userStatusSetCorrect()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- fakeUserStatusJob->setFakePredefinedStatuses(createFakePredefinedStatuses(createDateTime()));
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- model.setPredefinedStatus(model.predefinedStatuses()[0]);
- QSignalSpy finishedSpy(&model, &OCC::UserStatusSelectorModel::finished);
- const QString userStatusIcon("❤");
- const OCC::UserStatus::OnlineStatus userStatusState(OCC::UserStatus::OnlineStatus::Online);
- model.setOnlineStatus(userStatusState);
- model.setUserStatusEmoji(userStatusIcon);
- model.setClearAt(OCC::UserStatusSelectorModel::ClearStageType::HalfHour);
- model.setUserStatus();
- QCOMPARE(finishedSpy.count(), 1);
- const auto userStatusSet = fakeUserStatusJob->userStatusSetByCallerOfSetUserStatus();
- QCOMPARE(userStatusSet.icon(), userStatusIcon);
- QCOMPARE(userStatusSet.state(), userStatusState);
- QCOMPARE(userStatusSet.messagePredefined(), false);
- const auto clearAt = userStatusSet.clearAt();
- QVERIFY(clearAt.isValid());
- QCOMPARE(clearAt->_type, OCC::ClearAtType::Period);
- QCOMPARE(clearAt->_period, 60 * 30);
- }
- void testSetPredefinedStatus_emitUserStatusChangedAndSetUserStatus()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- auto fakeDateTimeProvider = std::make_unique<FakeDateTimeProvider>();
- const auto currentTime = createDateTime();
- fakeDateTimeProvider->setCurrentDateTime(currentTime);
- const auto fakePredefinedStatuses = createFakePredefinedStatuses(currentTime);
- fakeUserStatusJob->setFakePredefinedStatuses(fakePredefinedStatuses);
- OCC::UserStatusSelectorModel model(std::move(fakeUserStatusJob),
- std::move(fakeDateTimeProvider));
- QSignalSpy userStatusChangedSpy(&model,
- &OCC::UserStatusSelectorModel::userStatusChanged);
- QSignalSpy clearAtDisplayStringChangedSpy(&model,
- &OCC::UserStatusSelectorModel::clearAtDisplayStringChanged);
- const auto fakePredefinedUserStatusIndex = 0;
- model.setPredefinedStatus(model.predefinedStatuses()[fakePredefinedUserStatusIndex]);
- QCOMPARE(userStatusChangedSpy.count(), 1);
- QCOMPARE(clearAtDisplayStringChangedSpy.count(), 1);
- // Was user status set correctly?
- const auto fakePredefinedUserStatus = fakePredefinedStatuses[fakePredefinedUserStatusIndex];
- QCOMPARE(model.userStatusMessage(), fakePredefinedUserStatus.message());
- QCOMPARE(model.userStatusEmoji(), fakePredefinedUserStatus.icon());
- QCOMPARE(model.onlineStatus(), fakePredefinedUserStatus.state());
- QCOMPARE(model.clearAtDisplayString(), tr("1 hour"));
- }
- void testSetClear_setClearAtStage0_emitclearAtDisplayStringChangedAndClearAtSet()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QSignalSpy clearAtDisplayStringChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtDisplayStringChanged);
- const auto clearAtToSet = OCC::UserStatusSelectorModel::ClearStageType::DontClear;
- model.setClearAt(clearAtToSet);
- QCOMPARE(clearAtDisplayStringChangedSpy.count(), 1);
- QCOMPARE(model.clearAtDisplayString(), tr("Don't clear"));
- }
- void testSetClear_setClearAtStage1_emitclearAtDisplayStringChangedAndClearAtSet()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QSignalSpy clearAtDisplayStringChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtDisplayStringChanged);
- const auto clearAtToSet = OCC::UserStatusSelectorModel::ClearStageType::HalfHour;
- model.setClearAt(clearAtToSet);
- QCOMPARE(clearAtDisplayStringChangedSpy.count(), 1);
- QCOMPARE(model.clearAtDisplayString(), tr("30 minutes"));
- }
- void testSetClear_setClearAtStage2_emitclearAtDisplayStringChangedAndClearAtSet()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QSignalSpy clearAtDisplayStringChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtDisplayStringChanged);
- const auto clearAtToSet = OCC::UserStatusSelectorModel::ClearStageType::OneHour;
- model.setClearAt(clearAtToSet);
- QCOMPARE(clearAtDisplayStringChangedSpy.count(), 1);
- QCOMPARE(model.clearAtDisplayString(), tr("1 hour"));
- }
- void testSetClear_setClearAtStage3_emitclearAtDisplayStringChangedAndClearAtSet()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QSignalSpy clearAtDisplayStringChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtDisplayStringChanged);
- const auto clearAtToSet = OCC::UserStatusSelectorModel::ClearStageType::FourHour;
- model.setClearAt(clearAtToSet);
- QCOMPARE(clearAtDisplayStringChangedSpy.count(), 1);
- QCOMPARE(model.clearAtDisplayString(), tr("4 hours"));
- }
- void testSetClear_setClearAtStage4_emitclearAtDisplayStringChangedAndClearAtSet()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QSignalSpy clearAtDisplayStringChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtDisplayStringChanged);
- const auto clearAtToSet = OCC::UserStatusSelectorModel::ClearStageType::Today;
- model.setClearAt(clearAtToSet);
- QCOMPARE(clearAtDisplayStringChangedSpy.count(), 1);
- QCOMPARE(model.clearAtDisplayString(), tr("Today"));
- }
- void testSetClear_setClearAtStage5_emitclearAtDisplayStringChangedAndClearAtSet()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QSignalSpy clearAtDisplayStringChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtDisplayStringChanged);
- const auto clearAtToSet = OCC::UserStatusSelectorModel::ClearStageType::Week;
- model.setClearAt(clearAtToSet);
- QCOMPARE(clearAtDisplayStringChangedSpy.count(), 1);
- QCOMPARE(model.clearAtDisplayString(), tr("This week"));
- }
- void testClearAtStages()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QCOMPARE(model.clearAtDisplayString(), tr("Don't clear"));
- const auto clearStageTypes = model.clearStageTypes();
- QCOMPARE(clearStageTypes.count(), 6);
- QCOMPARE(clearStageTypes[0].value<QVariantMap>()[QStringLiteral("display")], tr("Don't clear"));
- QCOMPARE(clearStageTypes[1].value<QVariantMap>()[QStringLiteral("display")], tr("30 minutes"));
- QCOMPARE(clearStageTypes[2].value<QVariantMap>()[QStringLiteral("display")], tr("1 hour"));
- QCOMPARE(clearStageTypes[3].value<QVariantMap>()[QStringLiteral("display")], tr("4 hours"));
- QCOMPARE(clearStageTypes[4].value<QVariantMap>()[QStringLiteral("display")], tr("Today"));
- QCOMPARE(clearStageTypes[5].value<QVariantMap>()[QStringLiteral("display")], tr("This week"));
- }
- void testClearAt_clearAtTimestamp()
- {
- const auto currentTime = createDateTime();
- {
- OCC::UserStatus userStatus;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::Timestamp;
- clearAt._timestamp = currentTime.addSecs(30).toSecsSinceEpoch();
- userStatus.setClearAt(clearAt);
- auto fakeDateTimeProvider = std::make_unique<FakeDateTimeProvider>();
- fakeDateTimeProvider->setCurrentDateTime(currentTime);
- OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider));
- QCOMPARE(model.clearAtDisplayString(), tr("Less than a minute"));
- }
- {
- OCC::UserStatus userStatus;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::Timestamp;
- clearAt._timestamp = currentTime.addSecs(60).toSecsSinceEpoch();
- userStatus.setClearAt(clearAt);
- auto fakeDateTimeProvider = std::make_unique<FakeDateTimeProvider>();
- fakeDateTimeProvider->setCurrentDateTime(currentTime);
- OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider));
- QCOMPARE(model.clearAtDisplayString(), tr("1 minute"));
- }
- {
- OCC::UserStatus userStatus;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::Timestamp;
- clearAt._timestamp = currentTime.addSecs(60 * 30).toSecsSinceEpoch();
- userStatus.setClearAt(clearAt);
- auto fakeDateTimeProvider = std::make_unique<FakeDateTimeProvider>();
- fakeDateTimeProvider->setCurrentDateTime(currentTime);
- OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider));
- QCOMPARE(model.clearAtDisplayString(), tr("30 minutes"));
- }
- {
- OCC::UserStatus userStatus;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::Timestamp;
- clearAt._timestamp = currentTime.addSecs(60 * 60).toSecsSinceEpoch();
- userStatus.setClearAt(clearAt);
- auto fakeDateTimeProvider = std::make_unique<FakeDateTimeProvider>();
- fakeDateTimeProvider->setCurrentDateTime(currentTime);
- OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider));
- QCOMPARE(model.clearAtDisplayString(), tr("1 hour"));
- }
- {
- OCC::UserStatus userStatus;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::Timestamp;
- clearAt._timestamp = currentTime.addSecs(60 * 60 * 4).toSecsSinceEpoch();
- userStatus.setClearAt(clearAt);
- auto fakeDateTimeProvider = std::make_unique<FakeDateTimeProvider>();
- fakeDateTimeProvider->setCurrentDateTime(currentTime);
- OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider));
- QCOMPARE(model.clearAtDisplayString(), tr("4 hours"));
- }
- {
- OCC::UserStatus userStatus;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::Timestamp;
- clearAt._timestamp = currentTime.addDays(1).toSecsSinceEpoch();
- userStatus.setClearAt(clearAt);
- auto fakeDateTimeProvider = std::make_unique<FakeDateTimeProvider>();
- fakeDateTimeProvider->setCurrentDateTime(currentTime);
- OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider));
- QCOMPARE(model.clearAtDisplayString(), tr("1 day"));
- }
- {
- OCC::UserStatus userStatus;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::Timestamp;
- clearAt._timestamp = currentTime.addDays(7).toSecsSinceEpoch();
- userStatus.setClearAt(clearAt);
- auto fakeDateTimeProvider = std::make_unique<FakeDateTimeProvider>();
- fakeDateTimeProvider->setCurrentDateTime(currentTime);
- OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider));
- QCOMPARE(model.clearAtDisplayString(), tr("7 days"));
- }
- }
- void testClearAt_clearAtEndOf()
- {
- {
- OCC::UserStatus userStatus;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::EndOf;
- clearAt._endof = "day";
- userStatus.setClearAt(clearAt);
- OCC::UserStatusSelectorModel model(userStatus);
- QCOMPARE(model.clearAtDisplayString(), tr("Today"));
- }
- {
- OCC::UserStatus userStatus;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::EndOf;
- clearAt._endof = "week";
- userStatus.setClearAt(clearAt);
- OCC::UserStatusSelectorModel model(userStatus);
- QCOMPARE(model.clearAtDisplayString(), tr("This week"));
- }
- }
- void testClearAt_clearAtAfterPeriod()
- {
- {
- OCC::UserStatus userStatus;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::Period;
- clearAt._period = 60 * 30;
- userStatus.setClearAt(clearAt);
- OCC::UserStatusSelectorModel model(userStatus);
- QCOMPARE(model.clearAtDisplayString(), tr("30 minutes"));
- }
- {
- OCC::UserStatus userStatus;
- OCC::ClearAt clearAt;
- clearAt._type = OCC::ClearAtType::Period;
- clearAt._period = 60 * 60;
- userStatus.setClearAt(clearAt);
- OCC::UserStatusSelectorModel model(userStatus);
- QCOMPARE(model.clearAtDisplayString(), tr("1 hour"));
- }
- }
- void testClearUserStatus()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- model.clearUserStatus();
- QVERIFY(fakeUserStatusJob->messageCleared());
- }
- void testError_couldNotFetchPredefinedStatuses_emitError()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- fakeUserStatusJob->setErrorCouldNotFetchPredefinedUserStatuses(true);
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QCOMPARE(model.errorMessage(),
- tr("Could not fetch predefined statuses. Make sure you are connected to the server."));
- }
- void testError_couldNotFetchUserStatus_emitError()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- fakeUserStatusJob->setErrorCouldNotFetchUserStatus(true);
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QCOMPARE(model.errorMessage(),
- tr("Could not fetch status. Make sure you are connected to the server."));
- }
- void testError_userStatusNotSupported_emitError()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- fakeUserStatusJob->setErrorUserStatusNotSupported(true);
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QCOMPARE(model.errorMessage(),
- tr("Status feature is not supported. You will not be able to set your status."));
- }
- void testError_couldSetUserStatus_emitError()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- fakeUserStatusJob->setErrorCouldNotSetUserStatusMessage(true);
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- model.setUserStatus();
- QCOMPARE(model.errorMessage(),
- tr("Could not set status. Make sure you are connected to the server."));
- }
- void testError_emojisNotSupported_emitError()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- fakeUserStatusJob->setErrorEmojisNotSupported(true);
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- QCOMPARE(model.errorMessage(),
- tr("Emojis are not supported. Some status functionality may not work."));
- }
- void testError_couldNotClearMessage_emitError()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- fakeUserStatusJob->setErrorCouldNotClearUserStatusMessage(true);
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- model.clearUserStatus();
- QCOMPARE(model.errorMessage(),
- tr("Could not clear status message. Make sure you are connected to the server."));
- }
- void testError_setUserStatus_clearErrorMessage()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- fakeUserStatusJob->setErrorCouldNotSetUserStatusMessage(true);
- model.setUserStatus();
- QVERIFY(!model.errorMessage().isEmpty());
- fakeUserStatusJob->setErrorCouldNotSetUserStatusMessage(false);
- model.setUserStatus();
- QVERIFY(model.errorMessage().isEmpty());
- }
- void testError_clearUserStatus_clearErrorMessage()
- {
- auto fakeUserStatusJob = std::make_shared<FakeUserStatusConnector>();
- OCC::UserStatusSelectorModel model(fakeUserStatusJob);
- fakeUserStatusJob->setErrorCouldNotSetUserStatusMessage(true);
- model.setUserStatus();
- QVERIFY(!model.errorMessage().isEmpty());
- fakeUserStatusJob->setErrorCouldNotSetUserStatusMessage(false);
- model.clearUserStatus();
- QVERIFY(model.errorMessage().isEmpty());
- }
- };
- QTEST_GUILESS_MAIN(TestSetUserStatusDialog)
- #include "testsetuserstatusdialog.moc"
|