- packages/shared: PlanningView/PlanningItemView, exported.
- apps/api: planning module (service + route), mounted at /planning.
GET /planning/current returns the authenticated user's household's
planning covering today, or null (no error) when there isn't one yet —
the expected state until planning creation exists.
- Tests: Mocha (apps/api/test/planning.test.ts) + Cucumber
(features/planning.feature), same conventions as auth.
- packages/express-tools: fixed AsyncRequestHandler/wrapAsyncHandler's
Locals generic constraint (Record<string, unknown> -> Record<string,
any>, matching Express's own Response<ResBody, LocalsObj>) — the first
endpoint combining requireAuth/AuthLocals with an async handler exposed
that the stricter constraint rejected plain interfaces Response itself
accepts fine.
- Docs: README.md ("Planning" section) + specs/backend-architecture.md.
First commit of the home-page-after-login feature (see plan discussed in
chat) — frontend layout/routing/HomePage follow in subsequent commits on
this same branch/PR.
24 lines
1.3 KiB
Gherkin
24 lines
1.3 KiB
Gherkin
Feature: Household weekly planning
|
|
As a signed-in user
|
|
I want to see my household's current planning
|
|
So that I know what meals are planned this week
|
|
|
|
Scenario: A visitor without a session cannot view the planning
|
|
When I request the current planning
|
|
Then the response status should be 401
|
|
And the response error code should be "NOT_AUTHENTICATED"
|
|
|
|
Scenario: A signed-in user with no planning yet sees an empty state
|
|
Given a profile already exists with email "alice@example.com" and password "correct-horse-battery-staple"
|
|
And I log in with email "alice@example.com" and password "correct-horse-battery-staple"
|
|
When I request the current planning
|
|
Then the response status should be 200
|
|
And the current planning response should be empty
|
|
|
|
Scenario: A signed-in user sees their household's current planning
|
|
Given a profile already exists with email "alice@example.com" and password "correct-horse-battery-staple"
|
|
And I log in with email "alice@example.com" and password "correct-horse-battery-staple"
|
|
And my household has a planning covering today with recipe "Ratatouille" on "monday" for "dinner"
|
|
When I request the current planning
|
|
Then the response status should be 200
|
|
And the current planning response should include recipe "Ratatouille" on "monday" for "dinner"
|