Fix creating rules without giving action params that have a default value
This commit is contained in:
parent
84163288b0
commit
327fba5797
@ -1005,7 +1005,7 @@ RuleEngine::RuleError RuleEngine::checkRuleAction(const RuleAction &ruleAction,
|
|||||||
|
|
||||||
// Verify all required params are given
|
// Verify all required params are given
|
||||||
foreach (const ParamType ¶mType, actionType.paramTypes()) {
|
foreach (const ParamType ¶mType, actionType.paramTypes()) {
|
||||||
bool found = false;
|
bool found = !paramType.defaultValue().isNull();
|
||||||
foreach (const RuleActionParam &ruleActionParam, ruleAction.ruleActionParams()) {
|
foreach (const RuleActionParam &ruleActionParam, ruleAction.ruleActionParams()) {
|
||||||
if (ruleActionParam.paramTypeId() == paramType.id()
|
if (ruleActionParam.paramTypeId() == paramType.id()
|
||||||
|| ruleActionParam.paramName() == paramType.name()) {
|
|| ruleActionParam.paramName() == paramType.name()) {
|
||||||
|
|||||||
@ -57,6 +57,7 @@ extern ParamTypeId mockUpdateStatusActionUpdateStatusParamTypeId;
|
|||||||
extern ActionTypeId mockWithParamsActionTypeId;
|
extern ActionTypeId mockWithParamsActionTypeId;
|
||||||
extern ParamTypeId mockWithParamsActionParam1ParamTypeId;
|
extern ParamTypeId mockWithParamsActionParam1ParamTypeId;
|
||||||
extern ParamTypeId mockWithParamsActionParam2ParamTypeId;
|
extern ParamTypeId mockWithParamsActionParam2ParamTypeId;
|
||||||
|
extern ParamTypeId mockWithParamsActionParam3ParamTypeId;
|
||||||
extern ActionTypeId mockWithoutParamsActionTypeId;
|
extern ActionTypeId mockWithoutParamsActionTypeId;
|
||||||
extern ActionTypeId mockAsyncActionTypeId;
|
extern ActionTypeId mockAsyncActionTypeId;
|
||||||
extern ActionTypeId mockFailingActionTypeId;
|
extern ActionTypeId mockFailingActionTypeId;
|
||||||
|
|||||||
@ -251,6 +251,13 @@
|
|||||||
"name": "param2",
|
"name": "param2",
|
||||||
"displayName": "mockActionParam2",
|
"displayName": "mockActionParam2",
|
||||||
"type": "bool"
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "d1e428ae-eb8c-45aa-b1b0-e3d7de659c3a",
|
||||||
|
"name": "param3",
|
||||||
|
"displayName": "Param with default value",
|
||||||
|
"type": "QString",
|
||||||
|
"defaultValue": ""
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@ -61,6 +61,7 @@ ParamTypeId mockUpdateStatusActionUpdateStatusParamTypeId = ParamTypeId("{ebc413
|
|||||||
ActionTypeId mockWithParamsActionTypeId = ActionTypeId("{dea0f4e1-65e3-4981-8eaa-2701c53a9185}");
|
ActionTypeId mockWithParamsActionTypeId = ActionTypeId("{dea0f4e1-65e3-4981-8eaa-2701c53a9185}");
|
||||||
ParamTypeId mockWithParamsActionParam1ParamTypeId = ParamTypeId("{a2d3a256-a551-4712-a65b-ecd5a436a1cb}");
|
ParamTypeId mockWithParamsActionParam1ParamTypeId = ParamTypeId("{a2d3a256-a551-4712-a65b-ecd5a436a1cb}");
|
||||||
ParamTypeId mockWithParamsActionParam2ParamTypeId = ParamTypeId("{304a4899-18be-4e3b-94f4-d03be52f3233}");
|
ParamTypeId mockWithParamsActionParam2ParamTypeId = ParamTypeId("{304a4899-18be-4e3b-94f4-d03be52f3233}");
|
||||||
|
ParamTypeId mockWithParamsActionParam3ParamTypeId = ParamTypeId("{d1e428ae-eb8c-45aa-b1b0-e3d7de659c3a}");
|
||||||
ActionTypeId mockWithoutParamsActionTypeId = ActionTypeId("{defd3ed6-1a0d-400b-8879-a0202cf39935}");
|
ActionTypeId mockWithoutParamsActionTypeId = ActionTypeId("{defd3ed6-1a0d-400b-8879-a0202cf39935}");
|
||||||
ActionTypeId mockAsyncActionTypeId = ActionTypeId("{fbae06d3-7666-483e-a39e-ec50fe89054e}");
|
ActionTypeId mockAsyncActionTypeId = ActionTypeId("{fbae06d3-7666-483e-a39e-ec50fe89054e}");
|
||||||
ActionTypeId mockFailingActionTypeId = ActionTypeId("{df3cf33d-26d5-4577-9132-9823bd33fad0}");
|
ActionTypeId mockFailingActionTypeId = ActionTypeId("{df3cf33d-26d5-4577-9132-9823bd33fad0}");
|
||||||
@ -449,6 +450,9 @@ const QString translations[] {
|
|||||||
//: The name of the plugin mock ({727a4a9a-c187-446f-aadf-f1b2220607d1})
|
//: The name of the plugin mock ({727a4a9a-c187-446f-aadf-f1b2220607d1})
|
||||||
QT_TRANSLATE_NOOP("mock", "Mocked things"),
|
QT_TRANSLATE_NOOP("mock", "Mocked things"),
|
||||||
|
|
||||||
|
//: The name of the ParamType (ThingClass: mock, ActionType: withParams, ID: {d1e428ae-eb8c-45aa-b1b0-e3d7de659c3a})
|
||||||
|
QT_TRANSLATE_NOOP("mock", "Param with default value"),
|
||||||
|
|
||||||
//: The name of the ParamType (ThingClass: inputTypeMock, Type: thing, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150})
|
//: The name of the ParamType (ThingClass: inputTypeMock, Type: thing, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150})
|
||||||
QT_TRANSLATE_NOOP("mock", "Password text"),
|
QT_TRANSLATE_NOOP("mock", "Password text"),
|
||||||
|
|
||||||
|
|||||||
@ -121,8 +121,8 @@ private slots:
|
|||||||
void testRuleActionParams_data();
|
void testRuleActionParams_data();
|
||||||
void testRuleActionParams();
|
void testRuleActionParams();
|
||||||
|
|
||||||
void testRuleActionPAramsFromEventParameter_data();
|
void testRuleActionParamsFromEventParameter_data();
|
||||||
void testRuleActionPAramsFromEventParameter();
|
void testRuleActionParamsFromEventParameter();
|
||||||
|
|
||||||
void testInitStatesActive();
|
void testInitStatesActive();
|
||||||
|
|
||||||
@ -422,9 +422,28 @@ void TestRules::addRemoveRules_data()
|
|||||||
validActionNoParams.insert("actionTypeId", mockWithoutParamsActionTypeId);
|
validActionNoParams.insert("actionTypeId", mockWithoutParamsActionTypeId);
|
||||||
validActionNoParams.insert("thingId", m_mockThingId);
|
validActionNoParams.insert("thingId", m_mockThingId);
|
||||||
|
|
||||||
QVariantMap invalidAction;
|
QVariantMap invalidActionTypeId;
|
||||||
invalidAction.insert("actionTypeId", ActionTypeId("f32c7efb-38b6-4576-a496-c75bbb23132f"));
|
invalidActionTypeId.insert("actionTypeId", ActionTypeId("f32c7efb-38b6-4576-a496-c75bbb23132f"));
|
||||||
invalidAction.insert("thingId", m_mockThingId);
|
invalidActionTypeId.insert("thingId", m_mockThingId);
|
||||||
|
|
||||||
|
QVariantMap invalidActionMissingParam; // mockWithParamsActionType has 2 required and 1 optional param
|
||||||
|
invalidActionMissingParam.insert("actionTypeId", mockWithParamsActionTypeId);
|
||||||
|
invalidActionMissingParam.insert("thingId", m_mockThingId);
|
||||||
|
QVariantMap invalidActionMissingParamParam1;
|
||||||
|
invalidActionMissingParamParam1.insert("paramTypeId", mockWithParamsActionParam1ParamTypeId);
|
||||||
|
invalidActionMissingParamParam1.insert("value", 5);
|
||||||
|
invalidActionMissingParam.insert("ruleActionParams", QVariantList() << invalidActionMissingParamParam1);
|
||||||
|
|
||||||
|
QVariantMap validActionWithParams; // mockWithParamsActionType has 2 required and 1 optional param
|
||||||
|
validActionWithParams.insert("actionTypeId", mockWithParamsActionTypeId);
|
||||||
|
validActionWithParams.insert("thingId", m_mockThingId);
|
||||||
|
QVariantMap validActionWithParamsParam1;
|
||||||
|
validActionWithParamsParam1.insert("paramTypeId", mockWithParamsActionParam1ParamTypeId);
|
||||||
|
validActionWithParamsParam1.insert("value", 5);
|
||||||
|
QVariantMap validActionWithParamsParam2;
|
||||||
|
validActionWithParamsParam2.insert("paramTypeId", mockWithParamsActionParam2ParamTypeId);
|
||||||
|
validActionWithParamsParam2.insert("value", true);
|
||||||
|
validActionWithParams.insert("ruleActionParams", QVariantList() << validActionWithParamsParam1 << validActionWithParamsParam2);
|
||||||
|
|
||||||
// RuleExitAction
|
// RuleExitAction
|
||||||
QVariantMap validExitActionNoParams;
|
QVariantMap validExitActionNoParams;
|
||||||
@ -553,9 +572,11 @@ void TestRules::addRemoveRules_data()
|
|||||||
|
|
||||||
// Rules without exit actions
|
// Rules without exit actions
|
||||||
QTest::newRow("valid rule. enabled, 1 EventDescriptor, StateEvaluator, 1 Action, name") << true << validActionNoParams << QVariantMap() << validEventDescriptor1 << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorNoError << true << "TestRule";
|
QTest::newRow("valid rule. enabled, 1 EventDescriptor, StateEvaluator, 1 Action, name") << true << validActionNoParams << QVariantMap() << validEventDescriptor1 << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorNoError << true << "TestRule";
|
||||||
QTest::newRow("valid rule. disabled, 1 EventDescriptor, StateEvaluator, 1 Action, name") << false << validActionNoParams << QVariantMap() << validEventDescriptor1 << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorNoError << true << "TestRule";
|
QTest::newRow("valid rule. disabled, 1 EventDescriptor, StateEvaluator, 1 Action, name") << false << validActionNoParams << QVariantMap() << validEventDescriptor1 << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorNoError << true << "TestRule";
|
||||||
QTest::newRow("valid rule. 2 EventDescriptors, 1 Action, name") << true << validActionNoParams << QVariantMap() << QVariantMap() << eventDescriptorList << validStateEvaluator << RuleEngine::RuleErrorNoError << true << "TestRule";
|
QTest::newRow("valid rule. 2 EventDescriptors, 1 Action, name") << true << validActionNoParams << QVariantMap() << QVariantMap() << eventDescriptorList << validStateEvaluator << RuleEngine::RuleErrorNoError << true << "TestRule";
|
||||||
QTest::newRow("invalid action") << true << invalidAction << QVariantMap() << validEventDescriptor1 << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorActionTypeNotFound << false << "TestRule";
|
QTest::newRow("invalid action (invalid actionTypeId)") << true << invalidActionTypeId << QVariantMap() << validEventDescriptor1 << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorActionTypeNotFound << false << "TestRule";
|
||||||
|
QTest::newRow("invalid action (missing param)") << true << invalidActionMissingParam<< QVariantMap() << validEventDescriptor1 << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorMissingParameter << false << "TestRule";
|
||||||
|
QTest::newRow("valid action (with params)") << true << validActionWithParams << QVariantMap() << validEventDescriptor1 << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorNoError << false << "TestRule";
|
||||||
QTest::newRow("invalid event descriptor") << true << validActionNoParams << QVariantMap() << invalidEventDescriptor << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorThingNotFound << false << "TestRule";
|
QTest::newRow("invalid event descriptor") << true << validActionNoParams << QVariantMap() << invalidEventDescriptor << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorThingNotFound << false << "TestRule";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2673,7 +2694,7 @@ void TestRules::testRuleActionParams()
|
|||||||
verifyRuleError(response, error);
|
verifyRuleError(response, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRules::testRuleActionPAramsFromEventParameter_data() {
|
void TestRules::testRuleActionParamsFromEventParameter_data() {
|
||||||
QTest::addColumn<QVariantMap>("event");
|
QTest::addColumn<QVariantMap>("event");
|
||||||
QTest::addColumn<QVariantMap>("action");
|
QTest::addColumn<QVariantMap>("action");
|
||||||
QTest::addColumn<RuleEngine::RuleError>("error");
|
QTest::addColumn<RuleEngine::RuleError>("error");
|
||||||
@ -2716,7 +2737,7 @@ void TestRules::testRuleActionPAramsFromEventParameter_data() {
|
|||||||
QTest::newRow("int -> bool") << intEvent << boolAction << RuleEngine::RuleErrorNoError;
|
QTest::newRow("int -> bool") << intEvent << boolAction << RuleEngine::RuleErrorNoError;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRules::testRuleActionPAramsFromEventParameter()
|
void TestRules::testRuleActionParamsFromEventParameter()
|
||||||
{
|
{
|
||||||
QFETCH(QVariantMap, event);
|
QFETCH(QVariantMap, event);
|
||||||
QFETCH(QVariantMap, action);
|
QFETCH(QVariantMap, action);
|
||||||
|
|||||||
Reference in New Issue
Block a user