Files
DarkflameServer/tests/dGameTests/dComponentsTests/AchievementVendorComponentTests.cpp

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
}