initial commit
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
local test_helper = require('test.test_helper')
|
||||
local mocks = test_helper.mocks
|
||||
local utils = test_helper.utils
|
||||
|
||||
describe('Cat Module', function()
|
||||
local cat
|
||||
|
||||
setup(function()
|
||||
cat = require('src.cat.init')
|
||||
end)
|
||||
|
||||
it('should create cat with default personality', function()
|
||||
local c = cat.createCat(1, 'Test Cat', nil)
|
||||
assert.are.equal(1, c.id)
|
||||
assert.are.equal('Test Cat', c.name)
|
||||
assert.are.equal('social', c.personality.id)
|
||||
end)
|
||||
|
||||
it('should create cat with custom personality', function()
|
||||
local personality = { id = 'lone_wolf', color = { 0.5, 0.5, 0.6 } }
|
||||
local c = cat.createCat(2, 'Lone Cat', personality)
|
||||
assert.are.equal('lone_wolf', c.personality.id)
|
||||
assert.are.equal(0.5, c.personality.color[1])
|
||||
end)
|
||||
|
||||
it('should update cat needs over time', function()
|
||||
local c = cat.createCat(1, 'Test Cat', nil)
|
||||
local oldComfort = c.needs.comfort
|
||||
c:update(1.0)
|
||||
assert.is_true(c.needs.comfort < oldComfort)
|
||||
end)
|
||||
|
||||
it('should transition to sleep state', function()
|
||||
local c = cat.createCat(1, 'Test Cat', nil)
|
||||
c.needs.comfort = 0.1
|
||||
c:update(1.0)
|
||||
assert.is_true(c.isSleeping)
|
||||
assert.are.equal('sleep', c.state)
|
||||
end)
|
||||
|
||||
it('should wake up after sleep timer', function()
|
||||
local c = cat.createCat(1, 'Test Cat', nil)
|
||||
c.needs.comfort = 0.1
|
||||
c.isSleeping = true
|
||||
c.sleepTimer = 0.5
|
||||
c:update(1.0)
|
||||
assert.is_false(c.isSleeping)
|
||||
assert.are.equal('idle', c.state)
|
||||
end)
|
||||
|
||||
it('should move toward target position', function()
|
||||
local c = cat.createCat(1, 'Test Cat', nil)
|
||||
c.targetPosition = { x = 1, y = 0, z = 1 }
|
||||
local oldX = c.position.x
|
||||
local oldZ = c.position.z
|
||||
c.state = 'moving'
|
||||
c:update(0.1)
|
||||
assert.is_true(c.position.x ~= oldX or c.position.z ~= oldZ)
|
||||
end)
|
||||
|
||||
it('should handle zero distance movement', function()
|
||||
local c = cat.createCat(1, 'Test Cat', nil)
|
||||
c.targetPosition = { x = 0, y = 0, z = 0 }
|
||||
c.position = { x = 0, y = 0, z = 0 }
|
||||
c.state = 'moving'
|
||||
c:update(0.1)
|
||||
assert.is_true(true) -- Should not crash
|
||||
end)
|
||||
|
||||
it('should seek furniture based on needs', function()
|
||||
mocks.setupFilesystem()
|
||||
require('src.core')
|
||||
local c = cat.createCat(1, 'Test Cat', nil)
|
||||
c.needs.comfort = 0.1
|
||||
c:aiBehavior()
|
||||
-- Should set targetPosition if furniture found
|
||||
end)
|
||||
|
||||
it('should check personality compatibility', function()
|
||||
mocks.setupFilesystem()
|
||||
require('src.core')
|
||||
local c1 = cat.createCat(1, 'Test Cat 1', { id = 'social', compatibility = { ['social'] = 0.5 } })
|
||||
local c2 = cat.createCat(2, 'Test Cat 2', { id = 'social', compatibility = { ['social'] = 0.5 } })
|
||||
c1.position = { x = 0, y = 0, z = 0 }
|
||||
c2.position = { x = 0.5, y = 0, z = 0 }
|
||||
c1:updateNeeds()
|
||||
assert.is_true(c1.needs.social >= 0.7)
|
||||
end)
|
||||
|
||||
it('should handle incompatible cats', function()
|
||||
mocks.setupFilesystem()
|
||||
require('src.core')
|
||||
local c1 = cat.createCat(1, 'Test Cat 1', { id = 'lone_wolf', compatibility = { ['social'] = -0.5 } })
|
||||
local c2 = cat.createCat(2, 'Test Cat 2', { id = 'social' })
|
||||
c1.position = { x = 0, y = 0, z = 0 }
|
||||
c2.position = { x = 0.5, y = 0, z = 0 }
|
||||
local oldSocial = c1.needs.social
|
||||
c1:updateNeeds()
|
||||
assert.is_true(c1.needs.social < oldSocial)
|
||||
end)
|
||||
|
||||
it('should pet cat and increase mood', function()
|
||||
local c = cat.createCat(1, 'Test Cat', nil)
|
||||
local oldMood = c.mood
|
||||
c:pet()
|
||||
assert.is_true(c.mood > oldMood)
|
||||
end)
|
||||
|
||||
it('should serialize cat', function()
|
||||
local c = cat.createCat(1, 'Test Cat', nil)
|
||||
local serialized = c:serialize()
|
||||
assert.are.equal(1, serialized.id)
|
||||
assert.are.equal('Test Cat', serialized.name)
|
||||
assert.are.equal('social', serialized.personalityId)
|
||||
end)
|
||||
|
||||
it('should deserialize cat', function()
|
||||
mocks.setupFilesystem()
|
||||
require('src.core')
|
||||
local original = cat.createCat(1, 'Test Cat', nil)
|
||||
local serialized = original:serialize()
|
||||
local deserialized = cat.deserialize(serialized)
|
||||
assert.are.equal(original.id, deserialized.id)
|
||||
assert.are.equal(original.name, deserialized.name)
|
||||
end)
|
||||
|
||||
it('should handle nil personality in deserialize', function()
|
||||
local data = {
|
||||
id = 1,
|
||||
name = 'Test',
|
||||
personalityId = 'invalid',
|
||||
position = { x = 0, y = 0, z = 0 }
|
||||
}
|
||||
local c = cat.deserialize(data)
|
||||
assert.are_not.equal(nil, c)
|
||||
assert.are.equal('social', c.personality.id)
|
||||
end)
|
||||
|
||||
it('should get cat animation', function()
|
||||
local c = cat.createCat(1, 'Test Cat', nil)
|
||||
local anim = cat.getCatAnimation(c, 0)
|
||||
assert.are.equal('table', type(anim))
|
||||
assert.are.equal('number', type(anim.bounce))
|
||||
end)
|
||||
|
||||
it('should handle nil cat in animation', function()
|
||||
local anim = cat.getCatAnimation(nil, 0)
|
||||
assert.are.equal(0, anim.bounce)
|
||||
end)
|
||||
|
||||
it('should handle nil input in updateCats', function()
|
||||
cat.updateCats(0.1)
|
||||
assert.is_true(true) -- Should not crash
|
||||
end)
|
||||
end)
|
||||
Reference in New Issue
Block a user