add Events.GetEventType

Fixes #59
This commit is contained in:
Michael Zanetti 2014-12-14 14:48:55 +01:00 committed by Michael Zanetti
parent 63fb728269
commit 66f4a361a1
10 changed files with 75 additions and 16 deletions

View File

@ -97,10 +97,3 @@ void ActionHandler::actionExecuted(const ActionId &id, DeviceManager::DeviceErro
reply->setData(statusToReply(status));
reply->finished();
}
QVariantMap ActionHandler::statusToReply(DeviceManager::DeviceError status) const
{
QVariantMap returns;
returns.insert("deviceError", JsonTypes::deviceErrorToString(status));
return returns;
}

View File

@ -37,9 +37,6 @@ public:
private slots:
void actionExecuted(const ActionId &id, DeviceManager::DeviceError status);
private:
QVariantMap statusToReply(DeviceManager::DeviceError status) const;
private:
QHash<ActionId, JsonReply*> m_asyncActionExecutions;
};

View File

@ -31,6 +31,14 @@ EventHandler::EventHandler(QObject *parent) :
params.insert("event", JsonTypes::eventRef());
setParams("EventTriggered", params);
params.clear(); returns.clear();
setDescription("GetEventType", "Get the EventType for the given eventTypeId.");
params.insert("eventTypeId", JsonTypes::basicTypeToString(JsonTypes::Uuid));
setParams("GetEventType", params);
returns.insert("deviceError", JsonTypes::deviceErrorRef());
returns.insert("o:eventType", JsonTypes::eventTypeRef());
setReturns("GetEventType", returns);
connect(GuhCore::instance(), &GuhCore::eventTriggered, this, &EventHandler::eventTriggered);
}
@ -46,3 +54,17 @@ void EventHandler::eventTriggered(const Event &event)
emit EventTriggered(params);
}
JsonReply* EventHandler::GetEventType(const QVariantMap &params) const
{
EventTypeId eventTypeId(params.value("eventTypeId").toString());
foreach (const DeviceClass &deviceClass, GuhCore::instance()->supportedDevices()) {
foreach (const EventType &eventType, deviceClass.eventTypes()) {
if (eventType.id() == eventTypeId) {
QVariantMap data = statusToReply(DeviceManager::DeviceErrorNoError);
data.insert("eventType", JsonTypes::packEventType(eventType));
return createReply(data);
}
}
}
return createReply(statusToReply(DeviceManager::DeviceErrorEventTypeNotFound));
}

View File

@ -28,6 +28,7 @@ public:
explicit EventHandler(QObject *parent = 0);
QString name() const override;
Q_INVOKABLE JsonReply *GetEventType(const QVariantMap &params) const;
signals:
void EventTriggered(const QVariantMap &params);

View File

@ -132,6 +132,13 @@ JsonReply* JsonHandler::createAsyncReply(const QString &method) const
return JsonReply::createAsyncReply(const_cast<JsonHandler*>(this), method);
}
QVariantMap JsonHandler::statusToReply(DeviceManager::DeviceError status) const
{
QVariantMap returns;
returns.insert("deviceError", JsonTypes::deviceErrorToString(status));
return returns;
}
JsonReply::JsonReply(Type type, JsonHandler *handler, const QString &method, const QVariantMap &data):
m_type(type),

View File

@ -103,6 +103,7 @@ protected:
JsonReply *createReply(const QVariantMap &data) const;
JsonReply *createAsyncReply(const QString &method) const;
QVariantMap statusToReply(DeviceManager::DeviceError status) const;
private:
QHash<QString, QString> m_descriptions;

View File

@ -42,7 +42,7 @@
#include <QJsonDocument>
#include <QStringList>
#define JSON_PROTOCOL_VERSION 8
#define JSON_PROTOCOL_VERSION 9
JsonRPCServer::JsonRPCServer(QObject *parent):
JsonHandler(parent),

View File

@ -37,8 +37,8 @@ private slots:
void executeAction_data();
void executeAction();
void getActionTypes_data();
void getActionTypes();
void getActionType_data();
void getActionType();
};
@ -120,7 +120,7 @@ void TestActions::executeAction()
}
void TestActions::getActionTypes_data()
void TestActions::getActionType_data()
{
QTest::addColumn<ActionTypeId>("actionTypeId");
QTest::addColumn<DeviceManager::DeviceError>("error");
@ -129,7 +129,7 @@ void TestActions::getActionTypes_data()
QTest::newRow("invalid actiontypeid") << ActionTypeId::createActionTypeId() << DeviceManager::DeviceErrorActionTypeNotFound;
}
void TestActions::getActionTypes()
void TestActions::getActionType()
{
QFETCH(ActionTypeId, actionTypeId);
QFETCH(DeviceManager::DeviceError, error);

View File

@ -1,4 +1,4 @@
8
9
{
"methods": {
"Actions.ExecuteAction": {
@ -225,6 +225,16 @@
"deviceError": "$ref:DeviceError"
}
},
"Events.GetEventType": {
"description": "Get the EventType for the given eventTypeId.",
"params": {
"eventTypeId": "Uuid"
},
"returns": {
"deviceError": "$ref:DeviceError",
"o:eventType": "$ref:EventType"
}
},
"JSONRPC.Introspect": {
"description": "Introspect this API.",
"params": {

View File

@ -38,6 +38,9 @@ private slots:
void triggerStateChangeEvent();
void params();
void getEventType_data();
void getEventType();
};
void TestEvents::triggerEvent()
@ -107,5 +110,30 @@ void TestEvents::params()
QVERIFY(!event.param("baz").value().isValid());
}
void TestEvents::getEventType_data()
{
QTest::addColumn<EventTypeId>("eventTypeId");
QTest::addColumn<DeviceManager::DeviceError>("error");
QTest::newRow("valid eventypeid") << mockEvent1Id << DeviceManager::DeviceErrorNoError;
QTest::newRow("invalid eventypeid") << EventTypeId::createEventTypeId() << DeviceManager::DeviceErrorEventTypeNotFound;
}
void TestEvents::getEventType()
{
QFETCH(EventTypeId, eventTypeId);
QFETCH(DeviceManager::DeviceError, error);
QVariantMap params;
params.insert("eventTypeId", eventTypeId.toString());
QVariant response = injectAndWait("Events.GetEventType", params);
verifyDeviceError(response, error);
if (error == DeviceManager::DeviceErrorNoError) {
QVERIFY2(EventTypeId(response.toMap().value("params").toMap().value("eventType").toMap().value("id").toString()) == eventTypeId, "Didnt get reply for same actionTypeId as requested.");
}
}
#include "testevents.moc"
QTEST_MAIN(TestEvents)