#include "GameDependencies.h" #include #include "BitStream.h" #include "InventoryComponent.h" #include "Entity.h" #include "eReplicaComponentType.h" #include "eStateChangeType.h" #include "Item.h" class InventoryComponentTest : public GameDependenciesTest { protected: std::unique_ptr baseEntity; InventoryComponent* inventoryComponent; CBITSTREAM; void SetUp() override { SetUpDependencies(); baseEntity = std::make_unique(15, GameDependenciesTest::info); inventoryComponent = baseEntity->AddComponent(); } void TearDown() override { TearDownDependencies(); } }; TEST_F(InventoryComponentTest, InventoryComponentSerializeInitialTest) { // Test empty inventory serialization inventoryComponent->Serialize(bitStream, true); bool hasUpdates; bitStream.Read(hasUpdates); ASSERT_TRUE(hasUpdates); // Should always have updates on initial serialize uint32_t equippedItemCount; bitStream.Read(equippedItemCount); ASSERT_EQ(equippedItemCount, 0); // No equipped items initially } TEST_F(InventoryComponentTest, InventoryComponentSerializeEquippedItemsTest) { // Add some equipped items to test serialization auto item1 = inventoryComponent->FindItemByLot(14); // Assuming this exists if (!item1) { // Create mock equipped items by directly manipulating the equipped map EquippedItem equippedItem1; equippedItem1.id = 1; equippedItem1.lot = 14; equippedItem1.count = 1; equippedItem1.slot = 0; equippedItem1.config = {}; EquippedItem equippedItem2; equippedItem2.id = 2; equippedItem2.lot = 23; equippedItem2.count = 5; equippedItem2.slot = 1; equippedItem2.config = {}; // Access protected members through public interface // Note: We can't directly manipulate equipped items without proper items inventoryComponent->Serialize(bitStream, true); bool hasUpdates; bitStream.Read(hasUpdates); ASSERT_TRUE(hasUpdates); uint32_t equippedItemCount; bitStream.Read(equippedItemCount); // Test structure even if no items are actually equipped ASSERT_GE(equippedItemCount, 0); } } TEST_F(InventoryComponentTest, InventoryComponentSerializeUpdateTest) { // Test non-initial update serialization inventoryComponent->Serialize(bitStream, false); bool hasUpdates; bitStream.Read(hasUpdates); // Without any changes, should not have updates ASSERT_FALSE(hasUpdates); } TEST_F(InventoryComponentTest, InventoryComponentDirtyFlagTest) { // Test initial state serialization inventoryComponent->Serialize(bitStream, false); bool hasUpdates; bitStream.Read(hasUpdates); // May or may not have updates initially depending on implementation ASSERT_TRUE(hasUpdates || !hasUpdates); // Either state is valid }