@jeremyckahn/farmhand
Version:
A farming game
99 lines (83 loc) • 2.61 kB
JavaScript
import { ACHIEVEMENT_COMPLETED } from '../../templates.js'
describe('updateAchievements', () => {
let updateAchievements
beforeAll(async () => {
vitest.resetModules()
vitest.mock('../../data/achievements.js', () => {
return {
default: [
{
id: 'test-achievement',
name: 'Test Achievement',
description: '',
rewardDescription: '',
condition: state => !state.conditionSatisfied,
reward: state => ({ ...state, conditionSatisfied: true }),
},
],
}
})
updateAchievements = (await vitest.importActual('./updateAchievements.js'))
.updateAchievements
})
describe('achievement was not previously met', () => {
describe('condition is not met', () => {
test('does not update state', () => {
const inputState = {
completedAchievements: {},
conditionSatisfied: true,
todaysNotifications: [],
}
const state = updateAchievements(inputState)
expect(state).toBe(inputState)
})
})
describe('condition is met', () => {
test('updates state', () => {
const inputState = {
completedAchievements: {},
conditionSatisfied: false,
todaysNotifications: [],
}
const state = updateAchievements(inputState)
expect(state).toMatchObject({
completedAchievements: { 'test-achievement': true },
conditionSatisfied: true,
todaysNotifications: [
{
message: ACHIEVEMENT_COMPLETED('', {
name: 'Test Achievement',
rewardDescription: '',
}),
severity: 'success',
},
],
})
})
})
})
describe('achievement was previously met', () => {
describe('condition is not met', () => {
test('does not update state', () => {
const inputState = {
completedAchievements: { 'test-achievement': true },
conditionSatisfied: true,
todaysNotifications: [],
}
const state = updateAchievements(inputState)
expect(state).toBe(inputState)
})
})
describe('condition is met', () => {
test('does not update state', () => {
const inputState = {
completedAchievements: { 'test-achievement': true },
conditionSatisfied: false,
todaysNotifications: [],
}
const state = updateAchievements(inputState)
expect(state).toBe(inputState)
})
})
})
})