diff --git a/server/time/calendaritem.cpp b/server/time/calendaritem.cpp index df5cb27c..b8181aee 100644 --- a/server/time/calendaritem.cpp +++ b/server/time/calendaritem.cpp @@ -92,6 +92,10 @@ void CalendarItem::setRepeatingOption(const RepeatingOption &repeatingOption) */ bool CalendarItem::isValid() const { + // certain DateTime AND repeating option would not make sense + if (m_dateTime.isValid() && !repeatingOption().isEmtpy()) + return false; + return (!m_startTime.isValid() != !m_dateTime.isValid()) && m_duration > 0; } diff --git a/server/time/repeatingoption.cpp b/server/time/repeatingoption.cpp index d30e03ec..e6864598 100644 --- a/server/time/repeatingoption.cpp +++ b/server/time/repeatingoption.cpp @@ -117,14 +117,6 @@ QList RepeatingOption::monthDays() const return m_monthDays; } -/*! Clears this RepeatingOption */ -void RepeatingOption::clear() -{ - m_mode = RepeatingModeNone; - m_weekDays.clear(); - m_monthDays.clear(); -} - /*! Returns true if this \l{RepeatingOption} is empty. */ bool RepeatingOption::isEmtpy() const { @@ -150,6 +142,7 @@ bool RepeatingOption::isValid() const } } + // Validate the lists switch (m_mode) { case RepeatingModeNone: return m_weekDays.isEmpty() && m_monthDays.isEmpty(); diff --git a/server/time/repeatingoption.h b/server/time/repeatingoption.h index df4a3cc2..816f1cd5 100644 --- a/server/time/repeatingoption.h +++ b/server/time/repeatingoption.h @@ -50,7 +50,6 @@ public: QList weekDays() const; QList monthDays() const; - void clear(); bool isEmtpy() const; bool isValid() const; diff --git a/tests/auto/timemanager/testtimemanager.cpp b/tests/auto/timemanager/testtimemanager.cpp index 72edc15b..926476ff 100644 --- a/tests/auto/timemanager/testtimemanager.cpp +++ b/tests/auto/timemanager/testtimemanager.cpp @@ -45,6 +45,7 @@ private slots: private: QVariantMap createCalendarItem(const QString &time = "00:00", const uint &duration = 0, const QVariantMap &repeatingOption = QVariantMap()) const; + QVariantMap createCalendarItem(const int &dateTime, const uint &duration = 0, const QVariantMap &repeatingOption = QVariantMap()) const; QVariantMap createTimeDescriptorCalendar(const QVariantMap calendarItem) const; QVariantMap createTimeDescriptorCalendar(const QVariantList calendarItems) const; @@ -93,6 +94,12 @@ void TestTimeManager::addTimeDescriptor_data() QVariantMap repeatingOptionDaily; repeatingOptionDaily.insert("mode", "RepeatingModeDaily"); + QVariantMap repeatingOptionNone; + repeatingOptionNone.insert("mode", "RepeatingModeNone"); + + QVariantMap repeatingOptionHourly; + repeatingOptionHourly.insert("mode", "RepeatingModeHourly"); + QVariantMap repeatingOptionWeeklyMultiple; repeatingOptionWeeklyMultiple.insert("mode", "RepeatingModeWeekly"); repeatingOptionWeeklyMultiple.insert("weekDays", QVariantList() << 2 << 4 << 5); @@ -131,17 +138,19 @@ void TestTimeManager::addTimeDescriptor_data() calendarItems.append(createCalendarItem("08:00", 5, repeatingOptionDaily)); calendarItems.append(createCalendarItem("09:00", 5, repeatingOptionWeeklyMultiple)); - // Invalid timeDescriptor - QTest::addColumn("timeDescriptor"); QTest::addColumn("error"); - QTest::newRow("valid: single calendarItem") << createTimeDescriptorCalendar(createCalendarItem("08:00", 5)) << RuleEngine::RuleErrorNoError; + QTest::newRow("valid: single calendarItem dateTime") << createTimeDescriptorCalendar(createCalendarItem(QDateTime::currentDateTime().toTime_t(), 5)) << RuleEngine::RuleErrorNoError; QTest::newRow("valid: single calendarItem - daily") << createTimeDescriptorCalendar(createCalendarItem("08:00", 5, repeatingOptionDaily)) << RuleEngine::RuleErrorNoError; + QTest::newRow("valid: calendarItem - none") << createTimeDescriptorCalendar(createCalendarItem("09:00", 30, repeatingOptionNone)) << RuleEngine::RuleErrorNoError; + QTest::newRow("valid: calendarItem - hourly") << createTimeDescriptorCalendar(createCalendarItem("09:00", 30, repeatingOptionHourly)) << RuleEngine::RuleErrorNoError; QTest::newRow("valid: calendarItems - weekly - multiple days") << createTimeDescriptorCalendar(calendarItems) << RuleEngine::RuleErrorNoError; QTest::newRow("valid: calendarItem - monthly - multiple days") << createTimeDescriptorCalendar(createCalendarItem("23:00", 5, repeatingOptionMonthlyMultiple)) << RuleEngine::RuleErrorNoError; + QTest::newRow("invalid: calendarItem empty") << createTimeDescriptorCalendar(createCalendarItem()) << RuleEngine::RuleErrorInvalidCalendarItem; + QTest::newRow("invalid: calendarItem - dateTime + repeatingOption") << createTimeDescriptorCalendar(createCalendarItem(QDateTime::currentDateTime().toTime_t(), 5, repeatingOptionDaily)) << RuleEngine::RuleErrorInvalidCalendarItem; QTest::newRow("invalid: calendarItem invalid time") << createTimeDescriptorCalendar(createCalendarItem("35:80", 5)) << RuleEngine::RuleErrorInvalidCalendarItem; QTest::newRow("invalid: calendarItem invalid duration") << createTimeDescriptorCalendar(createCalendarItem("12:00", 0)) << RuleEngine::RuleErrorInvalidCalendarItem; QTest::newRow("invalid: calendarItem - monthly - weekDays") << createTimeDescriptorCalendar(createCalendarItem("13:13", 5, repeatingOptionInvalidMonthly)) << RuleEngine::RuleErrorInvalidRepeatingOption; @@ -194,6 +203,17 @@ QVariantMap TestTimeManager::createCalendarItem(const QString &time, const uint return calendarItem; } +QVariantMap TestTimeManager::createCalendarItem(const int &dateTime, const uint &duration, const QVariantMap &repeatingOption) const +{ + QVariantMap calendarItem; + calendarItem.insert("datetime", dateTime); + calendarItem.insert("duration", duration); + if (!repeatingOption.isEmpty()) + calendarItem.insert("repeating", repeatingOption); + + return calendarItem; +} + QVariantMap TestTimeManager::createTimeDescriptorCalendar(const QVariantMap calendarItem) const { QVariantMap timeDescriptorCalendar;