From d2f02d650bed1f752fe0606db67ccf40adcea559 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sun, 15 Jun 2014 02:44:10 +0200 Subject: [PATCH] fix eventdescriptor's paramdescriptors handling --- server/jsonrpc/jsontypes.cpp | 6 ++++++ tests/auto/rules/testrules.cpp | 30 ++++++++++++++++++++++++------ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/server/jsonrpc/jsontypes.cpp b/server/jsonrpc/jsontypes.cpp index fd9cd25f..8b549c76 100644 --- a/server/jsonrpc/jsontypes.cpp +++ b/server/jsonrpc/jsontypes.cpp @@ -591,6 +591,12 @@ QPair JsonTypes::validateVariant(const QVariant &templateVariant, if (!variant.canConvert(QVariant::Map)) { report(false, "Param not valid. Should be a map."); } + } else if (refName == paramDescriptorRef()) { + QPair result = validateMap(paramDescriptorDescription(), variant.toMap()); + if (!result.first) { + qDebug() << "ParamDescriptor not valid"; + return result; + } } else if (refName == deviceRef()) { QPair result = validateMap(deviceDescription(), variant.toMap()); if (!result.first) { diff --git a/tests/auto/rules/testrules.cpp b/tests/auto/rules/testrules.cpp index 80d2a4cd..eb9d8263 100644 --- a/tests/auto/rules/testrules.cpp +++ b/tests/auto/rules/testrules.cpp @@ -64,9 +64,11 @@ void TestRules::addRules_data() validEventDescriptor2.insert("deviceId", m_mockDeviceId); QVariantList params; QVariantMap param1; - param1.insert("mockParamInt", 3); + param1.insert("name", "mockParamInt"); + param1.insert("value", 3); + param1.insert("operator", "OperatorTypeEquals"); params.append(param1); - validEventDescriptor2.insert("paramDescriptors", param1); + validEventDescriptor2.insert("paramDescriptors", params); QVariantList eventDescriptorList; eventDescriptorList.append(validEventDescriptor1); @@ -172,10 +174,16 @@ void TestRules::loadStoreConfig() eventDescriptor2.insert("paramDescriptors", QVariantList()); QVariantList eventParamDescriptors; QVariantMap eventParam1; - eventParam1.insert("mockParamInt", 3); + eventParam1.insert("name", "mockParamInt"); + eventParam1.insert("value", 3); + eventParam1.insert("operator", "OperatorTypeEquals"); eventParamDescriptors.append(eventParam1); eventDescriptor2.insert("paramDescriptors", eventParamDescriptors); + QVariantList eventDescriptorList; + eventDescriptorList.append(eventDescriptor1); + eventDescriptorList.append(eventDescriptor2); + QVariantMap action1; action1.insert("actionTypeId", mockActionIdNoParams); action1.insert("deviceId", m_mockDeviceId); @@ -200,7 +208,7 @@ void TestRules::loadStoreConfig() actions.append(action1); actions.append(action2); params.insert("actions", actions); - params.insert("eventDescriptor", eventDescriptor1); + params.insert("eventDescriptorList", eventDescriptorList); QVariant response = injectAndWait("Rules.AddRule", params); RuleId newRuleId = RuleId(response.toMap().value("params").toMap().value("ruleId").toString()); @@ -216,8 +224,18 @@ void TestRules::loadStoreConfig() QCOMPARE(RuleId(rules.first().toMap().value("id").toString()), newRuleId); QVariantList eventDescriptors = rules.first().toMap().value("eventDescriptors").toList(); - QVERIFY2(eventDescriptors.count() == 1, "There shoud be exactly one eventDescriptor"); - QVERIFY2(eventDescriptors.first().toMap() == eventDescriptor1, "Event descriptor doesn't match"); + QVERIFY2(eventDescriptors.count() == 2, "There shoud be exactly 2 eventDescriptors"); + foreach (const QVariant &expectedEventDescriptorVariant, eventDescriptorList) { + bool found = false; + foreach (const QVariant &replyEventDescriptorVariant, eventDescriptors) { + if (expectedEventDescriptorVariant.toMap().value("eventTypeId") == replyEventDescriptorVariant.toMap().value("eventTypeId") && + expectedEventDescriptorVariant.toMap().value("deviceId") == replyEventDescriptorVariant.toMap().value("deviceId")) { + found = true; + QVERIFY2(replyEventDescriptorVariant == expectedEventDescriptorVariant, "EventDescriptor doesn't match"); + } + } + QVERIFY2(found, "missing eventdescriptor"); + } QVariantList replyActions = rules.first().toMap().value("actions").toList(); foreach (const QVariant &actionVariant, actions) {