feat(suggestions): implement C2 meal suggestion screen (Issue #27) Co-authored-by: Marcel Raddatz <marcel@raddatz.cloud> Co-committed-by: Marcel Raddatz <marcel@raddatz.cloud>
49 lines
1.9 KiB
TypeScript
49 lines
1.9 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { render, screen, fireEvent } from '@testing-library/svelte';
|
|
import SuggestionContextBanner from './SuggestionContextBanner.svelte';
|
|
|
|
const weekPlan = {
|
|
id: 'plan-1',
|
|
weekStart: '2026-03-30',
|
|
slots: [
|
|
{ id: 's1', slotDate: '2026-03-30', recipe: { id: 'r1', name: 'Pasta', effort: 'Easy' } },
|
|
{ id: 's2', slotDate: '2026-03-31', recipe: { id: 'r2', name: 'Curry', effort: 'Hard' } }
|
|
]
|
|
};
|
|
|
|
describe('SuggestionContextBanner', () => {
|
|
it('renders the selected day label', () => {
|
|
render(SuggestionContextBanner, { props: { selectedDay: '2026-04-01', weekPlan } });
|
|
// Day label should be visible
|
|
expect(screen.getByTestId('context-banner')).toBeTruthy();
|
|
});
|
|
|
|
it('renders meals from the current week after expanding', async () => {
|
|
render(SuggestionContextBanner, { props: { selectedDay: '2026-04-01', weekPlan } });
|
|
// Banner starts collapsed — expand it first
|
|
const toggle = screen.getByRole('button', { name: /Filter|einblenden/i });
|
|
await fireEvent.click(toggle);
|
|
expect(screen.getByText(/Pasta/)).toBeTruthy();
|
|
expect(screen.getByText(/Curry/)).toBeTruthy();
|
|
});
|
|
|
|
it('starts collapsed and expands on toggle', async () => {
|
|
render(SuggestionContextBanner, { props: { selectedDay: '2026-04-01', weekPlan } });
|
|
const detail = screen.getByTestId('context-detail');
|
|
// Initially collapsed
|
|
expect(detail.hasAttribute('hidden')).toBe(true);
|
|
const toggle = screen.getByRole('button', { name: /Filter|einblenden/i });
|
|
await fireEvent.click(toggle);
|
|
// After toggle: expanded
|
|
expect(detail.hasAttribute('hidden')).toBe(false);
|
|
await fireEvent.click(toggle);
|
|
// After second toggle: collapsed again
|
|
expect(detail.hasAttribute('hidden')).toBe(true);
|
|
});
|
|
|
|
it('renders with no slots gracefully', () => {
|
|
render(SuggestionContextBanner, { props: { selectedDay: '2026-04-01', weekPlan: { ...weekPlan, slots: [] } } });
|
|
expect(screen.getByTestId('context-banner')).toBeTruthy();
|
|
});
|
|
});
|