Bug 29668

Summary: Add API route to create a basket
Product: Koha Reporter: Julian Maurice <julian.maurice>
Component: REST APIAssignee: Julian Maurice <julian.maurice>
Status: Passed QA --- QA Contact: Laura Escamilla <Laura.escamilla>
Severity: enhancement    
Priority: P5 - low CC: fridolin.somers, jonathan.druart, Laura.escamilla, lucas, paul.derscheid, tomascohen
Version: Main   
Hardware: All   
OS: All   
GIT URL: Initiative type: ---
Sponsorship status: --- Comma delimited list of Sponsors:
Crowdfunding goal: 0 Patch complexity: Small patch
Documentation contact: Documentation submission:
Text to go in the release notes:
Version(s) released in:
Circulation function:
Bug Depends on: 38204    
Bug Blocks:    
Attachments: Bug 29668: Add API route to add a basket
Bug 29668: Add API route to add a basket
Bug 29668: Move tests
Bug 29668: Adapt to current guidelines
Bug 29668: Add API route to add a basket
Bug 29668: Move tests
Bug 29668: Adapt to current guidelines
Bug 29668: Add API route to add a basket
Bug 29668: Move tests
Bug 29668: Adapt to current guidelines

Description Julian Maurice 2021-12-09 07:26:06 UTC

    
Comment 1 Julian Maurice 2021-12-09 07:27:42 UTC
Created attachment 128371 [details] [review]
Bug 29668: Add API route to add a basket

Example usage:

POST /api/v1/acquisitions/baskets

{
    "vendor_id": 1,
    "name": "Basket #1",
}

Test plan:
1. Try requesting this endpoint with your favorite API tool
   (I recommend https://github.com/frigus02/RESTer)
2. Run `prove t/db_dependent/api/v1/acquisitions_baskets/post.t`
Comment 2 Paul Derscheid 2022-05-20 10:37:45 UTC
This isn't compatible with the current master branch because of some changes in the api directory structure, but I think you already know.

Some merge conflicts have to be resolved. There is the new route acquisitions/baskets/managers which probably wasn't there yet when this patch was written.
Comment 3 Fridolin Somers 2025-06-05 14:18:44 UTC
Must also be rebased now that Bug 38204 is in
Comment 4 Tomás Cohen Arazi (tcohen) 2025-06-06 15:16:06 UTC
Created attachment 183072 [details] [review]
Bug 29668: Add API route to add a basket

Example usage:

POST /api/v1/acquisitions/baskets

{
    "vendor_id": 1,
    "name": "Basket #1",
}

Test plan:
1. Try requesting this endpoint with your favorite API tool
   (I recommend https://github.com/frigus02/RESTer)
2. Run `prove t/db_dependent/api/v1/acquisitions_baskets/post.t`

Edit (tcohen): Re-did the commit with some fixes in the spec

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 5 Tomás Cohen Arazi (tcohen) 2025-06-06 15:16:09 UTC
Created attachment 183073 [details] [review]
Bug 29668: Move tests

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 6 Tomás Cohen Arazi (tcohen) 2025-06-06 15:16:12 UTC
Created attachment 183074 [details] [review]
Bug 29668: Adapt to current guidelines

The added patches make some changes:

* $c->req->json is used to access the request body, as explained by the
  Mojolicious OpenAPI plugin author it should be done.
* Instead of calling `$basket->to_api` we use the `$c->objects->to_api`
  helper which deals with calling context (embeds, etc). Otherwise it
  would require doing it manually if embeds are added.
* Tests are grouped together the same way the rest of them are.

To test:
1. Apply this patches
2. Run:
   $ ktd --shell
  k$ prove t/db_dependent/api/v1/acquisitions_baskets.t
=> SUCCESS: Tests pass!

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 7 Tomás Cohen Arazi (tcohen) 2025-11-05 16:51:13 UTC
Created attachment 189122 [details] [review]
Bug 29668: Add API route to add a basket

Example usage:

POST /api/v1/acquisitions/baskets

{
    "vendor_id": 1,
    "name": "Basket #1",
}

Test plan:
1. Try requesting this endpoint with your favorite API tool
   (I recommend https://github.com/frigus02/RESTer)
2. Run `prove t/db_dependent/api/v1/acquisitions_baskets/post.t`

Edit (tcohen): Re-did the commit with some fixes in the spec

Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Comment 8 Tomás Cohen Arazi (tcohen) 2025-11-05 16:51:15 UTC
Created attachment 189123 [details] [review]
Bug 29668: Move tests

Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Comment 9 Tomás Cohen Arazi (tcohen) 2025-11-05 16:51:17 UTC
Created attachment 189124 [details] [review]
Bug 29668: Adapt to current guidelines

The added patches make some changes:

* $c->req->json is used to access the request body, as explained by the
  Mojolicious OpenAPI plugin author it should be done.
* Instead of calling `$basket->to_api` we use the `$c->objects->to_api`
  helper which deals with calling context (embeds, etc). Otherwise it
  would require doing it manually if embeds are added.
* Tests are grouped together the same way the rest of them are.

To test:
1. Apply this patches
2. Run:
   $ ktd --shell
  k$ prove t/db_dependent/api/v1/acquisitions_baskets.t
=> SUCCESS: Tests pass!

Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Comment 10 Laura Escamilla 2025-11-06 14:56:24 UTC
Tests failed for me :(

kohadev-koha@kohadevbox:koha(main)$ prove t/db_dependent/api/v1/acquisitions_baskets.t
t/db_dependent/api/v1/acquisitions_baskets.t .. 1/4
    #   Failed test '403 Forbidden'
    #   at t/db_dependent/api/v1/acquisitions_baskets.t line 124.
    #          got: '404'
    #     expected: '403'

    #   Failed test '400 Bad Request'
    #   at t/db_dependent/api/v1/acquisitions_baskets.t line 134.
    #          got: '404'
    #     expected: '400'

    #   Failed test '201 Created'
    #   at t/db_dependent/api/v1/acquisitions_baskets.t line 136.
    #          got: '404'
    #     expected: '201'

    #   Failed test 'has value for JSON Pointer "/basket_id"'
    #   at t/db_dependent/api/v1/acquisitions_baskets.t line 136.

    #   Failed test 'exact match for JSON Pointer "/vendor_id"'
    #   at t/db_dependent/api/v1/acquisitions_baskets.t line 136.
    #          got: undef
    #     expected: '5'

    #   Failed test '201 Created'
    #   at t/db_dependent/api/v1/acquisitions_baskets.t line 146.
    #          got: '404'
    #     expected: '201'

    #   Failed test 'has value for JSON Pointer "/basket_id"'
    #   at t/db_dependent/api/v1/acquisitions_baskets.t line 146.

    #   Failed test 'exact match for JSON Pointer "/vendor_id"'
    #   at t/db_dependent/api/v1/acquisitions_baskets.t line 146.
    #          got: undef
    #     expected: '5'

    #   Failed test 'exact match for JSON Pointer "/name"'
    #   at t/db_dependent/api/v1/acquisitions_baskets.t line 146.
    #          got: undef
    #     expected: 'Basket #1'

    #   Failed test 'exact match for JSON Pointer "/vendor_note"'
    #   at t/db_dependent/api/v1/acquisitions_baskets.t line 146.
    #          got: undef
    #     expected: 'Vendor note'
    # Looks like you failed 10 tests of 14.

#   Failed test 'add() tests'
#   at t/db_dependent/api/v1/acquisitions_baskets.t line 149.
# Looks like you failed 1 test of 4.
t/db_dependent/api/v1/acquisitions_baskets.t .. Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/4 subtests

Test Summary Report
-------------------
t/db_dependent/api/v1/acquisitions_baskets.t (Wstat: 256 (exited 1) Tests: 4 Failed: 1)
  Failed test:  3
  Non-zero exit status: 1
Files=1, Tests=4,  3 wallclock secs ( 0.01 usr  0.00 sys +  2.92 cusr  0.17 csys =  3.10 CPU)
Result: FAIL
Comment 11 Tomás Cohen Arazi (tcohen) 2025-11-06 19:05:34 UTC
(In reply to Laura Escamilla from comment #10)
> Tests failed for me :(
> 
>     #          got: '404'
>     #     expected: '403'

Did you run `yarn api:bundle` before the tests?
Comment 12 Laura Escamilla 2025-11-06 20:17:02 UTC
No I didn't.... I will test this again!
Comment 13 Laura Escamilla 2025-11-06 20:19:30 UTC
Created attachment 189227 [details] [review]
Bug 29668: Add API route to add a basket

Example usage:

POST /api/v1/acquisitions/baskets

{
    "vendor_id": 1,
    "name": "Basket #1",
}

Test plan:
1. Try requesting this endpoint with your favorite API tool
   (I recommend https://github.com/frigus02/RESTer)
2. Run `prove t/db_dependent/api/v1/acquisitions_baskets/post.t`

Edit (tcohen): Re-did the commit with some fixes in the spec

Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Comment 14 Laura Escamilla 2025-11-06 20:19:33 UTC
Created attachment 189228 [details] [review]
Bug 29668: Move tests

Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Comment 15 Laura Escamilla 2025-11-06 20:19:35 UTC
Created attachment 189229 [details] [review]
Bug 29668: Adapt to current guidelines

The added patches make some changes:

* $c->req->json is used to access the request body, as explained by the
  Mojolicious OpenAPI plugin author it should be done.
* Instead of calling `$basket->to_api` we use the `$c->objects->to_api`
  helper which deals with calling context (embeds, etc). Otherwise it
  would require doing it manually if embeds are added.
* Tests are grouped together the same way the rest of them are.

To test:
1. Apply this patches
2. Run:
   $ ktd --shell
  k$ prove t/db_dependent/api/v1/acquisitions_baskets.t
=> SUCCESS: Tests pass!

Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Comment 16 Laura Escamilla 2025-11-06 20:20:14 UTC
Thank you, Tomas and Julian! This worked great so I'm passing QA.