@jeremyckahn/farmhand
Version:
A farming game
73 lines (61 loc) • 2.26 kB
text/typescript
import { treeLifeStage } from '../enums.js'
import { getTreeLifeStage } from './getTreeLifeStage.js'
const { SEED, GROWING, GROWN, DEAD } = treeLifeStage
describe('getTreeLifeStage', () => {
test('maps a life cycle label to an image name chunk', () => {
const itemId = 'apple'
const daysSinceLastHarvest = 0
expect(getTreeLifeStage({ itemId, daysOld: 0, daysSinceLastHarvest })).toBe(
SEED
)
expect(getTreeLifeStage({ itemId, daysOld: 7, daysSinceLastHarvest })).toBe(
GROWING
)
expect(
getTreeLifeStage({ itemId, daysOld: 25, daysSinceLastHarvest })
).toBe(GROWN)
})
// apple's treeTimeline (src/data/trees/apple.ts) is [5, 5, 5, 5, 5]
// (GROWN from daysOld 25) with a separate lifespan of 200, so it becomes
// DEAD once daysOld reaches 25 + 200 = 225.
describe('a tree that has been GROWN long enough to die', () => {
test('is still GROWN right up until the full timeline sum', () => {
const itemId = 'apple'
const daysSinceLastHarvest = 0
expect(
getTreeLifeStage({ itemId, daysOld: 224, daysSinceLastHarvest })
).toBe(GROWN)
})
test('becomes DEAD once daysOld reaches the full timeline sum', () => {
const itemId = 'apple'
const daysSinceLastHarvest = 0
expect(
getTreeLifeStage({ itemId, daysOld: 225, daysSinceLastHarvest })
).toBe(DEAD)
expect(
getTreeLifeStage({ itemId, daysOld: 1000, daysSinceLastHarvest })
).toBe(DEAD)
})
})
describe('a tree instance with its own randomized lifespan', () => {
test('uses tree.lifespan instead of the species default', () => {
const itemId = 'apple'
const daysSinceLastHarvest = 0
const daysOld = 210 // Past a shortened lifespan, not the 225 default.
expect(
getTreeLifeStage({
itemId,
daysOld,
daysSinceLastHarvest,
// 25 (growth) + 185 (this tree's own, shorter lifespan) = 210.
lifespan: 185,
})
).toBe(DEAD)
// Same daysOld, but no override - falls back to the 225-day default,
// so it's still GROWN.
expect(getTreeLifeStage({ itemId, daysOld, daysSinceLastHarvest })).toBe(
GROWN
)
})
})
})