269 lines
8.6 KiB
C++
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 */
|
|
/******************************************************************************/
|