/** * @feature Check Out / Check In Flow * @see e2e/features/flows/check-out-check-in.feature */ import { describe, test } from 'vitest'; import { setupBrowser } from '../../support/browser'; import { waitForAppReady, seedItems } from '../../support/seed'; import { buildItem, buildCheckedOutItem } from '../../support/item-factory'; import { expectVisible } from '../../support/expect'; const { getPage } = setupBrowser(); describe('Check Out / Check In Flow', () => { test('check out an item', async () => { const page = getPage(); const item = buildItem({ name: 'Drill', category: 'Tools' }); await page.goto('/'); await waitForAppReady(page); await seedItems(page, [item]); await page.goto('/items'); await waitForAppReady(page); await page.getByText('Drill').click(); // 'Home' badge on item detail (not the location tree 'Home') await expectVisible(page.locator('main').getByText('Home').first()); await page.getByRole('button', { name: 'Check Out' }).click(); await page.locator('#co-reason').selectOption('lent'); await page.getByRole('button', { name: 'Confirm' }).click(); // Badge shows reason label "Lent" after checkout await expectVisible(page.locator('main').getByText('Lent').first()); }); test('check in a checked-out item shows check-in form', async () => { const page = getPage(); const item = buildCheckedOutItem({ name: 'Drill' }); await page.goto('/'); await waitForAppReady(page); await seedItems(page, [item]); await page.goto('/items'); await waitForAppReady(page); await page.getByText('Drill').click(); // buildCheckedOutItem sets reason 'in-use' → badge shows "In Use" await expectVisible(page.locator('main').getByText('In Use').first()); await expectVisible(page.getByRole('heading', { name: 'Check In' })); await expectVisible(page.getByText('Return to')); }); });