Commit c5123c134cb61775aa7a7f4f280b07ddcb30b54e
Committed by
Moritz Wirger
1 parent
a8eb8aa7
Rename ScheduleCommand to Action, to make it more general.
Showing
16 changed files
with
266 additions
and
159 deletions
.gitignore
include/hueplusplus/Action.h
0 → 100644
| 1 | +/** | |
| 2 | + \file Action.h | |
| 3 | + Copyright Notice\n | |
| 4 | + Copyright (C) 2020 Jan Rogall - developer\n | |
| 5 | + | |
| 6 | + This file is part of hueplusplus. | |
| 7 | + | |
| 8 | + hueplusplus is free software: you can redistribute it and/or modify | |
| 9 | + it under the terms of the GNU Lesser General Public License as published by | |
| 10 | + the Free Software Foundation, either version 3 of the License, or | |
| 11 | + (at your option) any later version. | |
| 12 | + | |
| 13 | + hueplusplus is distributed in the hope that it will be useful, | |
| 14 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | + GNU Lesser General Public License for more details. | |
| 17 | + | |
| 18 | + You should have received a copy of the GNU Lesser General Public License | |
| 19 | + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>. | |
| 20 | +**/ | |
| 21 | + | |
| 22 | +#ifndef INCLUDE_HUEPLUSPLUS_ACTION_H | |
| 23 | +#define INCLUDE_HUEPLUSPLUS_ACTION_H | |
| 24 | + | |
| 25 | +#include "json/json.hpp" | |
| 26 | + | |
| 27 | +namespace hueplusplus | |
| 28 | +{ | |
| 29 | +//! \brief Action executed by the bridge, e.g. as a Schedule command | |
| 30 | +//! | |
| 31 | +//! The action makes either a POST, PUT or DELETE request with a given body | |
| 32 | +//! to an address on the bridge. | |
| 33 | +//! | |
| 34 | +//! The Action can also be created by StateTransaction::toAction(). | |
| 35 | +class Action | |
| 36 | +{ | |
| 37 | +public: | |
| 38 | + //! \brief Create Action from json | |
| 39 | + //! \param json JSON object with address, method and body | |
| 40 | + explicit Action(const nlohmann::json& json); | |
| 41 | + | |
| 42 | + //! \brief Method used for the command | |
| 43 | + enum class Method | |
| 44 | + { | |
| 45 | + post, //!< POST request | |
| 46 | + put, //!< PUT request | |
| 47 | + deleteMethod //!< DELETE request | |
| 48 | + }; | |
| 49 | + | |
| 50 | + //! \brief Get address the request is made to | |
| 51 | + std::string getAddress() const; | |
| 52 | + //! \brief Get request method | |
| 53 | + Method getMethod() const; | |
| 54 | + //! \brief Get request body | |
| 55 | + const nlohmann::json& getBody() const; | |
| 56 | + | |
| 57 | + //! \brief Get json object of command | |
| 58 | + const nlohmann::json& toJson() const; | |
| 59 | + | |
| 60 | +public: | |
| 61 | + //! \brief Parse Method from string | |
| 62 | + //! \param s \c POST, \c PUT or \c DELETE | |
| 63 | + static Method parseMethod(const std::string& s); | |
| 64 | + //! \brief Get string from Method | |
| 65 | + //! \returns \c POST, \c PUT or \c DELETE | |
| 66 | + static std::string methodToString(Method m); | |
| 67 | + | |
| 68 | +private: | |
| 69 | + nlohmann::json json; | |
| 70 | +}; | |
| 71 | +} // namespace hueplusplus | |
| 72 | + | |
| 73 | +#endif | ... | ... |
include/hueplusplus/Group.h
| ... | ... | @@ -27,6 +27,7 @@ |
| 27 | 27 | #include <vector> |
| 28 | 28 | |
| 29 | 29 | #include "APICache.h" |
| 30 | +#include "Action.h" | |
| 30 | 31 | #include "HueCommandAPI.h" |
| 31 | 32 | #include "StateTransaction.h" |
| 32 | 33 | |
| ... | ... | @@ -265,12 +266,12 @@ public: |
| 265 | 266 | //! \param scene Scene name. |
| 266 | 267 | void setScene(const std::string& scene); |
| 267 | 268 | |
| 268 | - //! \brief Get ScheduleCommand to set scene | |
| 269 | + //! \brief Get Action to set scene | |
| 269 | 270 | //! \param scene Scene name |
| 270 | - //! \returns A ScheduleCommand that can be used to set the scene on a Schedule | |
| 271 | + //! \returns A Action that can be used to set the scene on a Schedule | |
| 271 | 272 | //! |
| 272 | 273 | //! To set other light properties in a scene, use transaction(). |
| 273 | - ScheduleCommand scheduleScene(const std::string& scene) const; | |
| 274 | + Action createSceneAction(const std::string& scene) const; | |
| 274 | 275 | |
| 275 | 276 | ///@} |
| 276 | 277 | ... | ... |
include/hueplusplus/Rule.h
| ... | ... | @@ -25,8 +25,8 @@ |
| 25 | 25 | #include <string> |
| 26 | 26 | |
| 27 | 27 | #include "APICache.h" |
| 28 | +#include "Action.h" | |
| 28 | 29 | #include "HueCommandAPI.h" |
| 29 | -#include "Schedule.h" | |
| 30 | 30 | #include "TimePattern.h" |
| 31 | 31 | |
| 32 | 32 | namespace hueplusplus |
| ... | ... | @@ -59,6 +59,7 @@ public: |
| 59 | 59 | nlohmann::json toJson() const; |
| 60 | 60 | |
| 61 | 61 | static Condition parse(const nlohmann::json& json); |
| 62 | + | |
| 62 | 63 | private: |
| 63 | 64 | std::string address; |
| 64 | 65 | Operator op; |
| ... | ... | @@ -105,7 +106,8 @@ public: |
| 105 | 106 | std::string getOwner() const; |
| 106 | 107 | |
| 107 | 108 | std::vector<Condition> getConditions() const; |
| 108 | - std::vector<ScheduleCommand> getActions() const; | |
| 109 | + std::vector<Action> getActions() const; | |
| 110 | + | |
| 109 | 111 | private: |
| 110 | 112 | int id; |
| 111 | 113 | APICache state; | ... | ... |
include/hueplusplus/Schedule.h
| ... | ... | @@ -23,53 +23,11 @@ |
| 23 | 23 | #define INCLUDE_HUEPLUSPLUS_SCHEDULE_H |
| 24 | 24 | |
| 25 | 25 | #include "APICache.h" |
| 26 | +#include "Action.h" | |
| 26 | 27 | #include "TimePattern.h" |
| 27 | 28 | |
| 28 | 29 | namespace hueplusplus |
| 29 | 30 | { |
| 30 | -//! \brief Command executed on a Schedule | |
| 31 | -//! | |
| 32 | -//! The command makes either a POST, PUT or DELETE request with a given body | |
| 33 | -//! to an address on the bridge. | |
| 34 | -//! | |
| 35 | -//! A ScheduleCommand can also be created by StateTransaction::toScheduleCommand(). | |
| 36 | -class ScheduleCommand | |
| 37 | -{ | |
| 38 | -public: | |
| 39 | - //! \brief Create ScheduleCommand from json | |
| 40 | - //! \param json JSON object with address, method and body | |
| 41 | - explicit ScheduleCommand(const nlohmann::json& json); | |
| 42 | - | |
| 43 | - //! \brief Method used for the command | |
| 44 | - enum class Method | |
| 45 | - { | |
| 46 | - post, //!< POST request | |
| 47 | - put, //!< PUT request | |
| 48 | - deleteMethod //!< DELETE request | |
| 49 | - }; | |
| 50 | - | |
| 51 | - //! \brief Get address the request is made to | |
| 52 | - std::string getAddress() const; | |
| 53 | - //! \brief Get request method | |
| 54 | - Method getMethod() const; | |
| 55 | - //! \brief Get request body | |
| 56 | - const nlohmann::json& getBody() const; | |
| 57 | - | |
| 58 | - //! \brief Get json object of command | |
| 59 | - const nlohmann::json& toJson() const; | |
| 60 | - | |
| 61 | -private: | |
| 62 | - //! \brief Parse Method from string | |
| 63 | - //! \param s \c POST, \c PUT or \c DELETE | |
| 64 | - static Method parseMethod(const std::string& s); | |
| 65 | - //! \brief Get string from Method | |
| 66 | - //! \returns \c POST, \c PUT or \c DELETE | |
| 67 | - static std::string methodToString(Method m); | |
| 68 | - | |
| 69 | -private: | |
| 70 | - nlohmann::json json; | |
| 71 | -}; | |
| 72 | - | |
| 73 | 31 | //! \brief Schedule stored in the bridge |
| 74 | 32 | //! |
| 75 | 33 | //! A schedule can be created by the user to trigger actions at specific times. |
| ... | ... | @@ -99,7 +57,7 @@ public: |
| 99 | 57 | //! \brief Get schedule description |
| 100 | 58 | std::string getDescription() const; |
| 101 | 59 | //! \brief Get schedule command |
| 102 | - ScheduleCommand getCommand() const; | |
| 60 | + Action getCommand() const; | |
| 103 | 61 | //! \brief Get time when the event(s) will occur |
| 104 | 62 | //! \returns TimePattern in local timezone |
| 105 | 63 | time::TimePattern getTime() const; |
| ... | ... | @@ -134,12 +92,12 @@ public: |
| 134 | 92 | //! \throws nlohmann::json::parse_error when response could not be parsed |
| 135 | 93 | void setDescription(const std::string& description); |
| 136 | 94 | //! \brief Set schedule command |
| 137 | - //! \param command New command that is executed when the time event occurs. | |
| 95 | + //! \param command New action that is executed when the time event occurs. | |
| 138 | 96 | //! \throws std::system_error when system or socket operations fail |
| 139 | 97 | //! \throws HueException when response contained no body |
| 140 | 98 | //! \throws HueAPIResponseException when response contains an error |
| 141 | 99 | //! \throws nlohmann::json::parse_error when response could not be parsed |
| 142 | - void setCommand(const ScheduleCommand& command); | |
| 100 | + void setCommand(const Action& command); | |
| 143 | 101 | //! \brief Set new time when the event will occur |
| 144 | 102 | //! \param timePattern Any possible value of TimePattern |
| 145 | 103 | //! \throws std::system_error when system or socket operations fail |
| ... | ... | @@ -191,7 +149,7 @@ public: |
| 191 | 149 | CreateSchedule& setDescription(const std::string& description); |
| 192 | 150 | //! \brief Set command |
| 193 | 151 | //! \see Schedule::setCommand |
| 194 | - CreateSchedule& setCommand(const ScheduleCommand& command); | |
| 152 | + CreateSchedule& setCommand(const Action& command); | |
| 195 | 153 | //! \brief Set time |
| 196 | 154 | //! \see Schedule::setTime |
| 197 | 155 | CreateSchedule& setTime(const time::TimePattern& time); | ... | ... |
include/hueplusplus/StateTransaction.h
| ... | ... | @@ -25,9 +25,9 @@ |
| 25 | 25 | |
| 26 | 26 | #include <string> |
| 27 | 27 | |
| 28 | +#include "Action.h" | |
| 28 | 29 | #include "ColorUnits.h" |
| 29 | 30 | #include "HueCommandAPI.h" |
| 30 | -#include "Schedule.h" | |
| 31 | 31 | |
| 32 | 32 | #include "json/json.hpp" |
| 33 | 33 | |
| ... | ... | @@ -54,7 +54,7 @@ namespace hueplusplus |
| 54 | 54 | //! In this case, it is especially important that the light and the state of the light MUST NOT invalidate. |
| 55 | 55 | //! That means |
| 56 | 56 | //! \li the light variable has to live longer than the transaction |
| 57 | -//! \li especially no non-const method calls on the light while the transaction is open, | |
| 57 | +//! \li especially no non-const method calls on the light while the transaction is open, | |
| 58 | 58 | //! or committing other transactions |
| 59 | 59 | //! |
| 60 | 60 | //! In general, this method is easier to screw up and should only be used when really necessary. |
| ... | ... | @@ -85,9 +85,9 @@ public: |
| 85 | 85 | //! \throws nlohmann::json::parse_error when response could not be parsed |
| 86 | 86 | bool commit(bool trimRequest = true); |
| 87 | 87 | |
| 88 | - //! \brief Create a ScheduleCommand from the transaction | |
| 89 | - //! \returns A ScheduleCommand that can be used to execute this transaction on a Schedule. | |
| 90 | - ScheduleCommand toScheduleCommand(); | |
| 88 | + //! \brief Create an Action from the transaction | |
| 89 | + //! \returns An Action that can be used to execute this transaction on a Schedule or Rule. | |
| 90 | + Action toAction(); | |
| 91 | 91 | |
| 92 | 92 | //! \brief Turn light on or off. |
| 93 | 93 | //! \param on true for on, false for off | ... | ... |
src/Action.cpp
0 → 100644
| 1 | +/** | |
| 2 | + \file Action.cpp | |
| 3 | + Copyright Notice\n | |
| 4 | + Copyright (C) 2020 Jan Rogall - developer\n | |
| 5 | + | |
| 6 | + This file is part of hueplusplus. | |
| 7 | + | |
| 8 | + hueplusplus is free software: you can redistribute it and/or modify | |
| 9 | + it under the terms of the GNU Lesser General Public License as published by | |
| 10 | + the Free Software Foundation, either version 3 of the License, or | |
| 11 | + (at your option) any later version. | |
| 12 | + | |
| 13 | + hueplusplus is distributed in the hope that it will be useful, | |
| 14 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | + GNU Lesser General Public License for more details. | |
| 17 | + | |
| 18 | + You should have received a copy of the GNU Lesser General Public License | |
| 19 | + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>. | |
| 20 | +**/ | |
| 21 | + | |
| 22 | +#include <hueplusplus/Action.h> | |
| 23 | +#include <hueplusplus/HueExceptionMacro.h> | |
| 24 | + | |
| 25 | +namespace hueplusplus | |
| 26 | +{ | |
| 27 | + | |
| 28 | +Action::Action(const nlohmann::json& json) : json(json) { } | |
| 29 | + | |
| 30 | +std::string Action::getAddress() const | |
| 31 | +{ | |
| 32 | + return json.at("address").get<std::string>(); | |
| 33 | +} | |
| 34 | + | |
| 35 | +Action::Method Action::getMethod() const | |
| 36 | +{ | |
| 37 | + return parseMethod(json.at("method").get<std::string>()); | |
| 38 | +} | |
| 39 | + | |
| 40 | +const nlohmann::json& Action::getBody() const | |
| 41 | +{ | |
| 42 | + return json.at("body"); | |
| 43 | +} | |
| 44 | + | |
| 45 | +const nlohmann::json& Action::toJson() const | |
| 46 | +{ | |
| 47 | + return json; | |
| 48 | +} | |
| 49 | + | |
| 50 | +Action::Method Action::parseMethod(const std::string& s) | |
| 51 | +{ | |
| 52 | + if (s == "POST") | |
| 53 | + { | |
| 54 | + return Method::post; | |
| 55 | + } | |
| 56 | + else if (s == "PUT") | |
| 57 | + { | |
| 58 | + return Method::put; | |
| 59 | + } | |
| 60 | + else if (s == "DELETE") | |
| 61 | + { | |
| 62 | + return Method::deleteMethod; | |
| 63 | + } | |
| 64 | + throw HueException(CURRENT_FILE_INFO, "Unknown ScheduleCommand method: " + s); | |
| 65 | +} | |
| 66 | + | |
| 67 | +std::string Action::methodToString(Method m) | |
| 68 | +{ | |
| 69 | + switch (m) | |
| 70 | + { | |
| 71 | + case Method::post: | |
| 72 | + return "POST"; | |
| 73 | + case Method::put: | |
| 74 | + return "PUT"; | |
| 75 | + case Method::deleteMethod: | |
| 76 | + return "DELETE"; | |
| 77 | + default: | |
| 78 | + throw HueException( | |
| 79 | + CURRENT_FILE_INFO, "Unknown ScheduleCommand method enum: " + std::to_string(static_cast<int>(m))); | |
| 80 | + } | |
| 81 | +} | |
| 82 | + | |
| 83 | +} // namespace hueplusplus | |
| 0 | 84 | \ No newline at end of file | ... | ... |
src/CMakeLists.txt
| ... | ... | @@ -22,7 +22,7 @@ set(hueplusplus_SOURCES |
| 22 | 22 | StateTransaction.cpp |
| 23 | 23 | TimePattern.cpp |
| 24 | 24 | UPnP.cpp |
| 25 | - Utils.cpp "ZLLSensors.cpp" "CLIPSensors.cpp" "NewDeviceList.cpp") | |
| 25 | + Utils.cpp "ZLLSensors.cpp" "CLIPSensors.cpp" "NewDeviceList.cpp" "Action.cpp") | |
| 26 | 26 | |
| 27 | 27 | # on windows we want to compile the WinHttpHandler |
| 28 | 28 | if(WIN32) | ... | ... |
src/Group.cpp
| ... | ... | @@ -190,12 +190,12 @@ void Group::setScene(const std::string& scene) |
| 190 | 190 | sendPutRequest("/action", {{"scene", scene}}, CURRENT_FILE_INFO); |
| 191 | 191 | } |
| 192 | 192 | |
| 193 | -ScheduleCommand Group::scheduleScene(const std::string& scene) const | |
| 193 | +Action Group::createSceneAction(const std::string& scene) const | |
| 194 | 194 | { |
| 195 | 195 | const nlohmann::json command {{"method", "PUT"}, |
| 196 | 196 | {"address", state.getCommandAPI().combinedPath("/groups/" + std::to_string(id) + "/action")}, |
| 197 | 197 | {"body", {{"scene", scene}}}}; |
| 198 | - return ScheduleCommand(command); | |
| 198 | + return Action(command); | |
| 199 | 199 | } |
| 200 | 200 | |
| 201 | 201 | nlohmann::json Group::sendPutRequest(const std::string& subPath, const nlohmann::json& request, FileInfo fileInfo) | ... | ... |
src/Schedule.cpp
| ... | ... | @@ -24,62 +24,6 @@ |
| 24 | 24 | |
| 25 | 25 | namespace hueplusplus |
| 26 | 26 | { |
| 27 | - | |
| 28 | -ScheduleCommand::ScheduleCommand(const nlohmann::json& json) : json(json) {} | |
| 29 | - | |
| 30 | -std::string ScheduleCommand::getAddress() const | |
| 31 | -{ | |
| 32 | - return json.at("address").get<std::string>(); | |
| 33 | -} | |
| 34 | - | |
| 35 | -ScheduleCommand::Method ScheduleCommand::getMethod() const | |
| 36 | -{ | |
| 37 | - return parseMethod(json.at("method").get<std::string>()); | |
| 38 | -} | |
| 39 | - | |
| 40 | -const nlohmann::json& ScheduleCommand::getBody() const | |
| 41 | -{ | |
| 42 | - return json.at("body"); | |
| 43 | -} | |
| 44 | - | |
| 45 | -const nlohmann::json& ScheduleCommand::toJson() const | |
| 46 | -{ | |
| 47 | - return json; | |
| 48 | -} | |
| 49 | - | |
| 50 | -ScheduleCommand::Method ScheduleCommand::parseMethod(const std::string& s) | |
| 51 | -{ | |
| 52 | - if (s == "POST") | |
| 53 | - { | |
| 54 | - return Method::post; | |
| 55 | - } | |
| 56 | - else if (s == "PUT") | |
| 57 | - { | |
| 58 | - return Method::put; | |
| 59 | - } | |
| 60 | - else if (s == "DELETE") | |
| 61 | - { | |
| 62 | - return Method::deleteMethod; | |
| 63 | - } | |
| 64 | - throw HueException(CURRENT_FILE_INFO, "Unknown ScheduleCommand method: " + s); | |
| 65 | -} | |
| 66 | - | |
| 67 | -std::string ScheduleCommand::methodToString(Method m) | |
| 68 | -{ | |
| 69 | - switch (m) | |
| 70 | - { | |
| 71 | - case Method::post: | |
| 72 | - return "POST"; | |
| 73 | - case Method::put: | |
| 74 | - return "PUT"; | |
| 75 | - case Method::deleteMethod: | |
| 76 | - return "DELETE"; | |
| 77 | - default: | |
| 78 | - throw HueException( | |
| 79 | - CURRENT_FILE_INFO, "Unknown ScheduleCommand method enum: " + std::to_string(static_cast<int>(m))); | |
| 80 | - } | |
| 81 | -} | |
| 82 | - | |
| 83 | 27 | Schedule::Schedule(int id, const HueCommandAPI& commands, std::chrono::steady_clock::duration refreshDuration) |
| 84 | 28 | : id(id), state("/schedules/" + std::to_string(id), commands, refreshDuration) |
| 85 | 29 | { |
| ... | ... | @@ -106,9 +50,9 @@ std::string Schedule::getDescription() const |
| 106 | 50 | return state.getValue().at("description").get<std::string>(); |
| 107 | 51 | } |
| 108 | 52 | |
| 109 | -ScheduleCommand Schedule::getCommand() const | |
| 53 | +Action Schedule::getCommand() const | |
| 110 | 54 | { |
| 111 | - return ScheduleCommand(state.getValue().at("command")); | |
| 55 | + return Action(state.getValue().at("command")); | |
| 112 | 56 | } |
| 113 | 57 | |
| 114 | 58 | time::TimePattern Schedule::getTime() const |
| ... | ... | @@ -154,7 +98,7 @@ void Schedule::setDescription(const std::string& description) |
| 154 | 98 | refresh(); |
| 155 | 99 | } |
| 156 | 100 | |
| 157 | -void Schedule::setCommand(const ScheduleCommand& command) | |
| 101 | +void Schedule::setCommand(const Action& command) | |
| 158 | 102 | { |
| 159 | 103 | sendPutRequest({{"command", command.toJson()}}, CURRENT_FILE_INFO); |
| 160 | 104 | refresh(); |
| ... | ... | @@ -203,7 +147,7 @@ CreateSchedule& CreateSchedule::setDescription(const std::string& description) |
| 203 | 147 | return *this; |
| 204 | 148 | } |
| 205 | 149 | |
| 206 | -CreateSchedule& CreateSchedule::setCommand(const ScheduleCommand& command) | |
| 150 | +CreateSchedule& CreateSchedule::setCommand(const Action& command) | |
| 207 | 151 | { |
| 208 | 152 | request["command"] = command.toJson(); |
| 209 | 153 | return *this; | ... | ... |
src/StateTransaction.cpp
| ... | ... | @@ -83,10 +83,10 @@ bool StateTransaction::commit(bool trimRequest) |
| 83 | 83 | return true; |
| 84 | 84 | } |
| 85 | 85 | |
| 86 | -ScheduleCommand StateTransaction::toScheduleCommand() | |
| 86 | +Action StateTransaction::toAction() | |
| 87 | 87 | { |
| 88 | 88 | nlohmann::json command {{"method", "PUT"}, {"address", commands.combinedPath(path)}, {"body", request}}; |
| 89 | - return ScheduleCommand(command); | |
| 89 | + return Action(command); | |
| 90 | 90 | } |
| 91 | 91 | |
| 92 | 92 | StateTransaction& StateTransaction::setOn(bool on) | ... | ... |
test/CMakeLists.txt
| ... | ... | @@ -54,7 +54,7 @@ set(TEST_SOURCES |
| 54 | 54 | test_SimpleColorHueStrategy.cpp |
| 55 | 55 | test_SimpleColorTemperatureStrategy.cpp |
| 56 | 56 | test_StateTransaction.cpp |
| 57 | - test_TimePattern.cpp "test_NewDeviceList.cpp") | |
| 57 | + test_TimePattern.cpp "test_NewDeviceList.cpp" "test_Action.cpp") | |
| 58 | 58 | |
| 59 | 59 | set(HuePlusPlus_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include") |
| 60 | 60 | ... | ... |
test/test_Action.cpp
0 → 100644
| 1 | +/** | |
| 2 | + \file test_Action.cpp | |
| 3 | + Copyright Notice\n | |
| 4 | + Copyright (C) 2020 Jan Rogall - developer\n | |
| 5 | + | |
| 6 | + This file is part of hueplusplus. | |
| 7 | + | |
| 8 | + hueplusplus is free software: you can redistribute it and/or modify | |
| 9 | + it under the terms of the GNU Lesser General Public License as published by | |
| 10 | + the Free Software Foundation, either version 3 of the License, or | |
| 11 | + (at your option) any later version. | |
| 12 | + | |
| 13 | + hueplusplus is distributed in the hope that it will be useful, | |
| 14 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | + GNU Lesser General Public License for more details. | |
| 17 | + | |
| 18 | + You should have received a copy of the GNU Lesser General Public License | |
| 19 | + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>. | |
| 20 | +**/ | |
| 21 | + | |
| 22 | +#include <hueplusplus/Action.h> | |
| 23 | +#include <hueplusplus/HueException.h> | |
| 24 | + | |
| 25 | +#include <gtest/gtest.h> | |
| 26 | + | |
| 27 | +using namespace testing; | |
| 28 | +using hueplusplus::Action; | |
| 29 | + | |
| 30 | +TEST(Action, Constructor) | |
| 31 | +{ | |
| 32 | + const std::string address = "/api/abcd/test"; | |
| 33 | + const nlohmann::json body = {{"test", "value"}}; | |
| 34 | + const nlohmann::json json = {{"address", address}, {"method", "PUT"}, {"body", body}}; | |
| 35 | + Action command(json); | |
| 36 | + | |
| 37 | + EXPECT_EQ(address, command.getAddress()); | |
| 38 | + EXPECT_EQ(Action::Method::put, command.getMethod()); | |
| 39 | + EXPECT_EQ(body, command.getBody()); | |
| 40 | + EXPECT_EQ(json, command.toJson()); | |
| 41 | +} | |
| 42 | + | |
| 43 | +TEST(Action, getMethod) | |
| 44 | +{ | |
| 45 | + nlohmann::json json = {{"address", "/test"}, {"method", "PUT"}, {"body", {}}}; | |
| 46 | + EXPECT_EQ(Action::Method::put, Action(json).getMethod()); | |
| 47 | + json["method"] = "POST"; | |
| 48 | + EXPECT_EQ(Action::Method::post, Action(json).getMethod()); | |
| 49 | + json["method"] = "DELETE"; | |
| 50 | + EXPECT_EQ(Action::Method::deleteMethod, Action(json).getMethod()); | |
| 51 | + json["method"] = "unknown"; | |
| 52 | + EXPECT_THROW(Action(json).getMethod(), hueplusplus::HueException); | |
| 53 | +} | |
| 54 | + | |
| 55 | +TEST(Action, parseMethod) | |
| 56 | +{ | |
| 57 | + using M = Action::Method; | |
| 58 | + EXPECT_EQ(M::put, Action::parseMethod("PUT")); | |
| 59 | + EXPECT_EQ(M::post, Action::parseMethod("POST")); | |
| 60 | + EXPECT_EQ(M::deleteMethod, Action::parseMethod("DELETE")); | |
| 61 | + EXPECT_THROW(Action::parseMethod("unknown"), hueplusplus::HueException); | |
| 62 | +} | |
| 63 | + | |
| 64 | +TEST(Action, methodToString) | |
| 65 | +{ | |
| 66 | + using M = Action::Method; | |
| 67 | + EXPECT_EQ("POST", Action::methodToString(M::post)); | |
| 68 | + EXPECT_EQ("PUT", Action::methodToString(M::put)); | |
| 69 | + EXPECT_EQ("DELETE", Action::methodToString(M::deleteMethod)); | |
| 70 | +} | ... | ... |
test/test_Group.cpp
| ... | ... | @@ -253,15 +253,15 @@ TEST_F(GroupTest, setScene) |
| 253 | 253 | group.setScene(scene); |
| 254 | 254 | } |
| 255 | 255 | |
| 256 | -TEST_F(GroupTest, scheduleScene) | |
| 256 | +TEST_F(GroupTest, createSceneAction) | |
| 257 | 257 | { |
| 258 | 258 | const int id = 1; |
| 259 | 259 | expectGetState(id); |
| 260 | 260 | const Group group(id, commands, std::chrono::steady_clock::duration::max()); |
| 261 | 261 | const std::string scene = "testScene"; |
| 262 | 262 | nlohmann::json request = { {"scene", scene} }; |
| 263 | - ScheduleCommand command = group.scheduleScene(scene); | |
| 264 | - EXPECT_EQ(ScheduleCommand::Method::put, command.getMethod()); | |
| 263 | + hueplusplus::Action command = group.createSceneAction(scene); | |
| 264 | + EXPECT_EQ(hueplusplus::Action::Method::put, command.getMethod()); | |
| 265 | 265 | EXPECT_EQ("/api/" + getBridgeUsername() + "/groups/1/action", command.getAddress()); |
| 266 | 266 | EXPECT_EQ(request, command.getBody()); |
| 267 | 267 | } | ... | ... |
test/test_Schedule.cpp
| ... | ... | @@ -29,31 +29,6 @@ |
| 29 | 29 | using namespace hueplusplus; |
| 30 | 30 | using namespace testing; |
| 31 | 31 | |
| 32 | -TEST(ScheduleCommand, Constructor) | |
| 33 | -{ | |
| 34 | - const std::string address = "/api/abcd/test"; | |
| 35 | - const nlohmann::json body = {{"test", "value"}}; | |
| 36 | - const nlohmann::json json = {{"address", address}, {"method", "PUT"}, {"body", body}}; | |
| 37 | - ScheduleCommand command(json); | |
| 38 | - | |
| 39 | - EXPECT_EQ(address, command.getAddress()); | |
| 40 | - EXPECT_EQ(ScheduleCommand::Method::put, command.getMethod()); | |
| 41 | - EXPECT_EQ(body, command.getBody()); | |
| 42 | - EXPECT_EQ(json, command.toJson()); | |
| 43 | -} | |
| 44 | - | |
| 45 | -TEST(ScheduleCommand, getMethod) | |
| 46 | -{ | |
| 47 | - nlohmann::json json = {{"address", "/test"}, {"method", "PUT"}, {"body", {}}}; | |
| 48 | - EXPECT_EQ(ScheduleCommand::Method::put, ScheduleCommand(json).getMethod()); | |
| 49 | - json["method"] = "POST"; | |
| 50 | - EXPECT_EQ(ScheduleCommand::Method::post, ScheduleCommand(json).getMethod()); | |
| 51 | - json["method"] = "DELETE"; | |
| 52 | - EXPECT_EQ(ScheduleCommand::Method::deleteMethod, ScheduleCommand(json).getMethod()); | |
| 53 | - json["method"] = "unknown"; | |
| 54 | - EXPECT_THROW(ScheduleCommand(json).getMethod(), HueException); | |
| 55 | -} | |
| 56 | - | |
| 57 | 32 | class ScheduleTest : public Test |
| 58 | 33 | { |
| 59 | 34 | protected: |
| ... | ... | @@ -125,10 +100,10 @@ TEST_F(ScheduleTest, getCommand) |
| 125 | 100 | scheduleState["command"] = {{"address", addr}, {"body", body}, {"method", "PUT"}}; |
| 126 | 101 | expectGetState(id); |
| 127 | 102 | const Schedule schedule(id, commands, std::chrono::seconds(0)); |
| 128 | - ScheduleCommand command = schedule.getCommand(); | |
| 103 | + hueplusplus::Action command = schedule.getCommand(); | |
| 129 | 104 | EXPECT_EQ(addr, command.getAddress()); |
| 130 | 105 | EXPECT_EQ(body, command.getBody()); |
| 131 | - EXPECT_EQ(ScheduleCommand::Method::put, command.getMethod()); | |
| 106 | + EXPECT_EQ(hueplusplus::Action::Method::put, command.getMethod()); | |
| 132 | 107 | } |
| 133 | 108 | |
| 134 | 109 | TEST_F(ScheduleTest, getTime) |
| ... | ... | @@ -224,7 +199,7 @@ TEST_F(ScheduleTest, setCommand) |
| 224 | 199 | const int id = 1; |
| 225 | 200 | expectGetState(id); |
| 226 | 201 | Schedule schedule(id, commands, std::chrono::steady_clock::duration::max()); |
| 227 | - const ScheduleCommand command({{"address", "abcd"}, {"body", {}}, {"method", "PUT"}}); | |
| 202 | + const hueplusplus::Action command({{"address", "abcd"}, {"body", {}}, {"method", "PUT"}}); | |
| 228 | 203 | nlohmann::json request = {{"command", command.toJson()}}; |
| 229 | 204 | nlohmann::json response = {{"success", {"/schedules/1/command", command.toJson()}}}; |
| 230 | 205 | EXPECT_CALL( |
| ... | ... | @@ -313,7 +288,7 @@ TEST(CreateSchedule, setDescription) |
| 313 | 288 | TEST(CreateSchedule, setCommand) |
| 314 | 289 | { |
| 315 | 290 | const nlohmann::json commandJson = {{"address", "/api/asdf"}, {"method", "PUT"}, {"body", {}}}; |
| 316 | - ScheduleCommand command {commandJson}; | |
| 291 | + hueplusplus::Action command {commandJson}; | |
| 317 | 292 | const nlohmann::json request = {{"command", commandJson}}; |
| 318 | 293 | EXPECT_EQ(request, CreateSchedule().setCommand(command).getRequest()); |
| 319 | 294 | } | ... | ... |
test/test_StateTransaction.cpp
| ... | ... | @@ -60,17 +60,17 @@ TEST(StateTransaction, commit) |
| 60 | 60 | } |
| 61 | 61 | } |
| 62 | 62 | |
| 63 | -TEST(StateTransaction, toScheduleCommand) | |
| 63 | +TEST(StateTransaction, toAction) | |
| 64 | 64 | { |
| 65 | 65 | auto handler = std::make_shared<MockHttpHandler>(); |
| 66 | 66 | HueCommandAPI commands(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler); |
| 67 | 67 | const std::string requestPath = "/api/" + getBridgeUsername() + "/path"; |
| 68 | 68 | nlohmann::json request = {{"on", false}, {"bri", 100}}; |
| 69 | 69 | |
| 70 | - ScheduleCommand command | |
| 71 | - = StateTransaction(commands, "/path", nullptr).setOn(false).setBrightness(100).toScheduleCommand(); | |
| 70 | + hueplusplus::Action command | |
| 71 | + = StateTransaction(commands, "/path", nullptr).setOn(false).setBrightness(100).toAction(); | |
| 72 | 72 | Mock::VerifyAndClearExpectations(handler.get()); |
| 73 | - EXPECT_EQ(ScheduleCommand::Method::put, command.getMethod()); | |
| 73 | + EXPECT_EQ(hueplusplus::Action::Method::put, command.getMethod()); | |
| 74 | 74 | EXPECT_EQ(request, command.getBody()); |
| 75 | 75 | EXPECT_EQ(requestPath, command.getAddress()); |
| 76 | 76 | } | ... | ... |