JD2022-TU1/main/extern/Hue/libhuestream/test/TestBridge.cpp

269 lines
8.6 KiB
C++

#include <huestream/config/HueConfig.h>
#include "gtest/gtest.h"
#include "huestream/common/data/Bridge.h"
#include "huestream/effect/animation/data/Playables/PlayableSequence.h"
#include "huestream/config/DefaultObjectBuilder.h"
using namespace huestream;
class TestBridge : public testing::Test {
protected:
BridgePtr bridge;
virtual void SetUp()
{
bridge = std::make_shared<Bridge>();
HueConfig::GetInstance()->SetHueSettings(std::make_shared<HueSettings>());
}
virtual void TearDown()
{
}
void SetValidBaseProperties() {
bridge->SetModelId("BSB002");
bridge->SetApiversion("1.17.0");
bridge->SetSoftwareVersion("01035797");
bridge->SetClientKey("DD129216F1A50E5D1C0CB356325745F2");
}
void SetOneGroup(int id) {
auto group = std::make_shared<Group>();
group->SetId(id);
auto groupsWithOneGroup = std::make_shared<GroupList>();
groupsWithOneGroup->push_back(group);
bridge->SetGroups(groupsWithOneGroup);
}
void SetTwoGroups(int id1, int id2) {
auto group1 = std::make_shared<Group>();
group1->SetId(id1);
auto group2 = std::make_shared<Group>();
group2->SetId(id2);
auto groupsWithTwoGroups = std::make_shared<GroupList>();
groupsWithTwoGroups->push_back(group1);
groupsWithTwoGroups->push_back(group2);
bridge->SetGroups(groupsWithTwoGroups);
}
void SetValidPropertiesUnselectedGroup(int id) {
SetValidBaseProperties();
SetOneGroup(id);
}
void SetValidPropertiesUnselectedGroups(int id1, int id2) {
SetValidBaseProperties();
SetTwoGroups(id1, id2);
}
void SetValidProperties() {
SetValidPropertiesUnselectedGroup(3);
bridge->SetSelectedGroup(3);
}
};
TEST_F(TestBridge, IsStreamable){
bridge->SetId("dsfsdf");
bridge->SetIpAddress("dsfsdf");
bridge->SetIsValidIp(true);
bridge->SetUser("dsfsdf");
bridge->SetIsAuthorized(true);
ASSERT_TRUE(bridge->IsConnectable());
SetValidProperties();
ASSERT_TRUE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_OK);
SetValidProperties();
bridge->SetModelId("BSB001");
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_INVALID_MODEL);
SetValidProperties();
bridge->SetModelId("BxB002");
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_INVALID_MODEL);
SetValidProperties();
bridge->SetModelId("BSB002");
bridge->SetApiversion("1.13.0");
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_INVALID_VERSION);
SetValidProperties();
bridge->SetSoftwareVersion("01035796");
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_INVALID_VERSION);
SetValidProperties();
bridge->SetSelectedGroup(0);
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_INVALID_GROUP_SELECTED);
SetValidProperties();
auto groupsWithNo = std::make_shared<GroupList>();
bridge->SetGroups(groupsWithNo);
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_NO_GROUP_AVAILABLE);
SetValidProperties();
auto groupsWithOne4 = std::make_shared<GroupList>();
auto group4 = std::make_shared<Group>();
group4->SetId(4);
groupsWithOne4->push_back(group4);
bridge->SetGroups(groupsWithOne4);
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_INVALID_GROUP_SELECTED);
SetValidProperties();
bridge->DeleteGroup(bridge->GetSelectedGroup());
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_NO_GROUP_AVAILABLE);
SetValidProperties();
bridge->SetClientKey("");
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_INVALID_CLIENTKEY);
SetValidProperties();
bridge->SetClientKey("012345678901234567890123456789012");
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_INVALID_CLIENTKEY);
SetValidProperties();
bridge->SetClientKey("0123456789012345678901234567890");
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_INVALID_CLIENTKEY);
SetValidProperties();
bridge->SetIsBusy(true);
ASSERT_FALSE(bridge->IsStreamable());
ASSERT_TRUE(bridge->GetStatus() == BRIDGE_BUSY);
}
TEST_F(TestBridge, IsConnectable) {
ASSERT_FALSE(bridge->IsConnectable());
bridge->SetId("dsfsdf");
ASSERT_FALSE(bridge->IsConnectable());
bridge->SetIpAddress("dsfsdf");
ASSERT_FALSE(bridge->IsConnectable());
bridge->SetIsValidIp(true);
ASSERT_FALSE(bridge->IsConnectable());
bridge->SetUser("dsfsdf");
ASSERT_FALSE(bridge->IsConnectable());
bridge->SetIsAuthorized(true);
ASSERT_TRUE(bridge->IsConnectable());
}
TEST_F(TestBridge, IsValidApiVersion) {
bridge->SetApiversion("1.18.0");
ASSERT_TRUE(bridge->IsValidApiVersion());
bridge->SetApiversion("2.0.0");
ASSERT_TRUE(bridge->IsValidApiVersion());
bridge->SetApiversion("1.14.1");
ASSERT_FALSE(bridge->IsValidApiVersion());
bridge->SetApiversion("0.0.0");
ASSERT_FALSE(bridge->IsValidApiVersion());
}
TEST_F(TestBridge, Serialize) {
bridge->SetId("00:11:22:33:44");
bridge->SetUser("HJD77jsjs-7883kkKS@");
bridge->SetClientKey("DD129216F1A50E5D1C0CB356325745F2");
{
auto group1 = std::make_shared<Group>();
group1->SetId(123);
group1->SetName("My entertainment setup1");
group1->AddLight(22, 0.1, 0.1);
group1->AddLight(12, 0.3, 0.2);
auto group2 = std::make_shared<Group>();
group2->SetId(13);
group2->SetName("My entertainment setup2");
group2->AddLight(11, 0.4, 0.4);
group2->AddLight(9, 0.4, 0.2);
auto groups = std::make_shared<GroupList>();
groups->push_back(group1);
groups->push_back(group2);
bridge->SetGroups(groups);
}
bridge->SetSelectedGroup(123);
bridge->SetIsValidIp(true);
bridge->SetIsAuthorized(true);
bridge->SetIpAddress("192.168.1.1");
JSONNode node;
bridge->Serialize(&node);
auto b = static_pointer_cast<Bridge>(Bridge::DeserializeFromJson(&node));
ASSERT_EQ(123, b->GetSelectedGroup());
ASSERT_EQ(true, b->IsValidIp());
ASSERT_EQ(true, b->IsAuthorized());
ASSERT_EQ("192.168.1.1", b->GetIpAddress());
ASSERT_EQ("00:11:22:33:44", b->GetId());
ASSERT_EQ("HJD77jsjs-7883kkKS@", b->GetUser());
ASSERT_EQ(123, b->GetGroups()->at(0)->GetId());
ASSERT_EQ("DD129216F1A50E5D1C0CB356325745F2", b->GetClientKey());
ASSERT_EQ("My entertainment setup1", b->GetGroups()->at(0)->GetName());
ASSERT_EQ(2, b->GetGroups()->at(0)->GetLights()->size());
ASSERT_EQ(22, b->GetGroups()->at(0)->GetLights()->at(0)->GetId());
ASSERT_EQ(0.1, b->GetGroups()->at(0)->GetLights()->at(0)->GetPosition().GetX());
ASSERT_EQ(0.1, b->GetGroups()->at(0)->GetLights()->at(0)->GetPosition().GetY());
ASSERT_EQ(12, b->GetGroups()->at(0)->GetLights()->at(1)->GetId());
ASSERT_EQ(0.3, b->GetGroups()->at(0)->GetLights()->at(1)->GetPosition().GetX());
ASSERT_EQ(0.2, b->GetGroups()->at(0)->GetLights()->at(1)->GetPosition().GetY());
ASSERT_EQ(13, b->GetGroups()->at(1)->GetId());
ASSERT_EQ("My entertainment setup2", b->GetGroups()->at(1)->GetName());
ASSERT_EQ(11, b->GetGroups()->at(1)->GetLights()->at(0)->GetId());
ASSERT_EQ(0.4, b->GetGroups()->at(1)->GetLights()->at(0)->GetPosition().GetX());
ASSERT_EQ(0.4, b->GetGroups()->at(1)->GetLights()->at(0)->GetPosition().GetY());
ASSERT_EQ(9, b->GetGroups()->at(1)->GetLights()->at(1)->GetId());
ASSERT_EQ(0.4, b->GetGroups()->at(1)->GetLights()->at(1)->GetPosition().GetX());
ASSERT_EQ(0.2, b->GetGroups()->at(1)->GetLights()->at(1)->GetPosition().GetY());
}
TEST_F(TestBridge, SelectFromOneGroup) {
auto groupId = 4;
SetValidPropertiesUnselectedGroup(groupId);
ASSERT_TRUE(bridge->GetGroup() == nullptr);
ASSERT_TRUE(bridge->SelectGroupIfOnlyOneOption());
ASSERT_TRUE(bridge->GetGroup() != nullptr);
ASSERT_TRUE(bridge->GetSelectedGroup() == groupId);
}
TEST_F(TestBridge, SelectFromMultipleGroups) {
auto groupId1 = 5;
auto groupId2 = 7;
SetValidPropertiesUnselectedGroups(groupId1, groupId2);
ASSERT_FALSE(bridge->SelectGroupIfOnlyOneOption());
ASSERT_TRUE(bridge->GetGroup() == nullptr);
ASSERT_FALSE(bridge->SelectGroup(9));
ASSERT_TRUE(bridge->GetGroup() == nullptr);
ASSERT_TRUE(bridge->SelectGroup(groupId1));
ASSERT_TRUE(bridge->GetGroup() != nullptr);
ASSERT_TRUE(bridge->GetSelectedGroup() == groupId1);
ASSERT_TRUE(bridge->SelectGroup(groupId2));
ASSERT_TRUE(bridge->GetGroup() != nullptr);
ASSERT_TRUE(bridge->GetSelectedGroup() == groupId2);
}
/******************************************************************************/
/* END OF FILE */
/******************************************************************************/