Commit 91594d4748aa6cf25992da1f53c7199e149d5ae3

Authored by Jojo-1000
Committed by Moritz Wirger
1 parent c26cf227

Add tests for Group getters.

include/hueplusplus/Group.h
@@ -36,7 +36,7 @@ namespace hueplusplus @@ -36,7 +36,7 @@ namespace hueplusplus
36 class Group 36 class Group
37 { 37 {
38 public: 38 public:
39 - Group(int id, const HueCommandAPI& commands); 39 + Group(int id, const HueCommandAPI& commands, std::chrono::steady_clock::duration refreshDuration);
40 40
41 virtual ~Group() = default; 41 virtual ~Group() = default;
42 42
src/Group.cpp
@@ -2,8 +2,8 @@ @@ -2,8 +2,8 @@
2 2
3 #include "hueplusplus/HueExceptionMacro.h" 3 #include "hueplusplus/HueExceptionMacro.h"
4 4
5 -hueplusplus::Group::Group(int id, const HueCommandAPI& commands)  
6 - : id(id), state("/groups/" + std::to_string(id), commands, std::chrono::seconds(10)), commands(commands) 5 +hueplusplus::Group::Group(int id, const HueCommandAPI& commands, std::chrono::steady_clock::duration refreshDuration)
  6 + : id(id), state("/groups/" + std::to_string(id), commands, refreshDuration), commands(commands)
7 { 7 {
8 state.Refresh(); 8 state.Refresh();
9 } 9 }
src/Hue.cpp
@@ -304,7 +304,7 @@ Group& Hue::getGroup(int id) @@ -304,7 +304,7 @@ Group& Hue::getGroup(int id)
304 std::cerr << "Error in Hue getGroup(): group with id " << id << " is not valid\n"; 304 std::cerr << "Error in Hue getGroup(): group with id " << id << " is not valid\n";
305 throw HueException(CURRENT_FILE_INFO, "Group id is not valid"); 305 throw HueException(CURRENT_FILE_INFO, "Group id is not valid");
306 } 306 }
307 - return groups.emplace(id, Group(id, commands)).first->second; 307 + return groups.emplace(id, Group(id, commands, stateCache.GetRefreshDuration())).first->second;
308 } 308 }
309 309
310 bool Hue::groupExists(int id) 310 bool Hue::groupExists(int id)
test/CMakeLists.txt
@@ -34,6 +34,7 @@ set(TEST_SOURCES @@ -34,6 +34,7 @@ set(TEST_SOURCES
34 test_BaseHttpHandler.cpp 34 test_BaseHttpHandler.cpp
35 test_ExtendedColorHueStrategy.cpp 35 test_ExtendedColorHueStrategy.cpp
36 test_ExtendedColorTemperatureStrategy.cpp 36 test_ExtendedColorTemperatureStrategy.cpp
  37 + test_Group.cpp
37 test_Hue.cpp 38 test_Hue.cpp
38 test_HueLight.cpp 39 test_HueLight.cpp
39 test_HueCommandAPI.cpp 40 test_HueCommandAPI.cpp
test/test_Group.cpp 0 → 100644
  1 +/**
  2 + \file test_Group.cpp
  3 + Copyright Notice\n
  4 + Copyright (C) 2020 Jan Rogall - developer\n
  5 + Copyright (C) 2020 Moritz Wirger - developer\n
  6 +
  7 + This file is part of hueplusplus.
  8 +
  9 + hueplusplus is free software: you can redistribute it and/or modify
  10 + it under the terms of the GNU Lesser General Public License as published by
  11 + the Free Software Foundation, either version 3 of the License, or
  12 + (at your option) any later version.
  13 +
  14 + hueplusplus is distributed in the hope that it will be useful,
  15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + GNU Lesser General Public License for more details.
  18 +
  19 + You should have received a copy of the GNU Lesser General Public License
  20 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  21 +**/
  22 +
  23 +#include <gtest/gtest.h>
  24 +
  25 +#include "testhelper.h"
  26 +
  27 +#include "hueplusplus/Group.h"
  28 +#include "mocks/mock_HttpHandler.h"
  29 +
  30 +using namespace hueplusplus;
  31 +using namespace testing;
  32 +
  33 +class GroupTest : public Test
  34 +{
  35 +protected:
  36 + const std::string groupName = "Group 1";
  37 + const std::string type = "Room";
  38 + const std::string roomType = "Bedroom";
  39 + const bool on = true;
  40 + const int bri = 254;
  41 + const int hue = 10000;
  42 + const int sat = 254;
  43 + const std::string effect = "none";
  44 + const float x = 0.5f;
  45 + const float y = 0.6f;
  46 + const int ct = 250;
  47 + const std::string alert = "none";
  48 + const std::string colormode = "ct";
  49 + const bool any_on = true;
  50 + const bool all_on = false;
  51 +
  52 + std::shared_ptr<MockHttpHandler> handler;
  53 + HueCommandAPI commands;
  54 + nlohmann::json groupState;
  55 +
  56 +protected:
  57 + GroupTest()
  58 + : handler(std::make_shared<MockHttpHandler>()),
  59 + commands(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler),
  60 + groupState({{"name", groupName}, {"type", type}, {"class", roomType}, {"lights", {"1", "2", "4"}},
  61 + {"action",
  62 + {{"on", on}, {"bri", bri}, {"hue", hue}, {"sat", sat}, {"effect", effect},
  63 + {"xy", nlohmann::json::array({x, y})}, {"ct", ct}, {"alert", alert}, {"colormode", colormode}}},
  64 + {"state", {{"any_on", any_on}, {"all_on", all_on}}}})
  65 + {}
  66 +
  67 + void expectGetState(int id)
  68 + {
  69 + EXPECT_CALL(*handler,
  70 + GETJson("/api/" + getBridgeUsername() + "/groups/" + std::to_string(id), nlohmann::json::object(),
  71 + getBridgeIp(), getBridgePort()))
  72 + .WillOnce(Return(groupState));
  73 + }
  74 +};
  75 +
  76 +TEST_F(GroupTest, Construtor)
  77 +{
  78 + {
  79 + const int id = 12;
  80 + expectGetState(id);
  81 + Group group(id, commands, std::chrono::seconds(0));
  82 + EXPECT_EQ(id, group.getId());
  83 + Mock::VerifyAndClearExpectations(handler.get());
  84 + }
  85 + {
  86 + const int id = 0;
  87 + expectGetState(id);
  88 + Group group(id, commands, std::chrono::seconds(0));
  89 + EXPECT_EQ(id, group.getId());
  90 + Mock::VerifyAndClearExpectations(handler.get());
  91 + }
  92 +}
  93 +
  94 +TEST_F(GroupTest, getName)
  95 +{
  96 + const int id = 1;
  97 + expectGetState(id);
  98 + Group group(id, commands, std::chrono::seconds(0));
  99 + EXPECT_EQ(groupName, Const(group).getName());
  100 +}
  101 +
  102 +TEST_F(GroupTest, getType)
  103 +{
  104 + const int id = 1;
  105 + expectGetState(id);
  106 + Group group(id, commands, std::chrono::seconds(0));
  107 + EXPECT_EQ(type, Const(group).getType());
  108 +}
  109 +
  110 +TEST_F(GroupTest, getLightIds)
  111 +{
  112 + const int id = 1;
  113 + expectGetState(id);
  114 + Group group(id, commands, std::chrono::seconds(0));
  115 + EXPECT_EQ(std::vector<int>({1, 2, 4}), Const(group).getLightIds());
  116 +}
  117 +
  118 +TEST_F(GroupTest, getRoomType)
  119 +{
  120 + const int id = 1;
  121 + expectGetState(id);
  122 + Group group(id, commands, std::chrono::seconds(0));
  123 + EXPECT_EQ(roomType, Const(group).getRoomType());
  124 +}
  125 +
  126 +TEST_F(GroupTest, getAllOn)
  127 +{
  128 + const int id = 1;
  129 + expectGetState(id);
  130 + Group group(id, commands, std::chrono::steady_clock::duration::max());
  131 + EXPECT_EQ(all_on, group.getAllOn());
  132 + EXPECT_EQ(all_on, Const(group).getAllOn());
  133 +}
  134 +
  135 +TEST_F(GroupTest, getAnyOn)
  136 +{
  137 + const int id = 1;
  138 + expectGetState(id);
  139 + Group group(id, commands, std::chrono::steady_clock::duration::max());
  140 + EXPECT_EQ(any_on, group.getAnyOn());
  141 + EXPECT_EQ(any_on, Const(group).getAnyOn());
  142 +}
  143 +
  144 +TEST_F(GroupTest, getActionOn)
  145 +{
  146 + const int id = 1;
  147 + expectGetState(id);
  148 + Group group(id, commands, std::chrono::steady_clock::duration::max());
  149 + EXPECT_EQ(on, group.getActionOn());
  150 + EXPECT_EQ(on, Const(group).getActionOn());
  151 +}
  152 +
  153 +TEST_F(GroupTest, getActionHueSaturation)
  154 +{
  155 + const int id = 1;
  156 + expectGetState(id);
  157 + Group group(id, commands, std::chrono::steady_clock::duration::max());
  158 + std::pair<uint16_t, uint8_t> hueSat{hue, sat};
  159 + EXPECT_EQ(hueSat, group.getActionHueSaturation());
  160 + EXPECT_EQ(hueSat, Const(group).getActionHueSaturation());
  161 +}
  162 +
  163 +TEST_F(GroupTest, getActionBrightness)
  164 +{
  165 + const int id = 1;
  166 + expectGetState(id);
  167 + Group group(id, commands, std::chrono::steady_clock::duration::max());
  168 + EXPECT_EQ(bri, group.getActionBrightness());
  169 + EXPECT_EQ(bri, Const(group).getActionBrightness());
  170 +}
  171 +
  172 +TEST_F(GroupTest, getActionColorTemperature)
  173 +{
  174 + const int id = 1;
  175 + expectGetState(id);
  176 + Group group(id, commands, std::chrono::steady_clock::duration::max());
  177 + EXPECT_EQ(ct, group.getActionColorTemperature());
  178 + EXPECT_EQ(ct, Const(group).getActionColorTemperature());
  179 +}
  180 +
  181 +TEST_F(GroupTest, getActionColorXY)
  182 +{
  183 + const int id = 1;
  184 + expectGetState(id);
  185 + Group group(id, commands, std::chrono::steady_clock::duration::max());
  186 + std::pair<float, float> xy{x, y};
  187 + EXPECT_EQ(xy, group.getActionColorXY());
  188 + EXPECT_EQ(xy, Const(group).getActionColorXY());
  189 +}
  190 +
  191 +TEST_F(GroupTest, getActionColorMode)
  192 +{
  193 + const int id = 1;
  194 + expectGetState(id);
  195 + Group group(id, commands, std::chrono::steady_clock::duration::max());
  196 + EXPECT_EQ(colormode, group.getActionColorMode());
  197 + EXPECT_EQ(colormode, Const(group).getActionColorMode());
  198 +}