added loadStoreConfig tests for exitActions

This commit is contained in:
Simon Stürz 2015-03-11 10:02:35 +01:00 committed by Michael Zanetti
parent 40d7bde73f
commit 584fec345f

View File

@ -291,7 +291,6 @@ void TestRules::addRemoveRules()
QVariantList replyActions = rule.value("actions").toList(); QVariantList replyActions = rule.value("actions").toList();
QVERIFY2(actions == replyActions, "Actions don't match"); QVERIFY2(actions == replyActions, "Actions don't match");
params.clear(); params.clear();
params.insert("ruleId", newRuleId); params.insert("ruleId", newRuleId);
response = injectAndWait("Rules.RemoveRule", params); response = injectAndWait("Rules.RemoveRule", params);
@ -333,7 +332,6 @@ void TestRules::loadStoreConfig()
eventDescriptorList.append(eventDescriptor1); eventDescriptorList.append(eventDescriptor1);
eventDescriptorList.append(eventDescriptor2); eventDescriptorList.append(eventDescriptor2);
QVariantMap stateEvaluator1; QVariantMap stateEvaluator1;
QVariantList childEvaluators; QVariantList childEvaluators;
@ -382,7 +380,7 @@ void TestRules::loadStoreConfig()
action2Params.append(action2Param2); action2Params.append(action2Param2);
action2.insert("params", action2Params); action2.insert("params", action2Params);
// First rule
QVariantMap params; QVariantMap params;
QVariantList actions; QVariantList actions;
actions.append(action1); actions.append(action1);
@ -396,22 +394,39 @@ void TestRules::loadStoreConfig()
RuleId newRuleId = RuleId(response.toMap().value("params").toMap().value("ruleId").toString()); RuleId newRuleId = RuleId(response.toMap().value("params").toMap().value("ruleId").toString());
verifyRuleError(response); verifyRuleError(response);
// Second rule
QVariantMap params2;
QVariantList actions2;
actions2.append(action1);
QVariantList exitActions2;
exitActions2.append(action2);
params2.insert("actions", actions2);
params2.insert("exitActions", exitActions2);
params2.insert("stateEvaluator", stateEvaluator1);
params2.insert("name", "TestRule2");
QVariant response2 = injectAndWait("Rules.AddRule", params2);
RuleId newRuleId2 = RuleId(response2.toMap().value("params").toMap().value("ruleId").toString());
verifyRuleError(response2);
restartServer(); restartServer();
response = injectAndWait("Rules.GetRules"); response = injectAndWait("Rules.GetRules");
QVariantList rules = response.toMap().value("params").toMap().value("ruleIds").toList(); QVariantList rules = response.toMap().value("params").toMap().value("ruleIds").toList();
QVERIFY2(rules.count() == 1, "There should be exactly one rule"); QVERIFY2(rules.count() == 2, "There should be exactly two rule.");
QCOMPARE(RuleId(rules.first().toString()), newRuleId); QVERIFY2(rules.contains(newRuleId.toString()), "Rule 1 should be in ruleIds list.");
QVERIFY2(rules.contains(newRuleId2.toString()), "Rule 2 should be in ruleIds list.");
params.clear(); params.clear();
params.insert("ruleId", rules.first().toString()); params.insert("ruleId", newRuleId);
response = injectAndWait("Rules.GetRuleDetails", params); response = injectAndWait("Rules.GetRuleDetails", params);
QVariantMap rule = response.toMap().value("params").toMap().value("rule").toMap(); QVariantMap rule1 = response.toMap().value("params").toMap().value("rule").toMap();
QVariantList eventDescriptors = rule.value("eventDescriptors").toList(); QVariantList eventDescriptors = rule1.value("eventDescriptors").toList();
QVERIFY2(eventDescriptors.count() == 2, "There shoud be exactly 2 eventDescriptors"); QVERIFY2(eventDescriptors.count() == 2, "There shoud be exactly 2 eventDescriptors");
foreach (const QVariant &expectedEventDescriptorVariant, eventDescriptorList) { foreach (const QVariant &expectedEventDescriptorVariant, eventDescriptorList) {
bool found = false; bool found = false;
@ -425,8 +440,8 @@ void TestRules::loadStoreConfig()
QVERIFY2(found, "missing eventdescriptor"); QVERIFY2(found, "missing eventdescriptor");
} }
QVERIFY2(rule.value("name").toString() == "TestRule", "Loaded wrong name for rule"); QVERIFY2(rule1.value("name").toString() == "TestRule", "Loaded wrong name for rule");
QVariantMap replyStateEvaluator= rule.value("stateEvaluator").toMap(); QVariantMap replyStateEvaluator= rule1.value("stateEvaluator").toMap();
QVariantList replyChildEvaluators = replyStateEvaluator.value("childEvaluators").toList(); QVariantList replyChildEvaluators = replyStateEvaluator.value("childEvaluators").toList();
QVERIFY2(replyStateEvaluator.value("operator") == "StateOperatorAnd", "There should be the AND operator."); QVERIFY2(replyStateEvaluator.value("operator") == "StateOperatorAnd", "There should be the AND operator.");
QVERIFY2(replyChildEvaluators.count() == 2, "There shoud be exactly 2 childEvaluators"); QVERIFY2(replyChildEvaluators.count() == 2, "There shoud be exactly 2 childEvaluators");
@ -438,7 +453,7 @@ void TestRules::loadStoreConfig()
QVERIFY2(stateDescriptor.value("stateTypeId") == mockIntStateId || stateDescriptor.value("stateTypeId") == mockBoolStateId, "StateTypeId of stateDescriptor doesn't match"); QVERIFY2(stateDescriptor.value("stateTypeId") == mockIntStateId || stateDescriptor.value("stateTypeId") == mockBoolStateId, "StateTypeId of stateDescriptor doesn't match");
} }
QVariantList replyActions = rule.value("actions").toList(); QVariantList replyActions = rule1.value("actions").toList();
foreach (const QVariant &actionVariant, actions) { foreach (const QVariant &actionVariant, actions) {
bool found = false; bool found = false;
foreach (const QVariant &replyActionVariant, replyActions) { foreach (const QVariant &replyActionVariant, replyActions) {
@ -455,11 +470,72 @@ void TestRules::loadStoreConfig()
QVERIFY2(found, "Action not found after loading from config."); QVERIFY2(found, "Action not found after loading from config.");
} }
params.clear();
params.insert("ruleId", newRuleId2);
response = injectAndWait("Rules.GetRuleDetails", params);
QVariantMap rule2 = response.toMap().value("params").toMap().value("rule").toMap();
QVERIFY2(rule2.value("name").toString() == "TestRule2", "Loaded wrong name for rule");
QVariantMap replyStateEvaluator2= rule2.value("stateEvaluator").toMap();
QVariantList replyChildEvaluators2 = replyStateEvaluator.value("childEvaluators").toList();
QVERIFY2(replyStateEvaluator2.value("operator") == "StateOperatorAnd", "There should be the AND operator.");
QVERIFY2(replyChildEvaluators2.count() == 2, "There shoud be exactly 2 childEvaluators");
foreach (const QVariant &childEvaluator, replyChildEvaluators2) {
QVERIFY2(childEvaluator.toMap().contains("stateDescriptor"), "StateDescriptor missing in StateEvaluator");
QVariantMap stateDescriptor = childEvaluator.toMap().value("stateDescriptor").toMap();
QVERIFY2(stateDescriptor.value("deviceId") == m_mockDeviceId, "DeviceId of stateDescriptor does not match");
QVERIFY2(stateDescriptor.value("stateTypeId") == mockIntStateId || stateDescriptor.value("stateTypeId") == mockBoolStateId, "StateTypeId of stateDescriptor doesn't match");
}
QVariantList replyActions2 = rule2.value("actions").toList();
QVERIFY2(replyActions2.count() == 1, "Rule 2 should have exactly 1 action");
foreach (const QVariant &actionVariant, actions2) {
bool found = false;
foreach (const QVariant &replyActionVariant, replyActions2) {
if (actionVariant.toMap().value("actionTypeId") == replyActionVariant.toMap().value("actionTypeId") &&
actionVariant.toMap().value("deviceId") == replyActionVariant.toMap().value("deviceId")) {
found = true;
QJsonDocument bDoc = QJsonDocument::fromVariant(actionVariant);
QString bString = bDoc.toJson();
QJsonDocument aDoc = QJsonDocument::fromVariant(replyActionVariant);
QString aString = aDoc.toJson();
QVERIFY2(actionVariant == replyActionVariant, QString("Action doesn't match after loading from config.\nBefore storing: %1\nAfter storing:%2").arg(bString).arg(aString).toUtf8().data());
}
}
QVERIFY2(found, "Action not found after loading from config.");
}
QVariantList replyExitActions2 = rule2.value("exitActions").toList();
QVERIFY2(replyExitActions2.count() == 1, "Rule 2 should have exactly 1 exitAction");
foreach (const QVariant &exitActionVariant, replyExitActions2) {
bool found = false;
foreach (const QVariant &replyActionVariant, replyExitActions2) {
if (exitActionVariant.toMap().value("actionTypeId") == replyActionVariant.toMap().value("actionTypeId") &&
exitActionVariant.toMap().value("deviceId") == replyActionVariant.toMap().value("deviceId")) {
found = true;
QJsonDocument bDoc = QJsonDocument::fromVariant(exitActionVariant);
QString bString = bDoc.toJson();
QJsonDocument aDoc = QJsonDocument::fromVariant(replyActionVariant);
QString aString = aDoc.toJson();
QVERIFY2(exitActionVariant == replyActionVariant, QString("Action doesn't match after loading from config.\nBefore storing: %1\nAfter storing:%2").arg(bString).arg(aString).toUtf8().data());
}
}
QVERIFY2(found, "Exit Action not found after loading from config.");
}
params.clear(); params.clear();
params.insert("ruleId", newRuleId); params.insert("ruleId", newRuleId);
response = injectAndWait("Rules.RemoveRule", params); response = injectAndWait("Rules.RemoveRule", params);
verifyRuleError(response); verifyRuleError(response);
params2.clear();
params2.insert("ruleId", newRuleId2);
response = injectAndWait("Rules.RemoveRule", params2);
verifyRuleError(response);
restartServer(); restartServer();
response = injectAndWait("Rules.GetRules"); response = injectAndWait("Rules.GetRules");