@jeremyckahn/farmhand
Version:
A farming game
86 lines (70 loc) • 2.28 kB
JavaScript
import { screen, waitFor } from '@testing-library/react'
import { saveDataStubFactory } from '../test-utils/stubs/saveDataStubFactory.js'
import { farmhandStub } from '../test-utils/stubs/farmhandStub.js'
import { endDay } from '../test-utils/ui.js'
describe('bootup', () => {
test('boots a fresh game when there is no save file', async () => {
await farmhandStub()
await waitFor(() => {
expect(screen.getByText('Day 1', { exact: false })).toBeInTheDocument()
})
})
test('boots from save file if there is one', async () => {
const loadedState = saveDataStubFactory({
dayCount: 10,
})
await farmhandStub({
localforage: {
getItem: () => Promise.resolve(loadedState),
setItem: (_key, data) => Promise.resolve(data),
},
})
await waitFor(() => {
expect(screen.getByText('Day 10', { exact: false })).toBeInTheDocument()
})
})
test('shows pending notification for loaded day', async () => {
const loadedState = saveDataStubFactory({
newDayNotifications: [
{
message: 'Pending notification',
severity: 'info',
},
],
})
await farmhandStub({
localforage: {
getItem: () => Promise.resolve(loadedState),
setItem: (_key, data) => Promise.resolve(data),
},
})
await waitFor(() => {
expect(screen.getByText('Pending notification')).toBeInTheDocument()
})
})
test('pending notifications for the loaded day are not shown again the next day', async () => {
const loadedState = saveDataStubFactory({
newDayNotifications: [
{
message: 'Pending notification',
severity: 'info',
},
],
})
await farmhandStub({
localforage: {
getItem: () => Promise.resolve(loadedState),
setItem: (_key, data) => Promise.resolve(data),
},
})
await waitFor(() => {
expect(screen.getByText('Pending notification')).toBeInTheDocument()
})
await waitFor(() => {
expect(screen.queryByText('Pending notification')).not.toBeInTheDocument()
})
await endDay()
// The notification was not shown again
expect(screen.queryByText('Pending notification')).not.toBeInTheDocument()
})
})