fix: guard quest source items without objectives

This commit is contained in:
Xurkon
2026-06-06 13:23:47 -05:00
parent 84fefc1c20
commit 00567c833f
2 changed files with 76 additions and 1 deletions
@@ -167,6 +167,81 @@ describe("QuestieDB learner mode merges learner overrides", function()
end)
end)
describe("QuestieDB quest build guards missing objective tables", function()
local originalImport
local originalQueryItemSingle
before_each(function()
dofile("Tests/wow_api_mock.lua")
local questieLib = {
GetTbcLevel = function()
return 1, 1
end,
}
local questieCorrections = {
hiddenQuests = {},
killCreditObjectiveFirst = {},
}
originalImport = QuestieLoader.ImportModule
QuestieLoader.ImportModule = function(self, name)
if name == "QuestieLib" then
return questieLib
end
if name == "QuestieCorrections" then
return questieCorrections
end
return originalImport(self, name)
end
dofile("Database/QuestieDB.lua")
dofile("Database/questDB.lua")
Questie.dbLearner.global.settings.enabled = true
Questie.dbLearner.global.settings.dataSourceMode = "learner"
QuestieDB.private.questCache = {}
QuestieDB.questDataOverrides = {}
originalQueryItemSingle = QuestieDB.QueryItemSingle
QuestieDB.QueryItemSingle = function(itemId, field)
if field == "name" then
return "Test Item " .. tostring(itemId)
end
return originalQueryItemSingle(itemId, field)
end
end)
after_each(function()
if originalQueryItemSingle then
QuestieDB.QueryItemSingle = originalQueryItemSingle
end
if originalImport then
QuestieLoader.ImportModule = originalImport
end
end)
it("does not crash when required source items exist but objectives are missing", function()
local questId = 900001
QuestieDB.questDataOverrides[questId] = {
[1] = "Source Item Quest",
[21] = {
[1] = 20482,
},
}
local ok, quest = pcall(function()
return QuestieDB:GetQuest(questId)
end)
assert.is_true(ok)
assert.is_table(quest)
assert.is_table(quest.SpecialObjectives)
assert.is_table(quest.SpecialObjectives[20482])
assert.equals("Test Item 20482", quest.SpecialObjectives[20482].Description)
end)
end)
describe("QuestieLearner quest accept resolution", function()
local QuestieLearner
local originalGetNumQuestLogEntries