c7eeaf6a6b
Refactor admin fulfillment into focused modules.
...
CI / Lint, type check, unit tests, coverage (pull_request) Successful in 2m9s
CI / E2E browser tests (pull_request) Successful in 4m1s
Extract AdminOrderWorkflowService and status rules API; split AdminPage
into composables and components; share order status constants; update tests.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-28 14:34:03 +02:00
1c9269699e
Add admin order fulfillment tracking.
...
CI / Lint, type check, unit tests, coverage (pull_request) Failing after 1m50s
CI / E2E browser tests (pull_request) Failing after 1m38s
Register PostNord shipments, admin notes, and guarded status transitions
with customer emails. Expandable admin UI, V11 migration, serial E2E suite,
and AGENTS.md Docker-only E2E guidance.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 12:21:17 +02:00
93ece8128a
Use bilhej.se domain for dev test user email.
...
Aligns seeded and test login addresses with production branding while
keeping admin@bilhalsning.se for local docker admin seed only.
- Change test@bilhalsning.se to test@bilhej.se in dev migration and all tests
2026-05-21 15:14:11 +02:00
ebab892e93
feat: add PATCH /api/admin/orders/{id} for manual tracking entry
...
- UpdateTrackingRequest DTO: optional trackingId string (nullable —
allows clearing a tracking ID entered incorrectly)
- OrderService.updateTracking(orderId, trackingId): finds order,
sets trackingId via setter, saves entity — @PreUpdate fires to
update the updated_at timestamp automatically
- AdminController.PATCH /api/admin/orders/{id}: admin-only endpoint,
validates request body with @Valid, returns updated AdminOrderResponse
via the existing toAdminResponse() mapper
- AdminControllerTest: 5 new tests —
shouldReturn403WhenPatchingTrackingWithoutAuth,
shouldReturn403WhenPatchingTrackingAsNonAdmin,
shouldUpdateTrackingSuccessfully (verifies response id and trackingId),
shouldClearTrackingWhenNull (removes trackingId),
shouldReturn404WhenOrderNotFoundForTracking
2026-05-15 19:58:33 +02:00
5df7c97977
test: add AdminControllerTest with 10 role-enforcement and validation cases
...
- GET /api/admin/orders:
- shouldReturn403WhenNotAuthenticated
- shouldReturn403ForNonAdminUser (roles = USER)
- shouldReturnAllOrdersForAdmin (roles = ADMIN, checks all response fields
including email, plate, letterText, status)
- shouldReturnEmptyArrayWhenNoOrders
- PATCH /api/admin/orders/{id}/status:
- shouldReturn403WhenPatchingStatusWithoutAuth
- shouldReturn403WhenPatchingStatusAsNonAdmin
- shouldUpdateOrderStatusSuccessfully (verifies response id matches
path variable, status reflects update)
- shouldReturn400WhenStatusIsInvalid (invalid_status rejected by
@Pattern validator)
- shouldReturn400WhenStatusIsBlank
- shouldReturn404WhenOrderNotFound
- Helper createOrder(UUID orderId, String plate, String email,
OrderStatus) builds domain objects with User relationship for
realistic response mapping
2026-05-15 12:15:06 +02:00