Commit graph

3 commits

Author SHA1 Message Date
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