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
|
||||
foreach (const ParamType ¶mType, actionType.paramTypes()) {
|
||||
bool found = false;
|
||||
bool found = !paramType.defaultValue().isNull();
|
||||
foreach (const RuleActionParam &ruleActionParam, ruleAction.ruleActionParams()) {
|
||||
if (ruleActionParam.paramTypeId() == paramType.id()
|
||||
|| ruleActionParam.paramName() == paramType.name()) {
|
||||
|
||||
@ -57,6 +57,7 @@ extern ParamTypeId mockUpdateStatusActionUpdateStatusParamTypeId;
|
||||
extern ActionTypeId mockWithParamsActionTypeId;
|
||||
extern ParamTypeId mockWithParamsActionParam1ParamTypeId;
|
||||
extern ParamTypeId mockWithParamsActionParam2ParamTypeId;
|
||||
extern ParamTypeId mockWithParamsActionParam3ParamTypeId;
|
||||
extern ActionTypeId mockWithoutParamsActionTypeId;
|
||||
extern ActionTypeId mockAsyncActionTypeId;
|
||||
extern ActionTypeId mockFailingActionTypeId;
|
||||
|
||||
@ -251,6 +251,13 @@
|
||||
"name": "param2",
|
||||
"displayName": "mockActionParam2",
|
||||
"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}");
|
||||
ParamTypeId mockWithParamsActionParam1ParamTypeId = ParamTypeId("{a2d3a256-a551-4712-a65b-ecd5a436a1cb}");
|
||||
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 mockAsyncActionTypeId = ActionTypeId("{fbae06d3-7666-483e-a39e-ec50fe89054e}");
|
||||
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})
|
||||
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})
|
||||
QT_TRANSLATE_NOOP("mock", "Password text"),
|
||||
|
||||
|
||||
@ -121,8 +121,8 @@ private slots:
|
||||
void testRuleActionParams_data();
|
||||
void testRuleActionParams();
|
||||
|
||||
void testRuleActionPAramsFromEventParameter_data();
|
||||
void testRuleActionPAramsFromEventParameter();
|
||||
void testRuleActionParamsFromEventParameter_data();
|
||||
void testRuleActionParamsFromEventParameter();
|
||||
|
||||
void testInitStatesActive();
|
||||
|
||||
@ -422,9 +422,28 @@ void TestRules::addRemoveRules_data()
|
||||
validActionNoParams.insert("actionTypeId", mockWithoutParamsActionTypeId);
|
||||
validActionNoParams.insert("thingId", m_mockThingId);
|
||||
|
||||
QVariantMap invalidAction;
|
||||
invalidAction.insert("actionTypeId", ActionTypeId("f32c7efb-38b6-4576-a496-c75bbb23132f"));
|
||||
invalidAction.insert("thingId", m_mockThingId);
|
||||
QVariantMap invalidActionTypeId;
|
||||
invalidActionTypeId.insert("actionTypeId", ActionTypeId("f32c7efb-38b6-4576-a496-c75bbb23132f"));
|
||||
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
|
||||
QVariantMap validExitActionNoParams;
|
||||
@ -553,9 +572,11 @@ void TestRules::addRemoveRules_data()
|
||||
|
||||
// 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. 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("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";
|
||||
}
|
||||
|
||||
@ -2673,7 +2694,7 @@ void TestRules::testRuleActionParams()
|
||||
verifyRuleError(response, error);
|
||||
}
|
||||
|
||||
void TestRules::testRuleActionPAramsFromEventParameter_data() {
|
||||
void TestRules::testRuleActionParamsFromEventParameter_data() {
|
||||
QTest::addColumn<QVariantMap>("event");
|
||||
QTest::addColumn<QVariantMap>("action");
|
||||
QTest::addColumn<RuleEngine::RuleError>("error");
|
||||
@ -2716,7 +2737,7 @@ void TestRules::testRuleActionPAramsFromEventParameter_data() {
|
||||
QTest::newRow("int -> bool") << intEvent << boolAction << RuleEngine::RuleErrorNoError;
|
||||
}
|
||||
|
||||
void TestRules::testRuleActionPAramsFromEventParameter()
|
||||
void TestRules::testRuleActionParamsFromEventParameter()
|
||||
{
|
||||
QFETCH(QVariantMap, event);
|
||||
QFETCH(QVariantMap, action);
|
||||
|
||||
Reference in New Issue
Block a user