From 84854868eaaa2178d86ee14f7d606d3525e05c3c Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Mon, 26 Feb 2018 00:30:10 +0100 Subject: [PATCH] fix packing rules for interface based events and actions --- libnymea-core/jsonrpc/jsontypes.cpp | 9 +++++++-- tests/auto/rules/testrules.cpp | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/libnymea-core/jsonrpc/jsontypes.cpp b/libnymea-core/jsonrpc/jsontypes.cpp index 25873b33..ca257ac3 100644 --- a/libnymea-core/jsonrpc/jsontypes.cpp +++ b/libnymea-core/jsonrpc/jsontypes.cpp @@ -557,8 +557,13 @@ QVariantMap JsonTypes::packAction(const Action &action) QVariantMap JsonTypes::packRuleAction(const RuleAction &ruleAction) { QVariantMap variant; - variant.insert("actionTypeId", ruleAction.actionTypeId()); - variant.insert("deviceId", ruleAction.deviceId()); + if (ruleAction.type() == RuleAction::TypeDevice) { + variant.insert("actionTypeId", ruleAction.actionTypeId()); + variant.insert("deviceId", ruleAction.deviceId()); + } else { + variant.insert("interface", ruleAction.interface()); + variant.insert("interfaceAction", ruleAction.interfaceAction()); + } QVariantList params; foreach (const RuleActionParam &ruleActionParam, ruleAction.ruleActionParams()) params.append(packRuleActionParam(ruleActionParam)); diff --git a/tests/auto/rules/testrules.cpp b/tests/auto/rules/testrules.cpp index 759ec653..6b724001 100644 --- a/tests/auto/rules/testrules.cpp +++ b/tests/auto/rules/testrules.cpp @@ -2165,6 +2165,20 @@ void TestRules::testInterfaceBasedRule() addRuleParams.insert("eventDescriptors", QVariantList() << lowBatteryEvent); QVariant response = injectAndWait("Rules.AddRule", addRuleParams); + QCOMPARE(response.toMap().value("status").toString(), QString("success")); + QCOMPARE(response.toMap().value("params").toMap().value("ruleError").toString(), QString("RuleErrorNoError")); + + QVariantMap getRuleParams; + getRuleParams.insert("ruleId", response.toMap().value("params").toMap().value("ruleId")); + response = injectAndWait("Rules.GetRuleDetails", getRuleParams); + + QCOMPARE(response.toMap().value("params").toMap().value("ruleError").toString(), QString("RuleErrorNoError")); + + QCOMPARE(response.toMap().value("params").toMap().value("rule").toMap().value("eventDescriptors").toList().first().toMap().value("interface").toString(), QString("battery")); + QCOMPARE(response.toMap().value("params").toMap().value("rule").toMap().value("eventDescriptors").toList().first().toMap().value("interfaceEvent").toString(), QString("batteryCritical")); + + QCOMPARE(response.toMap().value("params").toMap().value("rule").toMap().value("actions").toList().first().toMap().value("interface").toString(), QString("light")); + QCOMPARE(response.toMap().value("params").toMap().value("rule").toMap().value("actions").toList().first().toMap().value("interfaceAction").toString(), QString("power")); // Change the state @@ -2179,7 +2193,7 @@ void TestRules::testInterfaceBasedRule() QCOMPARE(spy.count(), 1); reply->deleteLater(); - qDebug() << "response" << response; + verifyRuleExecuted(mockActionIdPower); } void TestRules::testHousekeeping_data()