UNPKG

@jeremyckahn/farmhand

Version:
127 lines (111 loc) 3.86 kB
import { OUT_OF_COW_FEED_NOTIFICATION } from '../../strings.js' import { COW_FEED_ITEM_ID, COW_WEIGHT_MULTIPLIER_MAXIMUM, COW_WEIGHT_MULTIPLIER_FEED_BENEFIT, } from '../../constants.js' import { generateCow } from '../../utils/index.js' import { processFeedingCows } from './processFeedingCows.js' describe('processFeedingCows', () => { let state beforeEach(() => { state = { cowInventory: [], inventory: [], } }) describe('player has no cow feed', () => { beforeEach(() => { state.cowInventory = [generateCow({ weightMultiplier: 1 })] state.newDayNotifications = [] }) test('cows weight goes down', () => { const { cowInventory: [{ weightMultiplier }], newDayNotifications, } = processFeedingCows(state) expect(weightMultiplier).toEqual(1 - COW_WEIGHT_MULTIPLIER_FEED_BENEFIT) expect(newDayNotifications).toEqual([ { message: OUT_OF_COW_FEED_NOTIFICATION, severity: 'error', }, ]) }) }) describe('player has cow feed', () => { beforeEach(() => { state.cowInventory = [ generateCow({ weightMultiplier: 1 }), generateCow({ weightMultiplier: 1 }), ] state.newDayNotifications = [] }) describe('there are more feed units than cows to feed', () => { test('units are distributed to cows', () => { state.inventory = [{ id: COW_FEED_ITEM_ID, quantity: 4 }] const { cowInventory, inventory: [{ quantity }], newDayNotifications, } = processFeedingCows(state) expect(cowInventory[0].weightMultiplier).toEqual( 1 + COW_WEIGHT_MULTIPLIER_FEED_BENEFIT ) expect(cowInventory[1].weightMultiplier).toEqual( 1 + COW_WEIGHT_MULTIPLIER_FEED_BENEFIT ) expect(quantity).toEqual(2) expect(newDayNotifications).toEqual([]) }) }) describe('there are more cows to feed than feed units', () => { test('units are distributed to cows and remainder goes hungry', () => { state.inventory = [{ id: COW_FEED_ITEM_ID, quantity: 1 }] const { cowInventory, inventory, newDayNotifications, } = processFeedingCows(state) expect(cowInventory[0].weightMultiplier).toEqual( 1 + COW_WEIGHT_MULTIPLIER_FEED_BENEFIT ) expect(cowInventory[1].weightMultiplier).toEqual( 1 - COW_WEIGHT_MULTIPLIER_FEED_BENEFIT ) expect(inventory).toHaveLength(0) expect(newDayNotifications).toEqual([ { message: OUT_OF_COW_FEED_NOTIFICATION, severity: 'error', }, ]) }) }) describe('mixed set of weightMultipliers with unsufficient cow feed units', () => { test('units are distributed to cows and remainder goes hungry', () => { state.cowInventory = [ generateCow({ weightMultiplier: COW_WEIGHT_MULTIPLIER_MAXIMUM }), generateCow({ weightMultiplier: COW_WEIGHT_MULTIPLIER_MAXIMUM }), generateCow({ weightMultiplier: 1 }), generateCow({ weightMultiplier: 1 }), ] state.inventory = [{ id: COW_FEED_ITEM_ID, quantity: 3 }] const { cowInventory, inventory } = processFeedingCows(state) expect(cowInventory[0].weightMultiplier).toEqual( COW_WEIGHT_MULTIPLIER_MAXIMUM ) expect(cowInventory[1].weightMultiplier).toEqual( COW_WEIGHT_MULTIPLIER_MAXIMUM ) expect(cowInventory[2].weightMultiplier).toEqual( 1 + COW_WEIGHT_MULTIPLIER_FEED_BENEFIT ) expect(cowInventory[3].weightMultiplier).toEqual( 1 - COW_WEIGHT_MULTIPLIER_FEED_BENEFIT ) expect(inventory).toHaveLength(0) }) }) }) })