parent
f32a362ebc
commit
213b28ea83
@ -159,7 +159,6 @@ bool Device::hasState(const StateTypeId &stateTypeId) const
|
||||
QVariant Device::stateValue(const StateTypeId &stateTypeId) const
|
||||
{
|
||||
foreach (const State &state, m_states) {
|
||||
qDebug() << "checking" << stateTypeId << state.stateTypeId();
|
||||
if (state.stateTypeId() == stateTypeId) {
|
||||
return state.value();
|
||||
}
|
||||
|
||||
@ -187,6 +187,19 @@ DeviceHandler::DeviceHandler(QObject *parent) :
|
||||
returns.insert("o:value", JsonTypes::basicTypeToString(JsonTypes::Variant));
|
||||
setReturns("GetStateValue", returns);
|
||||
|
||||
params.clear(); returns.clear();
|
||||
setDescription("GetStateValues", "Get all the state values of the give device.");
|
||||
params.insert("deviceId", JsonTypes::basicTypeToString(JsonTypes::Uuid));
|
||||
setParams("GetStateValues", params);
|
||||
returns.insert("deviceError", JsonTypes::deviceErrorRef());
|
||||
states.clear();
|
||||
QVariantMap state;
|
||||
state.insert("stateTypeId", JsonTypes::basicTypeToString(JsonTypes::Uuid));
|
||||
state.insert("value", JsonTypes::basicTypeToString(JsonTypes::Variant));
|
||||
states.append(state);
|
||||
returns.insert("o:values", states);
|
||||
setReturns("GetStateValues", returns);
|
||||
|
||||
// Notifications
|
||||
params.clear(); returns.clear();
|
||||
setDescription("StateChanged", "Emitted whenever a State of a device changes.");
|
||||
@ -464,6 +477,33 @@ JsonReply* DeviceHandler::GetStateValue(const QVariantMap ¶ms) const
|
||||
return createReply(returns);
|
||||
}
|
||||
|
||||
JsonReply *DeviceHandler::GetStateValues(const QVariantMap ¶ms) const
|
||||
{
|
||||
QVariantMap returns;
|
||||
|
||||
Device *device = GuhCore::instance()->findConfiguredDevice(DeviceId(params.value("deviceId").toString()));
|
||||
if (!device) {
|
||||
returns.insert("deviceError", JsonTypes::deviceErrorToString(DeviceManager::DeviceErrorDeviceNotFound));
|
||||
return createReply(returns);
|
||||
}
|
||||
|
||||
DeviceClass deviceClass = GuhCore::instance()->findDeviceClass(device->deviceClassId());
|
||||
if (!deviceClass.isValid()) {
|
||||
returns.insert("deviceError", JsonTypes::deviceErrorToString(DeviceManager::DeviceErrorDeviceClassNotFound));
|
||||
return createReply(returns);
|
||||
}
|
||||
QVariantList values;
|
||||
foreach (const StateType &stateType, deviceClass.stateTypes()) {
|
||||
QVariantMap stateValue;
|
||||
stateValue.insert("stateTypeId", stateType.id().toString());
|
||||
stateValue.insert("value", device->stateValue(stateType.id()));
|
||||
values.append(stateValue);
|
||||
}
|
||||
returns.insert("deviceError", JsonTypes::deviceErrorToString(DeviceManager::DeviceErrorNoError));
|
||||
returns.insert("values", values);
|
||||
return createReply(returns);
|
||||
}
|
||||
|
||||
void DeviceHandler::deviceStateChanged(Device *device, const QUuid &stateTypeId, const QVariant &value)
|
||||
{
|
||||
QVariantMap params;
|
||||
|
||||
@ -60,6 +60,8 @@ public:
|
||||
|
||||
Q_INVOKABLE JsonReply* GetStateValue(const QVariantMap ¶ms) const;
|
||||
|
||||
Q_INVOKABLE JsonReply* GetStateValues(const QVariantMap ¶ms) const;
|
||||
|
||||
signals:
|
||||
void StateChanged(const QVariantMap ¶ms);
|
||||
|
||||
|
||||
@ -47,9 +47,6 @@ private slots:
|
||||
|
||||
void getConfiguredDevices();
|
||||
|
||||
void removeDevice_data();
|
||||
void removeDevice();
|
||||
|
||||
void storedDevices();
|
||||
|
||||
void discoverDevices_data();
|
||||
@ -63,6 +60,17 @@ private slots:
|
||||
|
||||
void getStateTypes_data();
|
||||
void getStateTypes();
|
||||
|
||||
void getStateValue_data();
|
||||
void getStateValue();
|
||||
|
||||
void getStateValues_data();
|
||||
void getStateValues();
|
||||
|
||||
// Keep this the last one! It'll remove the configured mock device
|
||||
void removeDevice_data();
|
||||
void removeDevice();
|
||||
|
||||
};
|
||||
|
||||
void TestDevices::getPlugins()
|
||||
@ -269,41 +277,6 @@ void TestDevices::getConfiguredDevices()
|
||||
QCOMPARE(devices.count(), 2); // There should be one auto created mock device and the one created in initTestcase()
|
||||
}
|
||||
|
||||
void TestDevices::removeDevice_data()
|
||||
{
|
||||
QTest::addColumn<DeviceId>("deviceId");
|
||||
QTest::addColumn<DeviceManager::DeviceError>("deviceError");
|
||||
|
||||
QTest::newRow("Existing Device") << m_mockDeviceId << DeviceManager::DeviceErrorNoError;
|
||||
QTest::newRow("Not existing Device") << DeviceId::createDeviceId() << DeviceManager::DeviceErrorDeviceNotFound;
|
||||
}
|
||||
|
||||
void TestDevices::removeDevice()
|
||||
{
|
||||
QFETCH(DeviceId, deviceId);
|
||||
QFETCH(DeviceManager::DeviceError, deviceError);
|
||||
|
||||
QSettings settings(m_deviceSettings);
|
||||
settings.beginGroup("DeviceConfig");
|
||||
if (deviceError == DeviceManager::DeviceErrorNoError) {
|
||||
settings.beginGroup(m_mockDeviceId.toString());
|
||||
// Make sure we have some config values for this device
|
||||
QVERIFY(settings.allKeys().count() > 0);
|
||||
}
|
||||
|
||||
QVariantMap params;
|
||||
params.insert("deviceId", deviceId);
|
||||
|
||||
QVariant response = injectAndWait("Devices.RemoveConfiguredDevice", params);
|
||||
|
||||
verifyDeviceError(response, deviceError);
|
||||
|
||||
if (DeviceManager::DeviceErrorNoError) {
|
||||
// Make sure the device is gone from settings too
|
||||
QCOMPARE(settings.allKeys().count(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
void TestDevices::storedDevices()
|
||||
{
|
||||
QVariantMap params;
|
||||
@ -483,6 +456,96 @@ void TestDevices::getStateTypes()
|
||||
}
|
||||
}
|
||||
|
||||
void TestDevices::getStateValue_data()
|
||||
{
|
||||
QTest::addColumn<DeviceId>("deviceId");
|
||||
QTest::addColumn<StateTypeId>("stateTypeId");
|
||||
QTest::addColumn<DeviceManager::DeviceError>("statusCode");
|
||||
|
||||
QTest::newRow("valid deviceId") << m_mockDeviceId << mockIntStateId << DeviceManager::DeviceErrorNoError;
|
||||
QTest::newRow("invalid deviceId") << DeviceId("094f8024-5caa-48c1-ab6a-de486a92088f") << mockIntStateId << DeviceManager::DeviceErrorDeviceNotFound;
|
||||
QTest::newRow("invalid statetypeId") << m_mockDeviceId << StateTypeId("120514f1-343e-4621-9bff-dac616169df9") << DeviceManager::DeviceErrorStateTypeNotFound;
|
||||
}
|
||||
|
||||
void TestDevices::getStateValue()
|
||||
{
|
||||
QFETCH(DeviceId, deviceId);
|
||||
QFETCH(StateTypeId, stateTypeId);
|
||||
QFETCH(DeviceManager::DeviceError, statusCode);
|
||||
|
||||
QVariantMap params;
|
||||
params.insert("deviceId", deviceId);
|
||||
params.insert("stateTypeId", stateTypeId);
|
||||
QVariant response = injectAndWait("Devices.GetStateValue", params);
|
||||
|
||||
QCOMPARE(response.toMap().value("params").toMap().value("deviceError").toString(), JsonTypes::deviceErrorToString(statusCode));
|
||||
if (statusCode == DeviceManager::DeviceErrorNoError) {
|
||||
QVariant value = response.toMap().value("params").toMap().value("value");
|
||||
QCOMPARE(value.toInt(), 10); // Mock device has value 10 by default...
|
||||
}
|
||||
}
|
||||
|
||||
void TestDevices::getStateValues_data()
|
||||
{
|
||||
QTest::addColumn<DeviceId>("deviceId");
|
||||
QTest::addColumn<DeviceManager::DeviceError>("statusCode");
|
||||
|
||||
QTest::newRow("valid deviceId") << m_mockDeviceId << DeviceManager::DeviceErrorNoError;
|
||||
QTest::newRow("invalid deviceId") << DeviceId("094f8024-5caa-48c1-ab6a-de486a92088f") << DeviceManager::DeviceErrorDeviceNotFound;
|
||||
}
|
||||
|
||||
void TestDevices::getStateValues()
|
||||
{
|
||||
QFETCH(DeviceId, deviceId);
|
||||
QFETCH(DeviceManager::DeviceError, statusCode);
|
||||
|
||||
QVariantMap params;
|
||||
params.insert("deviceId", deviceId);
|
||||
QVariant response = injectAndWait("Devices.GetStateValues", params);
|
||||
|
||||
QCOMPARE(response.toMap().value("params").toMap().value("deviceError").toString(), JsonTypes::deviceErrorToString(statusCode));
|
||||
if (statusCode == DeviceManager::DeviceErrorNoError) {
|
||||
QVariantList values = response.toMap().value("params").toMap().value("values").toList();
|
||||
QCOMPARE(values.count(), 2); // Mock device has two states...
|
||||
}
|
||||
}
|
||||
|
||||
void TestDevices::removeDevice_data()
|
||||
{
|
||||
QTest::addColumn<DeviceId>("deviceId");
|
||||
QTest::addColumn<DeviceManager::DeviceError>("deviceError");
|
||||
|
||||
QTest::newRow("Existing Device") << m_mockDeviceId << DeviceManager::DeviceErrorNoError;
|
||||
QTest::newRow("Not existing Device") << DeviceId::createDeviceId() << DeviceManager::DeviceErrorDeviceNotFound;
|
||||
}
|
||||
|
||||
void TestDevices::removeDevice()
|
||||
{
|
||||
QFETCH(DeviceId, deviceId);
|
||||
QFETCH(DeviceManager::DeviceError, deviceError);
|
||||
|
||||
QSettings settings(m_deviceSettings);
|
||||
settings.beginGroup("DeviceConfig");
|
||||
if (deviceError == DeviceManager::DeviceErrorNoError) {
|
||||
settings.beginGroup(m_mockDeviceId.toString());
|
||||
// Make sure we have some config values for this device
|
||||
QVERIFY(settings.allKeys().count() > 0);
|
||||
}
|
||||
|
||||
QVariantMap params;
|
||||
params.insert("deviceId", deviceId);
|
||||
|
||||
QVariant response = injectAndWait("Devices.RemoveConfiguredDevice", params);
|
||||
|
||||
verifyDeviceError(response, deviceError);
|
||||
|
||||
if (DeviceManager::DeviceErrorNoError) {
|
||||
// Make sure the device is gone from settings too
|
||||
QCOMPARE(settings.allKeys().count(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#include "testdevices.moc"
|
||||
|
||||
QTEST_MAIN(TestDevices)
|
||||
|
||||
Reference in New Issue
Block a user