fix issues in param handling in json api

pull/135/head
Michael Zanetti 2014-06-22 23:43:27 +02:00
parent 7d8199aac5
commit 53fe5557e0
6 changed files with 53 additions and 24 deletions

View File

@ -346,9 +346,8 @@ JsonReply* DeviceHandler::AddConfiguredDevice(const QVariantMap &params)
DeviceClassId deviceClass(params.value("deviceClassId").toString());
QList<Param> deviceParams;
foreach (const QVariant &paramVariant, params.value("deviceParams").toList()) {
QString paramName = paramVariant.toMap().keys().first();
Param param(paramName);
param.setValue(paramVariant.toMap().value(paramName));
Param param(paramVariant.toMap().value("name").toString());
param.setValue(paramVariant.toMap().value("value"));
deviceParams.append(param);
}

View File

@ -304,7 +304,8 @@ QVariantMap JsonTypes::packStateEvaluator(const StateEvaluator &stateEvaluator)
QVariantMap JsonTypes::packParam(const Param &param)
{
QVariantMap variantMap;
variantMap.insert(param.name(), param.value());
variantMap.insert("name", param.name());
variantMap.insert("value", param.value());
return variantMap;
}
@ -434,8 +435,9 @@ Param JsonTypes::unpackParam(const QVariantMap &paramMap)
if (paramMap.keys().count() == 0) {
return Param();
}
QString key = paramMap.keys().first();
return Param(key, paramMap.value(key));
QString name = paramMap.value("name").toString();
QVariant value = paramMap.value("value");
return Param(name, value);
}
QList<Param> JsonTypes::unpackParams(const QVariantList &paramList)

View File

@ -51,10 +51,12 @@ void TestActions::executeAction_data()
QVariantList params;
QVariantMap param1;
param1.insert("mockActionParam1", 5);
param1.insert("name", "mockActionParam1");
param1.insert("value", 5);
params.append(param1);
QVariantMap param2;
param2.insert("mockActionParam2", true);
param2.insert("name", "mockActionParam2");
param2.insert("value", true);
params.append(param2);
QTest::newRow("valid action") << m_mockDeviceId << mockActionIdWithParams << params << true;

View File

@ -119,7 +119,8 @@ void TestDevices::setPluginConfig()
QVariantList configuration;
QVariantMap configParam;
configParam.insert("configParamInt", value);
configParam.insert("name", "configParamInt");
configParam.insert("value", value);
configuration.append(configParam);
params.insert("configuration", configuration);
QVariant response = injectAndWait("Devices.SetPluginConfiguration", params);
@ -131,7 +132,8 @@ void TestDevices::setPluginConfig()
response = injectAndWait("Devices.GetPluginConfiguration", params);
verifySuccess(response);
qDebug() << "222" << response.toMap().value("params").toMap().value("configuration").toList().first();
QVERIFY2(response.toMap().value("params").toMap().value("configuration").toList().first().toMap().value("configParamInt") == value, "Value not set correctly");
QVERIFY2(response.toMap().value("params").toMap().value("configuration").toList().first().toMap().value("name") == "configParamInt", "Value not set correctly");
QVERIFY2(response.toMap().value("params").toMap().value("configuration").toList().first().toMap().value("value") == value, "Value not set correctly");
}
}
@ -179,11 +181,14 @@ void TestDevices::getSupportedDevices()
void TestDevices::addConfiguredDevice_data()
{
QTest::addColumn<DeviceClassId>("deviceClassId");
QTest::addColumn<QVariantMap>("deviceParams");
QTest::addColumn<QVariantList>("deviceParams");
QTest::addColumn<bool>("success");
QVariantMap deviceParams;
deviceParams.insert("httpport", m_mockDevice1Port - 1);
QVariantList deviceParams;
QVariantMap httpportParam;
httpportParam.insert("name", "httpport");
httpportParam.insert("value", m_mockDevice1Port - 1);
deviceParams.append(httpportParam);
QTest::newRow("User, JustAdd") << mockDeviceClassId << deviceParams << true;
QTest::newRow("Auto, JustAdd") << mockDeviceAutoClassId << deviceParams << false;
@ -193,16 +198,25 @@ void TestDevices::addConfiguredDevice_data()
QTest::newRow("Setup failure") << mockDeviceBrokenClassId << deviceParams << false;
QTest::newRow("Setup failure, Async") << mockDeviceBrokenAsyncSetupClassId << deviceParams << false;
QVariantMap invalidDeviceParams;
invalidDeviceParams.insert("tropptth", m_mockDevice1Port - 1);
QTest::newRow("User, JustAdd, invalid params") << mockDeviceClassId << invalidDeviceParams << false;
QVariantList invalidDeviceParams;
QTest::newRow("User, JustAdd, missing params") << mockDeviceClassId << invalidDeviceParams << false;
QVariantMap fakeparam;
fakeparam.insert("name", "tropptth");
invalidDeviceParams.append(fakeparam);
QTest::newRow("User, JustAdd, invalid param") << mockDeviceClassId << invalidDeviceParams << false;
fakeparam.insert("value", "buhuu");
invalidDeviceParams.clear();
invalidDeviceParams.append(fakeparam);
QTest::newRow("User, JustAdd, wrong param") << mockDeviceClassId << invalidDeviceParams << false;
}
void TestDevices::addConfiguredDevice()
{
QFETCH(DeviceClassId, deviceClassId);
QFETCH(QVariantMap, deviceParams);
QFETCH(QVariantList, deviceParams);
QFETCH(bool, success);
QVariantMap params;
@ -270,8 +284,11 @@ void TestDevices::storedDevices()
{
QVariantMap params;
params.insert("deviceClassId", mockDeviceClassId);
QVariantMap deviceParams;
deviceParams.insert("httpport", 8888);
QVariantList deviceParams;
QVariantMap httpportParam;
httpportParam.insert("name", "httpport");
httpportParam.insert("value", 8888);
deviceParams.append(httpportParam);
params.insert("deviceParams", deviceParams);
QVariant response = injectAndWait("Devices.AddConfiguredDevice", params);
verifySuccess(response);
@ -293,7 +310,7 @@ void TestDevices::storedDevices()
qDebug() << "found added device" << device.toMap().value("params").toList().first().toMap();
qDebug() << "expected deviceParams:" << deviceParams;
QCOMPARE(device.toMap().value("params").toList().first().toMap(), deviceParams);
QCOMPARE(device.toMap().value("params").toList(), deviceParams);
found = true;
break;
}

View File

@ -64,9 +64,14 @@ void GuhTestBase::initTestCase()
// Lets add one instance of the mockdevice
QVariantMap params;
params.insert("deviceClassId", "{753f0d32-0468-4d08-82ed-1964aab03298}");
QVariantMap deviceParams;
deviceParams.insert("httpport", m_mockDevice1Port);
QVariantList deviceParams;
QVariantMap httpPortParam;
httpPortParam.insert("name", "httpport");
httpPortParam.insert("value", m_mockDevice1Port);
deviceParams.append(httpPortParam);
params.insert("deviceParams", deviceParams);
QVariant response = injectAndWait("Devices.AddConfiguredDevice", params);
verifySuccess(response);

View File

@ -234,10 +234,12 @@ void TestRules::loadStoreConfig()
action2.insert("deviceId", m_mockDeviceId);
QVariantList action2Params;
QVariantMap action2Param1;
action2Param1.insert("mockActionParam1", 5);
action2Param1.insert("name", "mockActionParam1");
action2Param1.insert("value", 5);
action2Params.append(action2Param1);
QVariantMap action2Param2;
action2Param2.insert("mockActionParam2", true);
action2Param2.insert("name", "mockActionParam2");
action2Param2.insert("value", true);
action2Params.append(action2Param2);
action2.insert("params", action2Params);
@ -289,6 +291,8 @@ void TestRules::loadStoreConfig()
if (actionVariant.toMap().value("actionTypeId") == replyActionVariant.toMap().value("actionTypeId") &&
actionVariant.toMap().value("deviceId") == replyActionVariant.toMap().value("deviceId")) {
found = true;
qDebug() << "AAA:" << actionVariant;
qDebug() << "BBB:" << replyActionVariant;
QVERIFY2(actionVariant == replyActionVariant, "Action doesn't match after loading from config.");
}
}