add non overlaping weekly calendar item tests

This commit is contained in:
Simon Stürz 2016-04-02 02:40:17 +02:00 committed by Michael Zanetti
parent d01ee95ecc
commit eceb277f02
2 changed files with 102 additions and 115 deletions

View File

@ -103,8 +103,6 @@ bool CalendarItem::isValid() const
/*! Returns true, if the given \a dateTime matches this \l{CalendarItem}. */ /*! Returns true, if the given \a dateTime matches this \l{CalendarItem}. */
bool CalendarItem::evaluate(const QDateTime &dateTime) const bool CalendarItem::evaluate(const QDateTime &dateTime) const
{ {
qCDebug(dcRuleEngine()) << "Evaluate CalendarItem";
if (!isValid()) if (!isValid())
return false; return false;
@ -184,7 +182,7 @@ bool CalendarItem::evaluateWeekly(const QDateTime &dateTime) const
// Check each week day in the list // Check each week day in the list
foreach (const int &weekDay, repeatingOption().weekDays()) { foreach (const int &weekDay, repeatingOption().weekDays()) {
QDateTime startDateTime = weekStartDateTime.addDays(weekDay -1); QDateTime startDateTime = weekStartDateTime.addDays(weekDay);
QDateTime endDateTime = startDateTime.addSecs(duration() * 60); QDateTime endDateTime = startDateTime.addSecs(duration() * 60);
bool overlapping = false; bool overlapping = false;

View File

@ -397,142 +397,131 @@ void TestTimeManager::testCalendarItemDaily()
void TestTimeManager::testCalendarItemWeekly_data() void TestTimeManager::testCalendarItemWeekly_data()
{ {
// QVariantMap repeatingOptionDaily; QVariantMap repeatingOptionWeekly;
// repeatingOptionDaily.insert("mode", "RepeatingModeDaily"); repeatingOptionWeekly.insert("mode", "RepeatingModeWeekly");
repeatingOptionWeekly.insert("weekDays", QVariantList() << 2 << 4 << 6);
// QVariantMap repeatingOptionDailyWeekDays; QVariantMap repeatingOptionWeeklyOverlapping;
// repeatingOptionDailyWeekDays.insert("mode", "RepeatingModeDaily"); repeatingOptionWeeklyOverlapping.insert("mode", "RepeatingModeWeekly");
// repeatingOptionDailyWeekDays.insert("weekDays", QVariantList() << 1 << 4 << 7); repeatingOptionWeeklyOverlapping.insert("weekDays", QVariantList() << 2 << 4 << 7);
// QTest::addColumn<QVariantMap>("timeDescriptor"); QTest::addColumn<QVariantMap>("timeDescriptor");
// QTest::addColumn<QString>("time"); QTest::addColumn<QVariantMap>("repeatingOption");
// QTest::addColumn<int>("duration"); QTest::addColumn<QString>("time");
// QTest::newRow("daily") << createTimeDescriptorCalendar(createCalendarItem("06:55", 10, repeatingOptionDaily)) << "06:55" << 10;
// QTest::newRow("daily jump date") << createTimeDescriptorCalendar(createCalendarItem("23:55", 10, repeatingOptionDaily)) << "23:55" << 10;
QTest::newRow("weekly") << createTimeDescriptorCalendar(createCalendarItem("06:55", 10, repeatingOptionWeekly)) << repeatingOptionWeekly << "06:55";
//QTest::newRow("weekly overlapping") << createTimeDescriptorCalendar(createCalendarItem("23:55", 10, repeatingOptionWeeklyOverlapping)) << repeatingOptionWeeklyOverlapping << "23:55";
} }
void TestTimeManager::testCalendarItemWeekly() void TestTimeManager::testCalendarItemWeekly()
{ {
// QFETCH(QVariantMap, timeDescriptor); QFETCH(QVariantMap, timeDescriptor);
// QFETCH(QString, time); QFETCH(QVariantMap, repeatingOption);
QFETCH(QString, time);
// initTimeManager(); initTimeManager();
// QVariantMap ruleMap; QVariantMap action; QVariantMap exitAction; QVariantMap ruleMap; QVariantMap action; QVariantMap exitAction;
// action.insert("actionTypeId", mockActionIdNoParams); action.insert("actionTypeId", mockActionIdNoParams);
// action.insert("deviceId", m_mockDeviceId); action.insert("deviceId", m_mockDeviceId);
// action.insert("ruleActionParams", QVariantList()); action.insert("ruleActionParams", QVariantList());
// exitAction.insert("actionTypeId", mockActionIdWithParams); exitAction.insert("actionTypeId", mockActionIdWithParams);
// QVariantList actionParams; QVariantList actionParams;
// QVariantMap param1; QVariantMap param1;
// param1.insert("name", "mockActionParam1"); param1.insert("name", "mockActionParam1");
// param1.insert("value", 12); param1.insert("value", 12);
// actionParams.append(param1); actionParams.append(param1);
// QVariantMap param2; QVariantMap param2;
// param2.insert("name", "mockActionParam2"); param2.insert("name", "mockActionParam2");
// param2.insert("value", true); param2.insert("value", true);
// actionParams.append(param2); actionParams.append(param2);
// exitAction.insert("deviceId", m_mockDeviceId); exitAction.insert("deviceId", m_mockDeviceId);
// exitAction.insert("ruleActionParams", actionParams); exitAction.insert("ruleActionParams", actionParams);
// ruleMap.insert("name", "Time based hourly calendar rule"); ruleMap.insert("name", "Time based hourly calendar rule");
// ruleMap.insert("timeDescriptor", timeDescriptor); ruleMap.insert("timeDescriptor", timeDescriptor);
// ruleMap.insert("actions", QVariantList() << action); ruleMap.insert("actions", QVariantList() << action);
// ruleMap.insert("exitActions", QVariantList() << exitAction); ruleMap.insert("exitActions", QVariantList() << exitAction);
// QVariant response = injectAndWait("Rules.AddRule", ruleMap); QVariant response = injectAndWait("Rules.AddRule", ruleMap);
// verifyRuleError(response); verifyRuleError(response);
// RuleId ruleId = RuleId(response.toMap().value("params").toMap().value("ruleId").toString()); RuleId ruleId = RuleId(response.toMap().value("params").toMap().value("ruleId").toString());
// QVariantMap params; QVariantMap params;
// params.insert("ruleId", ruleId); params.insert("ruleId", ruleId);
// response = injectAndWait("Rules.GetRuleDetails", params); response = injectAndWait("Rules.GetRuleDetails", params);
// qDebug() << QJsonDocument::fromVariant(response.toMap().value("params").toMap()).toJson(); qDebug() << QJsonDocument::fromVariant(response.toMap().value("params").toMap()).toJson();
// QDateTime currentDateTime = GuhCore::instance()->timeManager()->currentDateTime(); QDateTime currentDateTime = GuhCore::instance()->timeManager()->currentDateTime();
// // start with one minute before starttime today // start with one minute before starttime today
// QDateTime future = QDateTime(currentDateTime.date(), QTime::fromString(time, "hh:mm").addSecs(-60)); QDateTime future = QDateTime(currentDateTime.date(), QTime::fromString(time, "hh:mm").addSecs(-60));
QVariantList weekDaysVariant = repeatingOption.value("weekDays").toList();
// // check the next 7 days QList<int> weekDays;
// for (int i = 0; i < 7; i++) { foreach (const QVariant &variant, weekDaysVariant) {
// // inactive weekDays.append(variant.toInt());
// GuhCore::instance()->timeManager()->setTime(future); }
// verifyRuleNotExecuted();
// if (!timeDescriptor.value("calendarItems").toList().first().toMap().contains("weekDays")) { // check the next 7 days
// // active for (int i = 0; i < 7; i++) {
// GuhCore::instance()->timeManager()->setTime(future.addSecs(60)); // inactive
// verifyRuleExecuted(mockActionIdNoParams); GuhCore::instance()->timeManager()->setTime(future);
// cleanupMockHistory(); verifyRuleNotExecuted();
// // active unchanged
// GuhCore::instance()->timeManager()->setTime(future.addSecs(6* 60));
// verifyRuleNotExecuted();
// // inactive
// GuhCore::instance()->timeManager()->setTime(future.addSecs(11 * 60));
// verifyRuleExecuted(mockActionIdWithParams);
// cleanupMockHistory();
// // inactive unchanged
// GuhCore::instance()->timeManager()->setTime(future.addSecs(12 * 60));
// verifyRuleNotExecuted();
// // One day "Back to the future"
// future = future.addDays(1);
// } else {
// // Check if today is a weekday
// QVariantList weekDays = timeDescriptor.value("calendarItems").toList().first().toMap().value("weekDays").toList();
// QDateTime todaysStartTime = QDateTime(currentDateTime.date(), QTime::fromString(time, "hh:mm"));
// if (weekDays.contains(QVariant(todaysStartTime.date().dayOfWeek()))) {
// // should trigger today
// // active
// GuhCore::instance()->timeManager()->setTime(future);
// verifyRuleExecuted(mockActionIdNoParams);
// cleanupMockHistory();
// // active unchanged
// GuhCore::instance()->timeManager()->setTime(future.addSecs(6* 60));
// verifyRuleNotExecuted();
// // inactive
// GuhCore::instance()->timeManager()->setTime(future.addSecs(11 * 60));
// verifyRuleExecuted(mockActionIdWithParams);
// cleanupMockHistory();
// // inactive unchanged
// GuhCore::instance()->timeManager()->setTime(future.addSecs(12 * 60));
// verifyRuleNotExecuted();
// // One day "Back to the future" // Check if today is a weekday
// future = future.addDays(1); qDebug() << "Day of week:" << future.date().dayOfWeek();
// } else { if (weekDays.contains(future.date().dayOfWeek())) {
// // should not trigger today // should trigger today
// // inactive // active
// GuhCore::instance()->timeManager()->setTime(future); GuhCore::instance()->timeManager()->setTime(future.addSecs(60));
// verifyRuleNotExecuted(); verifyRuleExecuted(mockActionIdNoParams);
// // inactive cleanupMockHistory();
// GuhCore::instance()->timeManager()->setTime(future.addSecs(6* 60)); // active unchanged
// verifyRuleNotExecuted(); GuhCore::instance()->timeManager()->setTime(future.addSecs(6* 60));
// // inactive verifyRuleNotExecuted();
// GuhCore::instance()->timeManager()->setTime(future.addSecs(11 * 60)); // inactive
// verifyRuleNotExecuted(); GuhCore::instance()->timeManager()->setTime(future.addSecs(11 * 60));
// // inactive verifyRuleExecuted(mockActionIdWithParams);
// GuhCore::instance()->timeManager()->setTime(future.addSecs(12 * 60)); cleanupMockHistory();
// verifyRuleNotExecuted(); // inactive unchanged
GuhCore::instance()->timeManager()->setTime(future.addSecs(12 * 60));
verifyRuleNotExecuted();
// // One day "Back to the future" // One day "Back to the future"
// future = future.addDays(1); future = future.addDays(1);
// } } else {
// } // should not trigger today
// } // inactive
// // REMOVE rule GuhCore::instance()->timeManager()->setTime(future);
// QVariantMap removeParams; verifyRuleNotExecuted();
// removeParams.insert("ruleId", ruleId); // inactive
// response = injectAndWait("Rules.RemoveRule", removeParams); GuhCore::instance()->timeManager()->setTime(future.addSecs(6* 60));
// verifyRuleError(response); verifyRuleNotExecuted();
// inactive
GuhCore::instance()->timeManager()->setTime(future.addSecs(11 * 60));
verifyRuleNotExecuted();
// inactive
GuhCore::instance()->timeManager()->setTime(future.addSecs(12 * 60));
verifyRuleNotExecuted();
// One day "Back to the future"
future = future.addDays(1);
}
}
// REMOVE rule
QVariantMap removeParams;
removeParams.insert("ruleId", ruleId);
response = injectAndWait("Rules.RemoveRule", removeParams);
verifyRuleError(response);
} }
void TestTimeManager::initTimeManager() void TestTimeManager::initTimeManager()
{ {
GuhCore::instance()->timeManager()->stopTimer(); GuhCore::instance()->timeManager()->stopTimer();
qDebug() << GuhCore::instance()->timeManager()->currentTime().toString(); qDebug() << GuhCore::instance()->timeManager()->currentTime().toString();
qDebug() << GuhCore::instance()->timeManager()->currentDate().toString();
qDebug() << GuhCore::instance()->timeManager()->currentDateTime().toString(); qDebug() << GuhCore::instance()->timeManager()->currentDateTime().toString();
} }