@jeremyckahn/farmhand
Version:
A farming game
62 lines (52 loc) • 1.77 kB
JavaScript
import { testCrop, testItem } from '../../test-utils/index.js'
import { SCARECROW_ITEM_ID } from '../../constants.js'
import { fieldMode } from '../../enums.js'
import { getPlotContentFromItemId } from '../../utils/index.js'
import { setScarecrow } from './setScarecrow.js'
describe('setScarecrow', () => {
let state
beforeEach(() => {
state = {
field: [[null]],
fieldMode: fieldMode.SET_SCARECROW,
inventory: [testItem({ id: 'scarecrow', quantity: 1 })],
selectedItemId: SCARECROW_ITEM_ID,
}
})
describe('plot is not empty', () => {
test('does nothing', () => {
const inputState = { ...state, field: [[testCrop()]] }
state = setScarecrow(inputState, 0, 0)
expect(state).toEqual(inputState)
})
})
describe('plot is empty', () => {
test('sets scarecrow', () => {
const { inventory, field } = setScarecrow(state, 0, 0)
expect(inventory).toHaveLength(0)
expect(field[0][0]).toEqual(getPlotContentFromItemId('scarecrow'))
})
describe('multiple scarecrow units remaining', () => {
test('updates state', () => {
const { fieldMode: newFieldMode, selectedItemId } = setScarecrow(
{ ...state, inventory: [testItem({ id: 'scarecrow', quantity: 2 })] },
0,
0
)
expect(newFieldMode).toBe(fieldMode.SET_SCARECROW)
expect(selectedItemId).toBe(SCARECROW_ITEM_ID)
})
})
describe('one scarecrow unit remaining', () => {
test('updates state', () => {
const { fieldMode: newFieldMode, selectedItemId } = setScarecrow(
state,
0,
0
)
expect(newFieldMode).toBe(fieldMode.OBSERVE)
expect(selectedItemId).toBe('')
})
})
})
})