UNPKG

@jeremyckahn/farmhand

Version:
98 lines (84 loc) 2.59 kB
import { testState } from '../../test-utils/index.js' import { getCropFromItemId } from '../../utils/index.js' import { plantInPlot } from './plantInPlot.js' vitest.mock('../../data/items.js') describe('plantInPlot', () => { describe('crop quantity > 1', () => { describe('plot is empty', () => { test('plants the crop', () => { const state = plantInPlot( testState({ field: [[]], inventory: [{ id: 'sample-crop-1-seed', quantity: 2 }], itemsSold: {}, selectedItemId: 'sample-crop-1-seed', }), 0, 0, 'sample-crop-1-seed' ) expect(state.field[0][0]).toEqual(getCropFromItemId('sample-crop-1')) expect(state.inventory[0].quantity).toEqual(1) }) }) describe('plot is not empty', () => { test('does not decrement crop quantity', () => { const state = plantInPlot( testState({ field: [[getCropFromItemId('sample-crop-1-seed')]], inventory: [{ id: 'sample-crop-1-seed', quantity: 2 }], selectedItemId: 'sample-crop-1-seed', }), 0, 0, 'sample-crop-1-seed' ) expect(state.inventory[0].quantity).toEqual(2) }) }) }) describe('crop quantity === 1', () => { test('resets selectedItemId state', () => { const state = plantInPlot( testState({ field: [[]], inventory: [{ id: 'sample-crop-1-seed', quantity: 1 }], itemsSold: {}, selectedItemId: 'sample-crop-1-seed', }), 0, 0, 'sample-crop-1-seed' ) expect(state.selectedItemId).toEqual('') }) }) describe('crop is not in inventory', () => { test('no-ops', () => { const inputState = testState({ field: [[]], inventory: [], selectedItemId: 'sample-crop-1-seed', }) const state = plantInPlot(inputState, 0, 0, 'sample-crop-1-seed') expect(inputState).toEqual(state) }) }) describe('crops with varieties', () => { test('plants a crop from a seed with varieties', () => { vitest.spyOn(Math, 'random').mockReturnValue(0) const state = plantInPlot( testState({ field: [[]], inventory: [{ id: 'grape-seed', quantity: 1 }], itemsSold: {}, selectedItemId: 'grape-seed', }), 0, 0, 'grape-seed' ) expect(state.field[0][0]).toEqual(getCropFromItemId('grape-chardonnay')) }) }) })