initial commit
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
local test_helper = require('test.test_helper')
|
||||
local mocks = test_helper.mocks
|
||||
|
||||
describe('Integration: Game Flow', function()
|
||||
local core, cat, house, ui, voxel, audio, json
|
||||
|
||||
setup(function()
|
||||
mocks.setupFilesystem()
|
||||
core = require('src.core')
|
||||
cat = require('src.cat.init')
|
||||
house = require('src.house.init')
|
||||
ui = require('src.ui.init')
|
||||
voxel = require('src.voxel.init')
|
||||
audio = require('src.audio.init')
|
||||
json = require('src.json')
|
||||
end)
|
||||
|
||||
it('should initialize full game', function()
|
||||
core.init()
|
||||
assert.are.equal(2, #core.state.cats)
|
||||
assert.are.equal(0, #core.state.furniture)
|
||||
end)
|
||||
|
||||
it('should add furniture and render', function()
|
||||
core.init()
|
||||
local furn = core.addFurniture('bed', { x = 0, y = 0, z = 0 })
|
||||
assert.are_not.equal(nil, furn)
|
||||
|
||||
local pass = test_helper.utils.createMockPass()
|
||||
voxel.renderFurniture(pass)
|
||||
end)
|
||||
|
||||
it('should update cats and render', function()
|
||||
core.init()
|
||||
cat.updateCats(0.1)
|
||||
|
||||
local pass = test_helper.utils.createMockPass()
|
||||
voxel.renderCats(pass)
|
||||
end)
|
||||
|
||||
it('should render complete UI', function()
|
||||
core.init()
|
||||
local pass = test_helper.utils.createMockPass()
|
||||
ui.renderHUD(pass)
|
||||
end)
|
||||
|
||||
it('should save and load game state', function()
|
||||
core.init()
|
||||
|
||||
-- Add some furniture
|
||||
core.addFurniture('bed', { x = 0, y = 0, z = 0 })
|
||||
core.addFurniture('cat_tree', { x = 1, y = 0, z = 1 })
|
||||
|
||||
-- Spawn more cats
|
||||
core.spawnCat()
|
||||
core.spawnCat()
|
||||
|
||||
-- Save
|
||||
local saveResult = core.saveGame()
|
||||
assert.is_true(saveResult)
|
||||
|
||||
-- Load
|
||||
local loadResult = core.loadGame()
|
||||
assert.is_true(loadResult)
|
||||
|
||||
-- Verify state
|
||||
assert.are.equal(4, #core.state.cats)
|
||||
assert.are.equal(2, #core.state.furniture)
|
||||
end)
|
||||
|
||||
it('should handle cat interaction with furniture', function()
|
||||
core.init()
|
||||
|
||||
local furn = core.addFurniture('bed', { x = 0, y = 0, z = 0 })
|
||||
local catObj = core.state.cats[1]
|
||||
|
||||
-- Move cat near furniture
|
||||
catObj.position = { x = 0.1, y = 0, z = 0.1 }
|
||||
|
||||
-- AI should seek furniture
|
||||
catObj:aiBehavior()
|
||||
|
||||
-- Should have target position
|
||||
assert.are_not.equal(nil, catObj.targetPosition)
|
||||
end)
|
||||
|
||||
it('should handle cat personality compatibility', function()
|
||||
core.init()
|
||||
|
||||
local c1 = core.state.cats[1]
|
||||
local c2 = utils.createMockCat({
|
||||
personality = { id = 'social', compatibility = { ['social'] = 0.5 } }
|
||||
})
|
||||
c2.position = { x = 0.5, y = 0, z = 0 }
|
||||
|
||||
table.insert(core.state.cats, c2)
|
||||
|
||||
c1:updateNeeds()
|
||||
|
||||
assert.is_true(c1.needs.social >= 0.7)
|
||||
end)
|
||||
|
||||
it('should handle furniture upgrades', function()
|
||||
core.init()
|
||||
|
||||
local furn = core.addFurniture('bed', { x = 0, y = 0, z = 0 })
|
||||
local originalContribution = furn.happinessContribution
|
||||
|
||||
furn:upgrade()
|
||||
assert.are.equal(2, furn.upgradeLevel)
|
||||
assert.is_true(furn.happinessContribution > originalContribution)
|
||||
|
||||
furn:upgrade()
|
||||
assert.are.equal(3, furn.upgradeLevel)
|
||||
|
||||
local result = furn:upgrade()
|
||||
assert.is_false(result)
|
||||
end)
|
||||
|
||||
it('should render audio on pet', function()
|
||||
local catObj = utils.createMockCat()
|
||||
local result = catObj:pet()
|
||||
assert.is_true(result)
|
||||
end)
|
||||
|
||||
it('should handle UI interaction', function()
|
||||
core.init()
|
||||
ui.showInventory = true
|
||||
|
||||
-- Simulate clicking inventory item
|
||||
local scale = 0.72
|
||||
local startX = 640 - 300 * scale + 20 * scale
|
||||
local startY = 360 - 200 * scale + 80 * scale
|
||||
local itemY = startY + (1 - 1) * 50 * scale
|
||||
|
||||
ui.handleMousePress(startX + 10, itemY + 10, 1)
|
||||
|
||||
assert.are_not.equal(nil, ui.selectedFurniture)
|
||||
end)
|
||||
|
||||
it('should handle empty cat list', function()
|
||||
core.state.cats = {}
|
||||
core.calculateHouseHappiness()
|
||||
assert.are.equal(0, core.state.house.totalHappiness)
|
||||
end)
|
||||
|
||||
it('should handle empty furniture list', function()
|
||||
core.state.furniture = {}
|
||||
local pass = test_helper.utils.createMockPass()
|
||||
voxel.renderFurniture(pass)
|
||||
end)
|
||||
|
||||
it('should handle nil core in modules', function()
|
||||
_G.core = nil
|
||||
cat.updateCats(0.1)
|
||||
house.checkCollision({ 0, 0, 0 }, { 1, 1, 1 })
|
||||
ui.renderHUD(test_helper.utils.createMockPass())
|
||||
end)
|
||||
|
||||
it('should handle nil core in house functions', function()
|
||||
_G.core = nil
|
||||
local furn = house.createFurniture(nil, { x = 0, y = 0, z = 0 })
|
||||
assert.are.equal(nil, furn)
|
||||
|
||||
local canPlace, reason = house.canPlaceFurniture({ 0, 0, 0 }, { 1, 1, 1 })
|
||||
assert.is_false(canPlace)
|
||||
end)
|
||||
|
||||
it('should handle nil core in ui functions', function()
|
||||
_G.core = nil
|
||||
ui.renderHUD(test_helper.utils.createMockPass())
|
||||
ui.renderInventory(test_helper.utils.createMockPass(), 1280, 720, 0.72)
|
||||
ui.renderCatLog(test_helper.utils.createMockPass(), 1280, 0.72)
|
||||
end)
|
||||
|
||||
it('should handle nil core in voxel functions', function()
|
||||
_G.core = nil
|
||||
voxel.renderWorld(test_helper.utils.createMockPass())
|
||||
voxel.renderFurniture(test_helper.utils.createMockPass())
|
||||
voxel.renderCats(test_helper.utils.createMockPass())
|
||||
end)
|
||||
|
||||
it('should handle nil core in audio functions', function()
|
||||
_G.core = nil
|
||||
audio.playPurr({ 0, 0, 0 })
|
||||
audio.playMeow({ 0, 0, 0 })
|
||||
audio.playClick()
|
||||
end)
|
||||
end)
|
||||
Reference in New Issue
Block a user