UvosSmartHomeInterface/tests/unit/items/test_item.cpp
2026-04-09 16:18:17 +02:00

225 lines
5.6 KiB
C++

#include <QtTest/QtTest>
#include "items/item.h"
#include "items/itemstore.h"
#include "items/itemsource.h"
#include "items/itemloadersource.h"
class TestItem : public QObject
{
Q_OBJECT
private slots:
void initTestCase()
{
// Setup for all tests
}
void testItemCreation()
{
Item item(0, "test_item", 0);
QCOMPARE(item.getName(), QString("test_item"));
}
void testOverrideFunctionality()
{
Item item(0, "test_item", 0);
// Test override on/off
item.setOverride(true);
QVERIFY(item.getOverride());
item.setOverride(false);
QVERIFY(!item.getOverride());
}
void testItemValueTypes()
{
// Test default value type is BOOL
Item item(1, "test_item", 0);
QCOMPARE(item.getValueType(), ITEM_VALUE_BOOL);
// Test setting and getting value
item.setValueData(1);
QCOMPARE(item.getValue(), static_cast<uint8_t>(1));
item.setValueData(0);
QCOMPARE(item.getValue(), static_cast<uint8_t>(0));
}
void testItemId()
{
Item item(42, "test_item", 0);
QCOMPARE(item.id(), static_cast<uint32_t>(42));
}
void testItemGroupName()
{
Item item(1, "test_item", 0);
QCOMPARE(item.getGroupName(), QString("All")); // Default group
item.setGroupName("Living Room");
QCOMPARE(item.getGroupName(), QString("Living Room"));
}
void testItemHidden()
{
Item item(1, "test_item", 0);
QVERIFY(!item.isHidden());
item.setHidden(true);
QVERIFY(item.isHidden());
item.setHidden(false);
QVERIFY(!item.isHidden());
}
void testItemLoaded()
{
Item item(1, "test_item", 0);
QVERIFY(!item.getLoaded());
item.setLoaded(true);
QVERIFY(item.getLoaded());
}
void testItemJsonSerialization()
{
Item item(42, "test_item", 1);
item.setGroupName("TestGroup");
QJsonObject json;
item.store(json);
// Verify JSON contents
QCOMPARE(json["ItemId"].toDouble(), 42.0);
// Note: Name is only stored if changes.name is true
// Value is only stored if changes.value is true
}
void testItemJsonDeserialization()
{
QJsonObject json;
json["ItemId"] = 100;
json["Name"] = "loaded_item";
json["Value"] = 1;
json["GroupName"] = "Bedroom";
Item item;
item.load(json);
// Note: load() uses loadWithChanges which requires preserve=false to apply changes
// The id should be set
// The name should be set (since preserve defaults to false)
}
void testItemUpdateRequest()
{
Item item(1, "test_item", 0);
// Test creating update request
ItemUpdateRequest request = item.createValueUpdateRequest(ITEM_UPDATE_USER, false);
QVERIFY(request.type == ITEM_UPDATE_USER);
// Note: changes is not automatically set by createValueUpdateRequest
// The caller is expected to set the changes they want
QVERIFY(request.newActors.empty());
}
void testItemUpdateRequestWithActors()
{
Item item(1, "test_item", 0);
// Test creating update request with actors
ItemUpdateRequest request = item.createValueUpdateRequest(ITEM_UPDATE_USER, true);
QVERIFY(request.type == ITEM_UPDATE_USER);
// With actors=true, newActors should be populated
// Note: changes.actors is set by the caller, not by createValueUpdateRequest
}
void testItemHasActors()
{
Item item(1, "test_item", 0);
QVERIFY(!item.hasActors());
// Note: Adding actors requires a valid Actor pointer
}
void testItemRemoveAllActors()
{
Item item(1, "test_item", 0);
item.removeAllActors();
QVERIFY(!item.hasActors());
}
void testItemSetActorsActive()
{
Item item(1, "test_item", 0);
// Should not crash when no actors
item.setActorsActive(true);
item.setActorsActive(false);
}
void testItemDataChangeDetection()
{
ItemData data1(1, "item1", 0);
ItemData data2(1, "item1", 1);
// Test value change detection
ItemFieldChanges changes(true);
QVERIFY(data1.hasChanged(data2, changes));
// Test no change
changes = ItemFieldChanges(false);
QVERIFY(!data1.hasChanged(data2, changes));
}
void testItemDataNameChange()
{
ItemData data1(1, "item1", 0);
ItemData data2(1, "item2", 0);
ItemFieldChanges changes;
changes.name = true;
QVERIFY(data1.hasChanged(data2, changes));
}
void testItemDataGroupNameChange()
{
ItemData data1(1, "item1", 0);
data1.setGroupName("Group1");
ItemData data2(1, "item1", 0);
data2.setGroupName("Group2");
ItemFieldChanges changes;
changes.groupName = true;
QVERIFY(data1.hasChanged(data2, changes));
}
void testItemFieldChanges()
{
ItemFieldChanges changes(false);
QVERIFY(changes.isNone());
changes.value = true;
QVERIFY(!changes.isNone());
ItemFieldChanges allChanges(true);
QVERIFY(!allChanges.isNone());
}
void cleanupTestCase()
{
// Cleanup after all tests
}
};
QTEST_APPLESS_MAIN(TestItem)
#include "test_item.moc"