https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=42443 --- Comment #36 from Tomás Cohen Arazi (tcohen) <tomascohen@gmail.com> --- Created attachment 204942 --> https://bugs.koha-community.org/bugzilla3/attachment.cgi?id=204942&action=edit Bug 42443: (QA follow-up) Use POST /transfers/{transfer_id}/cancellation Cancelling a transfer is a state change on the resource, not a deletion of it, so it should be modelled as an action sub-resource rather than a DELETE on the transfer itself. This aligns the endpoint with the API coding guidelines (REST2: non-CRUD actions use action sub-resources; REST3.2: conflicts return 409) and with the design used in bug 43454. Changes: - Replace DELETE /transfers/{transfer_id} with POST /transfers/{transfer_id}/cancellation - Rename the controller method delete() to cancel(), look the transfer up with objects->find_rs, and return 200 with the updated resource representation instead of 204 with an empty body - Make cancellation_reason optional, defaulting to 'Manual', matching the legacy returns.pl behaviour - Return 409 with a structured error_code ('already_arrived', 'already_cancelled') when the transfer cannot be cancelled, instead of a bare 400 - Update the transfers to receive page to POST to the new endpoint and to treat 404/409 as "already gone, refresh the table" - Adapt the tests accordingly, including coverage for the default reason - The *_date API attribute names introduced by this bug are kept, as they are the guideline-compliant form (REST1.3.4.1: *_date, not date_*) Test plan: 1. Apply patch 2. Run the tests: $ ktd --shell k$ prove t/db_dependent/api/v1/transfers.t => SUCCESS: Tests pass! 3. Rebuild and validate the API spec: k$ yarn api:bundle k$ prove xt/api.t => SUCCESS: Tests pass! 4. In the staff interface, go to Circulation -> Transfers to receive, click "Cancel transfer" on a row => SUCCESS: The transfer is cancelled and the row drops off the table 5. Cancel the same transfer again from a second tab => SUCCESS: The API returns 409 (already_cancelled) and the row is treated as already gone 6. Sign off :-D Assisted-by: Sonnet 4.6 (Anthropic) Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io> -- You are receiving this mail because: You are watching all bug changes.