Les events se déroule bien comme il faut. Les aventuriers sont bien repasser en IsAvailable = true quand une quête se termine.
This commit is contained in:
parent
838f91ede7
commit
3ba8dad4a2
16 changed files with 310 additions and 68 deletions
3
Assets/_/Features/Tests/Editor.meta
Normal file
3
Assets/_/Features/Tests/Editor.meta
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: efcd90c5fc4a4d29a9edb30408d27e72
|
||||
timeCreated: 1760191011
|
||||
99
Assets/_/Features/Tests/Editor/QuestManagerTests.cs
Normal file
99
Assets/_/Features/Tests/Editor/QuestManagerTests.cs
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
using UnityEngine;
|
||||
using Quests.Runtime;
|
||||
using Core.Runtime;
|
||||
|
||||
namespace GuildTycoon.Tests.Editor
|
||||
{
|
||||
public class QuestManagerTests
|
||||
{
|
||||
private GameObject _gmGO;
|
||||
private GameObject _qmGO;
|
||||
private GameManager _gameManager;
|
||||
private QuestManager _questManager;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
// Create and initialize GameManager (Awake will set up facts dictionary)
|
||||
_gmGO = new GameObject("GameManager_Test");
|
||||
_gameManager = _gmGO.AddComponent<GameManager>();
|
||||
|
||||
// Ensure profile and base facts are set
|
||||
_gameManager.Profile = "UnitTestProfile";
|
||||
_gameManager.Fact = new FactDictionnary();
|
||||
GameManager.m_gameFacts = _gameManager.Fact; // ensure BaseMonobehaviour access works
|
||||
|
||||
// Pre-seed facts used by QuestManager
|
||||
_gameManager.Fact.SetFact("accepted_quests", new List<QuestClass>(), BaseMonobehaviour.FactPersistence.Normal);
|
||||
_gameManager.Fact.SetFact("events_quests_history", new Dictionary<Guid, List<QuestEventLog>>(), BaseMonobehaviour.FactPersistence.Normal);
|
||||
|
||||
// Create QuestManager
|
||||
_qmGO = new GameObject("QuestManager_Test");
|
||||
_questManager = _qmGO.AddComponent<QuestManager>();
|
||||
|
||||
// Initialize lists to avoid nulls and isolate from Start() DB usage
|
||||
_questManager.ActiveQuests = new List<QuestClass>();
|
||||
_questManager.CompletedQuests = new List<QuestClass>();
|
||||
_questManager.DisponibleQuests = new List<QuestClass>();
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
if (_qmGO != null) UnityEngine.Object.DestroyImmediate(_qmGO);
|
||||
if (_gmGO != null) UnityEngine.Object.DestroyImmediate(_gmGO);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CompletingQuest_MovesItFromActiveToCompleted_AndUpdatesFacts()
|
||||
{
|
||||
// Arrange: create a simple quest in progress
|
||||
var questId = Guid.NewGuid();
|
||||
var quest = new QuestClass(questId, "Test Quest", "Desc", "Obj", duration: 1, difficulty: QuestDifficultyEnum.Easy, reward: new List<Item.Runtime.ItemReward>(), minLevel: 1)
|
||||
{
|
||||
State = QuestStateEnum.InProgress,
|
||||
StartSeconds = 0,
|
||||
EndSeconds = 10,
|
||||
AssignedAdventurersID = new List<Guid>()
|
||||
};
|
||||
|
||||
_questManager.ActiveQuests.Add(quest);
|
||||
|
||||
// Seed facts with the same quest so QuestManager can update saved state
|
||||
var accepted = new List<QuestClass> { new QuestClass(questId, quest.Name, quest.Description, quest.Objective, quest.Duration, quest.Difficulty, quest.Rewards, quest.MinLevel) { State = QuestStateEnum.InProgress } };
|
||||
_gameManager.Fact.SetFact("accepted_quests", accepted, BaseMonobehaviour.FactPersistence.Normal);
|
||||
|
||||
QuestClass completedRaised = null;
|
||||
Action<QuestClass> handler = q => completedRaised = q;
|
||||
QuestManager.OnQuestCompleted += handler;
|
||||
|
||||
try
|
||||
{
|
||||
// Act: Directly complete the quest
|
||||
_questManager.CompleteQuest(quest, quest.AssignedAdventurersID);
|
||||
}
|
||||
finally
|
||||
{
|
||||
QuestManager.OnQuestCompleted -= handler; // ensure unsubscribe even if assertion fails
|
||||
}
|
||||
|
||||
// Assert: quest state and lists updated
|
||||
Assert.AreEqual(QuestStateEnum.Completed, quest.State, "La quête devrait être marquée comme complétée.");
|
||||
CollectionAssert.DoesNotContain(_questManager.ActiveQuests, quest, "La quête ne doit plus être dans la liste des quêtes actives.");
|
||||
CollectionAssert.Contains(_questManager.CompletedQuests, quest, "La quête devrait apparaître dans la liste des quêtes complétées.");
|
||||
|
||||
// Facts: accepted_quests should reflect Completed state for the same ID
|
||||
var saved = _gameManager.Fact.GetFact<List<QuestClass>>("accepted_quests");
|
||||
var savedQuest = saved.Find(q => q.ID == questId);
|
||||
Assert.IsNotNull(savedQuest, "La quête devrait être présente dans les faits 'accepted_quests'.");
|
||||
Assert.AreEqual(QuestStateEnum.Completed, savedQuest.State, "L'état sauvegardé de la quête devrait être 'Completed'.");
|
||||
|
||||
// Event notification raised
|
||||
Assert.IsNotNull(completedRaised, "Un événement OnQuestCompleted devrait être déclenché.");
|
||||
Assert.AreEqual(questId, completedRaised.ID, "L'événement devrait concerner la même quête.");
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/_/Features/Tests/Editor/QuestManagerTests.cs.meta
Normal file
3
Assets/_/Features/Tests/Editor/QuestManagerTests.cs.meta
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 64e828a55046493c82c79b4ed49e10ba
|
||||
timeCreated: 1760191011
|
||||
Loading…
Add table
Add a link
Reference in a new issue