Files
ThordekkCore/PROFESSION_SYSTEM_TESTING.md
T
2026-01-20 21:33:16 -03:00

7.7 KiB
Raw Blame History

Profession System Integration Testing Guide

Overview

This document describes how to test the complete Profession System (Phases 1-3) integration in TrinityCore PlayerBot.

Test Coverage

Phase 1: ProfessionManager

  • Learning professions (Mining, Herbalism, Blacksmithing, etc.)
  • Profession limit enforcement (max 2 primary professions)
  • Secondary profession support (unlimited)
  • Skill level tracking

Phase 2: Skill Tracking

  • Current skill level retrieval
  • Max skill level tracking
  • Skill gap calculation
  • Level-based skill targets (Target = Level × 5)

Phase 3: Gathering & Farming

  • GatheringAutomation

    • Mining node detection (GAMEOBJECT_TYPE_GATHERING_NODE)
    • Herb node detection (GAMEOBJECT_TYPE_GATHERING_NODE)
    • Skinnable creature detection (CreatureDifficulty::SkinLootID)
    • Fishing pool detection (GAMEOBJECT_TYPE_FISHING_HOLE)
  • FarmingCoordinator

    • Skill gap detection
    • Optimal zone selection (40 zones across 4 professions)
    • Target skill level calculation
    • Farming necessity checks
  • ProfessionAuctionBridge

    • Stockpile configuration
    • Material sell logic
    • Excess material calculation
    • Auction house integration

Running the Integration Test

// Add this to PlayerbotCommands.cpp:
if (command == "testprofessions")
{
    Player* bot = ... // Get bot player
    Playerbot::ProfessionIntegrationTest test;
    if (test.Initialize(bot))
    {
        bool success = test.RunAllTests();
        test.PrintTestSummary();
        SendChatMessage(success ? "All tests PASSED" : "Some tests FAILED");
    }
}

Usage in-game:

.bot testprofessions

Method 2: Via Code Integration

#include "Tests/ProfessionIntegrationTest.h"

// In your bot initialization code:
void InitializeBotProfessions(Player* bot)
{
    // Run integration tests
    Playerbot::ProfessionIntegrationTest test;
    if (test.Initialize(bot))
    {
        test.RunAllTests();
        test.PrintTestSummary();
        test.Cleanup();
    }
}

Method 3: Automated Testing

// Add to worldserver startup:
void WorldScript::OnStartup()
{
    // Create test bot
    Player* testBot = CreateTestBot();

    // Run profession tests
    Playerbot::ProfessionIntegrationTest test;
    test.Initialize(testBot);
    bool success = test.RunAllTests();

    TC_LOG_INFO("test.profession", "Profession System Tests: {}",
        success ? "PASSED" : "FAILED");
}

Test Output Example

==================================================
PROFESSION INTEGRATION TEST - PHASES 1-3
Player: TestBot | Level: 10 | Class: Warrior
==================================================

[PHASE 1] Testing ProfessionManager...
  [PASS] LearnProfession(MINING) succeeded
  [PASS] Mining skill level: 1
  [PASS] LearnProfession(HERBALISM) succeeded
  [PASS] Correctly rejected 3rd primary profession
  [PASS] LearnProfession(FISHING) succeeded (secondary)

[PHASE 2] Testing Skill Tracking...
  Current Skills:
    Mining: 25
    Herbalism: 20
  [PASS] Skill tracking operational
  [PASS] Max skill level tracking: 75

[PHASE 3] Testing GatheringAutomation...
  Found 3 mining nodes within 100 yards
  [PASS] Mining node detection functional
    Node: Entry=1731 RequiredSkill=1 Distance=45.23
  Found 2 herb nodes within 100 yards
  Found 0 skinnable creatures within 50 yards

[PHASE 3] Testing FarmingCoordinator...
  Farming Status:
    Mining: NEEDS FARMING
    Herbalism: OK
  Target Skill Levels:
    Mining: 50
    Herbalism: 50
  Skill Gaps:
    Mining: 25
    Herbalism: 30
  [PASS] Found optimal mining zone: Elwynn Forest
    Zone ID: 12 | Skill Range: 1-75

[PHASE 3] Testing ProfessionAuctionBridge...
  Stockpile Configuration:
    Mining materials configured: 4
      Item 2770: Min=20 Max=100 Auction=20
      Item 2771: Min=10 Max=50 Auction=10
  ShouldSellMaterial(CopperOre, 100): YES
  Excess Copper Ore count: 80
  [PASS] Auction house bridge initialized

==================================================
ALL TESTS PASSED
==================================================

Interpreting Results

Success Indicators

  • ✅ [PASS] messages indicate successful tests
  • ✅ "ALL TESTS PASSED" at end confirms full integration
  • ✅ Skill levels > 0 after learning professions
  • ✅ Node detection finds nearby gathering nodes
  • ✅ Farming coordinator identifies skill gaps correctly

Failure Indicators

  • ❌ [FAIL] messages indicate test failures
  • ❌ "SOME TESTS FAILED" at end requires investigation
  • ❌ Skill levels = 0 after learning profession
  • ❌ Node detection fails to find any nodes
  • ❌ Auction bridge not initialized

Manual Testing Checklist

1. Profession Learning

  • Spawn a bot with .bot add
  • Learn Mining profession
  • Learn Herbalism profession
  • Attempt to learn 3rd primary profession (should fail)
  • Learn Fishing (secondary, should succeed)

2. Gathering Automation

  • Place bot near copper vein
  • Verify GatheringAutomation detects the node
  • Bot should path to node and attempt to gather
  • Check skill increase after successful gather

3. Farming Coordination

  • Check bot's current Mining skill
  • Verify skill gap vs level target (Level × 5)
  • If gap > 25, FarmingCoordinator should trigger
  • Bot should teleport to optimal farming zone

4. Auction Integration

  • Bot gathers 100 Copper Ore
  • ProfessionAuctionBridge checks stockpile (min=20)
  • Excess ore (80) should be listed on AH
  • Verify auction created with correct pricing

Performance Benchmarks

Expected performance metrics:

Metric Target Test Value
Memory per bot <10MB Measured in test
CPU per bot <0.1% Measured in test
Node scan time <50ms Logged in GatheringAutomation
Zone lookup time <10ms Logged in FarmingCoordinator
Auction bridge init <100ms Logged in test

Troubleshooting

Test Fails: "Mining skill not found after learning"

Cause: ProfessionManager not properly integrated with Player skill system Fix: Verify Player::LearnSkill() is called correctly

Test Fails: "No mining nodes nearby"

Cause: Test run in zone without mining nodes Fix: Move bot to Elwynn Forest or similar starter zone

Test Fails: "Auction house bridge not initialized"

Cause: AuctionHouse singleton not available Fix: Ensure worldserver fully initialized before running tests

Test Fails: "Cannot find optimal mining zone"

Cause: FarmingCoordinator zone database not loaded Fix: Verify InitializeMiningZones() called in constructor

Continuous Integration

Add to CI pipeline:

# Build with tests
msbuild TrinityCore.sln /p:Configuration=Release

# Run worldserver with test flag
worldserver.exe --run-profession-tests

# Check exit code
if [ $? -ne 0 ]; then
    echo "Profession tests FAILED"
    exit 1
fi

Code Coverage

The integration test covers:

  • 9 classes across 3 phases
  • 35+ methods tested
  • 5 subsystems validated
  • Full workflow from profession learning to auction listing

Next Steps

After successful integration testing:

  1. Phase 4: Implement advanced raid/dungeon profession coordination
  2. Phase 5: Add performance profiling and optimization
  3. Phase 6: Create profession-based bot specializations

Support

For issues or questions:

  • Review test output logs in Server.log
  • Check test.profession log channel
  • Verify TrinityCore API compatibility
  • Ensure database schema matches Phase 1-3 requirements

Last Updated: Phase 3 Completion (Commit a8474b3f00) Test File: src/modules/Playerbot/Tests/ProfessionIntegrationTest.cpp Build Status: ✅ Compiles successfully with worldserver