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

276 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
### Method 1: Via GM Command (Recommended)
```cpp
// 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
```cpp
#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
```cpp
// 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:
```bash
# 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