From 050162c1d49e9980f983c2cf16230cc1ba37b8b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 1 Apr 2016 20:04:41 +0200 Subject: [PATCH] add timeevent adding tests and validation --- server/jsonrpc/jsontypes.cpp | 6 ++ server/time/calendaritem.cpp | 2 +- server/time/timeeventitem.cpp | 10 ++- server/time/timeeventitem.h | 2 +- tests/auto/timemanager/testtimemanager.cpp | 90 ++++++++++++++++++---- 5 files changed, 90 insertions(+), 20 deletions(-) diff --git a/server/jsonrpc/jsontypes.cpp b/server/jsonrpc/jsontypes.cpp index 985e43c9..6a882002 100644 --- a/server/jsonrpc/jsontypes.cpp +++ b/server/jsonrpc/jsontypes.cpp @@ -1608,6 +1608,12 @@ QPair JsonTypes::validateVariant(const QVariant &templateVariant, qCWarning(dcJsonRpc) << "RepeatingOption not matching"; return result; } + } else if (refName == timeEventItemRef()) { + QPair result = validateMap(timeEventItemDescription(), variant.toMap()); + if (!result.first) { + qCWarning(dcJsonRpc) << "TimeEventItem not matching"; + return result; + } } else if (refName == basicTypeRef()) { QPair result = validateBasicType(variant); if (!result.first) { diff --git a/server/time/calendaritem.cpp b/server/time/calendaritem.cpp index b8181aee..d17e40cb 100644 --- a/server/time/calendaritem.cpp +++ b/server/time/calendaritem.cpp @@ -92,7 +92,7 @@ void CalendarItem::setRepeatingOption(const RepeatingOption &repeatingOption) */ bool CalendarItem::isValid() const { - // certain DateTime AND repeating option would not make sense + // A dateTime AND a repeating option would not make sense if (m_dateTime.isValid() && !repeatingOption().isEmtpy()) return false; diff --git a/server/time/timeeventitem.cpp b/server/time/timeeventitem.cpp index 716c29a9..d001b9d1 100644 --- a/server/time/timeeventitem.cpp +++ b/server/time/timeeventitem.cpp @@ -42,13 +42,13 @@ TimeEventItem::TimeEventItem() /*! Returns the dateTime of this \l{TimeEventItem}. */ QDateTime TimeEventItem::dateTime() const { - return m_dateTimer; + return m_dateTime; } /*! Sets the dateTime of this \l{TimeEventItem} to the given \a timeStamp. */ void TimeEventItem::setDateTime(const int &timeStamp) { - m_dateTimer = QDateTime::fromTime_t(timeStamp); + m_dateTime = QDateTime::fromTime_t(timeStamp); } /*! Returns the time of this \l{TimeEventItem}. */ @@ -80,7 +80,11 @@ void TimeEventItem::setRepeatingOption(const RepeatingOption &repeatingOption) */ bool TimeEventItem::isValid() const { - return (!m_dateTimer.isNull() != !m_time.isNull()); + // A dateTime AND a repeating option would not make sense + if (m_dateTime.isValid() && !repeatingOption().isEmtpy()) + return false; + + return (!m_dateTime.isNull() != !m_time.isNull()); } /*! Returns true, if the given \a dateTime matches this \l{TimeEventItem}. */ diff --git a/server/time/timeeventitem.h b/server/time/timeeventitem.h index 3eb53792..2ca74e49 100644 --- a/server/time/timeeventitem.h +++ b/server/time/timeeventitem.h @@ -48,7 +48,7 @@ public: bool evaluate(const QDateTime &dateTime) const; private: - QDateTime m_dateTimer; + QDateTime m_dateTime; QTime m_time; RepeatingOption m_repeatingOption; diff --git a/tests/auto/timemanager/testtimemanager.cpp b/tests/auto/timemanager/testtimemanager.cpp index 926476ff..993980c0 100644 --- a/tests/auto/timemanager/testtimemanager.cpp +++ b/tests/auto/timemanager/testtimemanager.cpp @@ -44,10 +44,15 @@ private slots: void addTimeDescriptor(); private: - QVariantMap createCalendarItem(const QString &time = "00:00", const uint &duration = 0, const QVariantMap &repeatingOption = QVariantMap()) const; + QVariantMap createTimeEventItem(const QString &time = QString(), const QVariantMap &repeatingOption = QVariantMap()) const; + QVariantMap createTimeEventItem(const int &dateTime, const QVariantMap &repeatingOption = QVariantMap()) const; + QVariantMap createTimeDescriptorTimeEvent(const QVariantMap &timeEventItem) const; + QVariantMap createTimeDescriptorTimeEvent(const QVariantList &timeEventItems) const; + + QVariantMap createCalendarItem(const QString &time = QString(), 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; + QVariantMap createTimeDescriptorCalendar(const QVariantMap &calendarItem) const; + QVariantMap createTimeDescriptorCalendar(const QVariantList &calendarItems) const; }; @@ -138,17 +143,30 @@ void TestTimeManager::addTimeDescriptor_data() calendarItems.append(createCalendarItem("08:00", 5, repeatingOptionDaily)); calendarItems.append(createCalendarItem("09:00", 5, repeatingOptionWeeklyMultiple)); + // Multiple timeEvent items + QVariantList timeEventItems; + timeEventItems.append(createTimeEventItem("08:00", repeatingOptionDaily)); + timeEventItems.append(createTimeEventItem("09:00", repeatingOptionWeeklyMultiple)); + 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") << createTimeDescriptorCalendar(createCalendarItem("08:00", 5)) << RuleEngine::RuleErrorNoError; + QTest::newRow("valid: calendarItem dateTime") << createTimeDescriptorCalendar(createCalendarItem(QDateTime::currentDateTime().toTime_t(), 5)) << RuleEngine::RuleErrorNoError; + QTest::newRow("valid: 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("valid: timeEventItem") << createTimeDescriptorTimeEvent(createTimeEventItem("08:00")) << RuleEngine::RuleErrorNoError; + QTest::newRow("valid: timeEventItem dateTime") << createTimeDescriptorTimeEvent(createTimeEventItem(QDateTime::currentDateTime().toTime_t())) << RuleEngine::RuleErrorNoError; + QTest::newRow("valid: timeEventItem - daily") << createTimeDescriptorTimeEvent(createTimeEventItem("08:00", repeatingOptionDaily)) << RuleEngine::RuleErrorNoError; + QTest::newRow("valid: timeEventItem - none") << createTimeDescriptorTimeEvent(createTimeEventItem("09:00", repeatingOptionNone)) << RuleEngine::RuleErrorNoError; + QTest::newRow("valid: timeEventItem - hourly") << createTimeDescriptorTimeEvent(createTimeEventItem("09:00", repeatingOptionHourly)) << RuleEngine::RuleErrorNoError; + QTest::newRow("valid: timeEventItem - weekly - multiple days") << createTimeDescriptorTimeEvent(timeEventItems) << RuleEngine::RuleErrorNoError; + QTest::newRow("valid: timeEventItem - monthly - multiple days") << createTimeDescriptorTimeEvent(createTimeEventItem("23:00", 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; @@ -160,6 +178,15 @@ void TestTimeManager::addTimeDescriptor_data() QTest::newRow("invalid: calendarItem - invalid monthdays (negative)") << createTimeDescriptorCalendar(createCalendarItem("13:13", 5, repeatingOptionInvalidMonthDays)) << RuleEngine::RuleErrorInvalidRepeatingOption; QTest::newRow("invalid: calendarItem - invalid monthdays (to big)") << createTimeDescriptorCalendar(createCalendarItem("13:13", 5, repeatingOptionInvalidMonthDays2)) << RuleEngine::RuleErrorInvalidRepeatingOption; + QTest::newRow("invalid: timeEventItem empty") << createTimeDescriptorTimeEvent(createTimeEventItem()) << RuleEngine::RuleErrorInvalidTimeEventItem; + QTest::newRow("invalid: timeEventItem - dateTime + repeatingOption") << createTimeDescriptorTimeEvent(createTimeEventItem(QDateTime::currentDateTime().toTime_t(), repeatingOptionDaily)) << RuleEngine::RuleErrorInvalidTimeEventItem; + QTest::newRow("invalid: timeEventItem invalid time") << createTimeDescriptorTimeEvent(createTimeEventItem("35:80")) << RuleEngine::RuleErrorInvalidTimeEventItem; + QTest::newRow("invalid: timeEventItem - monthly - weekDays") << createTimeDescriptorTimeEvent(createTimeEventItem("13:13", repeatingOptionInvalidMonthly)) << RuleEngine::RuleErrorInvalidRepeatingOption; + QTest::newRow("invalid: timeEventItem - weekly - monthDays") << createTimeDescriptorTimeEvent(createTimeEventItem("15:30", repeatingOptionInvalidWeekly)) << RuleEngine::RuleErrorInvalidRepeatingOption; + QTest::newRow("invalid: timeEventItem - invalid weekdays (negative)") << createTimeDescriptorTimeEvent(createTimeEventItem("13:13", repeatingOptionInvalidWeekDays)) << RuleEngine::RuleErrorInvalidRepeatingOption; + QTest::newRow("invalid: timeEventItem - invalid weekdays (to big)") << createTimeDescriptorTimeEvent(createTimeEventItem("13:13", repeatingOptionInvalidWeekDays2)) << RuleEngine::RuleErrorInvalidRepeatingOption; + QTest::newRow("invalid: timeEventItem - invalid monthdays (negative)") << createTimeDescriptorTimeEvent(createTimeEventItem("13:13", repeatingOptionInvalidMonthDays)) << RuleEngine::RuleErrorInvalidRepeatingOption; + QTest::newRow("invalid: timeEventItem - invalid monthdays (to big)") << createTimeDescriptorTimeEvent(createTimeEventItem("13:13", repeatingOptionInvalidMonthDays2)) << RuleEngine::RuleErrorInvalidRepeatingOption; } @@ -169,29 +196,62 @@ void TestTimeManager::addTimeDescriptor() QFETCH(RuleEngine::RuleError, error); // ADD the rule - QVariantMap params; QVariantMap action; + QVariantMap ruleMap; QVariantMap action; action.insert("actionTypeId", mockActionIdNoParams); action.insert("deviceId", m_mockDeviceId); action.insert("ruleActionParams", QVariantList()); - params.insert("name", "TimeBased rule"); - params.insert("timeDescriptor", timeDescriptor); - params.insert("actions", QVariantList() << action); + ruleMap.insert("name", "TimeBased rule"); + ruleMap.insert("timeDescriptor", timeDescriptor); + ruleMap.insert("actions", QVariantList() << action); - QVariant response = injectAndWait("Rules.AddRule", params); + QVariant response = injectAndWait("Rules.AddRule", ruleMap); verifyRuleError(response, error); - if (error != RuleEngine::RuleErrorNoError) return; // Print rule RuleId newRuleId = RuleId(response.toMap().value("params").toMap().value("ruleId").toString()); - params.clear(); + QVariantMap params; params.insert("ruleId", newRuleId); response = injectAndWait("Rules.GetRuleDetails", params); QVariantMap rule = response.toMap().value("params").toMap().value("rule").toMap(); qDebug() << QJsonDocument::fromVariant(rule).toJson(); } +QVariantMap TestTimeManager::createTimeEventItem(const QString &time, const QVariantMap &repeatingOption) const +{ + QVariantMap calendarItem; + calendarItem.insert("time", time); + if (!repeatingOption.isEmpty()) + calendarItem.insert("repeating", repeatingOption); + + return calendarItem; +} + +QVariantMap TestTimeManager::createTimeEventItem(const int &dateTime, const QVariantMap &repeatingOption) const +{ + QVariantMap calendarItem; + calendarItem.insert("datetime", dateTime); + if (!repeatingOption.isEmpty()) + calendarItem.insert("repeating", repeatingOption); + + return calendarItem; +} + +QVariantMap TestTimeManager::createTimeDescriptorTimeEvent(const QVariantMap &timeEventItem) const +{ + QVariantMap timeDescriptorTimeEvent; + timeDescriptorTimeEvent.insert("timeEventItems", QVariantList() << timeEventItem); + return timeDescriptorTimeEvent; +} + +QVariantMap TestTimeManager::createTimeDescriptorTimeEvent(const QVariantList &timeEventItems) const +{ + QVariantMap timeDescriptorTimeEvent; + timeDescriptorTimeEvent.insert("timeEventItems", timeEventItems); + return timeDescriptorTimeEvent; +} + QVariantMap TestTimeManager::createCalendarItem(const QString &time, const uint &duration, const QVariantMap &repeatingOption) const { QVariantMap calendarItem; @@ -214,14 +274,14 @@ QVariantMap TestTimeManager::createCalendarItem(const int &dateTime, const uint return calendarItem; } -QVariantMap TestTimeManager::createTimeDescriptorCalendar(const QVariantMap calendarItem) const +QVariantMap TestTimeManager::createTimeDescriptorCalendar(const QVariantMap &calendarItem) const { QVariantMap timeDescriptorCalendar; timeDescriptorCalendar.insert("calendarItems", QVariantList() << calendarItem); return timeDescriptorCalendar; } -QVariantMap TestTimeManager::createTimeDescriptorCalendar(const QVariantList calendarItems) const +QVariantMap TestTimeManager::createTimeDescriptorCalendar(const QVariantList &calendarItems) const { QVariantMap timeDescriptorCalendar; timeDescriptorCalendar.insert("calendarItems", calendarItems);