mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-09-06 07:18:42 +00:00
116 lines
3.4 KiB
C++
116 lines
3.4 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include "AchievementVendorComponent.h"
|
|
#include "Entity.h"
|
|
#include "BitStream.h"
|
|
#include "GameDependencies.h"
|
|
#include "MessageType/Game.h"
|
|
|
|
class AchievementVendorComponentTest : public GameDependenciesTest {
|
|
protected:
|
|
void SetUp() override {
|
|
SetUpDependencies();
|
|
}
|
|
|
|
void TearDown() override {
|
|
TearDownDependencies();
|
|
}
|
|
};
|
|
|
|
TEST_F(AchievementVendorComponentTest, Serialize) {
|
|
Entity testEntity(15, info);
|
|
// Test initial update
|
|
AchievementVendorComponent achievementVendorComponent(&testEntity);
|
|
|
|
RakNet::BitStream bitStream;
|
|
achievementVendorComponent.Serialize(bitStream, true);
|
|
|
|
// Read the data manually to validate serialization format
|
|
bitStream.ResetReadPointer();
|
|
|
|
bool hasVendorInfo;
|
|
ASSERT_TRUE(bitStream.Read(hasVendorInfo));
|
|
EXPECT_TRUE(hasVendorInfo); // Should always be true for initial update
|
|
|
|
bool hasStandardCostItems;
|
|
ASSERT_TRUE(bitStream.Read(hasStandardCostItems));
|
|
EXPECT_TRUE(hasStandardCostItems); // Set by RefreshInventory
|
|
|
|
bool hasMultiCostItems;
|
|
ASSERT_TRUE(bitStream.Read(hasMultiCostItems));
|
|
EXPECT_FALSE(hasMultiCostItems); // Default state
|
|
}
|
|
|
|
TEST_F(AchievementVendorComponentTest, SerializeRegularUpdate) {
|
|
Entity testEntity(15, info);
|
|
AchievementVendorComponent achievementVendorComponent(&testEntity);
|
|
|
|
// Reset dirty flag by doing initial serialization
|
|
RakNet::BitStream initStream;
|
|
achievementVendorComponent.Serialize(initStream, true);
|
|
|
|
// Do a second regular serialization to clear the dirty flag
|
|
RakNet::BitStream clearStream;
|
|
achievementVendorComponent.Serialize(clearStream, false);
|
|
|
|
// Test regular update with no changes
|
|
RakNet::BitStream bitStream;
|
|
achievementVendorComponent.Serialize(bitStream, false);
|
|
|
|
bitStream.ResetReadPointer();
|
|
|
|
bool hasVendorInfo;
|
|
ASSERT_TRUE(bitStream.Read(hasVendorInfo));
|
|
EXPECT_FALSE(hasVendorInfo); // No dirty flags, so no data
|
|
}
|
|
|
|
TEST_F(AchievementVendorComponentTest, SerializeWithDirtyVendor) {
|
|
Entity testEntity(15, info);
|
|
AchievementVendorComponent achievementVendorComponent(&testEntity);
|
|
|
|
// Reset dirty flag
|
|
RakNet::BitStream initStream;
|
|
achievementVendorComponent.Serialize(initStream, true);
|
|
|
|
// Make vendor dirty by changing state
|
|
achievementVendorComponent.SetHasMultiCostItems(true);
|
|
|
|
RakNet::BitStream bitStream;
|
|
achievementVendorComponent.Serialize(bitStream, false);
|
|
|
|
bitStream.ResetReadPointer();
|
|
|
|
bool hasVendorInfo;
|
|
ASSERT_TRUE(bitStream.Read(hasVendorInfo));
|
|
EXPECT_TRUE(hasVendorInfo); // Should be true due to dirty flag
|
|
|
|
bool hasStandardCostItems;
|
|
ASSERT_TRUE(bitStream.Read(hasStandardCostItems));
|
|
EXPECT_TRUE(hasStandardCostItems);
|
|
|
|
bool hasMultiCostItems;
|
|
ASSERT_TRUE(bitStream.Read(hasMultiCostItems));
|
|
EXPECT_TRUE(hasMultiCostItems); // Changed to true
|
|
}
|
|
|
|
TEST_F(AchievementVendorComponentTest, SerializeAfterDirtyCleared) {
|
|
Entity testEntity(15, info);
|
|
AchievementVendorComponent achievementVendorComponent(&testEntity);
|
|
|
|
// Make dirty
|
|
achievementVendorComponent.SetHasMultiCostItems(true);
|
|
|
|
// Serialize once to clear dirty flag
|
|
RakNet::BitStream firstStream;
|
|
achievementVendorComponent.Serialize(firstStream, false);
|
|
|
|
// Serialize again - should show no vendor info
|
|
RakNet::BitStream secondStream;
|
|
achievementVendorComponent.Serialize(secondStream, false);
|
|
|
|
secondStream.ResetReadPointer();
|
|
|
|
bool hasVendorInfo;
|
|
ASSERT_TRUE(secondStream.Read(hasVendorInfo));
|
|
EXPECT_FALSE(hasVendorInfo); // Dirty flag should be cleared
|
|
} |