View | Details | Raw Unified | Return to bug 38010
Collapse All | Expand All

(-)a/Koha/REST/V1/Acquisitions/Vendors.pm (-6 / +6 lines)
Lines 126-141 sub update { Link Here
126
126
127
    return try {
127
    return try {
128
        my $vendor_update = $c->req->json;
128
        my $vendor_update = $c->req->json;
129
        my $contacts      = delete $vendor_update->{contacts};
129
        my $contacts      = exists $vendor_update->{contacts}   ? delete $vendor_update->{contacts}   : undef;
130
        my $interfaces    = delete $vendor_update->{interfaces};
130
        my $interfaces    = exists $vendor_update->{interfaces} ? delete $vendor_update->{interfaces} : undef;
131
        my $aliases       = delete $vendor_update->{aliases};
131
        my $aliases       = exists $vendor_update->{aliases}    ? delete $vendor_update->{aliases}    : undef;
132
132
133
        $vendor->set_from_api($vendor_update);
133
        $vendor->set_from_api($vendor_update);
134
        $vendor->store();
134
        $vendor->store();
135
135
136
        $vendor->contacts( $contacts     || [] );
136
        $vendor->contacts( $contacts     || [] ) if defined $contacts;
137
        $vendor->aliases( $aliases       || [] );
137
        $vendor->aliases( $aliases       || [] ) if defined $aliases;
138
        $vendor->interfaces( $interfaces || [] );
138
        $vendor->interfaces( $interfaces || [] ) if defined $interfaces;
139
139
140
        return $c->render(
140
        return $c->render(
141
            status  => 200,
141
            status  => 200,
(-)a/t/db_dependent/api/v1/acquisitions_vendors.t (-5 / +89 lines)
Lines 151-157 subtest 'get() test' => sub { Link Here
151
151
152
subtest 'add() tests' => sub {
152
subtest 'add() tests' => sub {
153
153
154
    plan tests => 16;
154
    plan tests => 17;
155
155
156
    $schema->storage->txn_begin;
156
    $schema->storage->txn_begin;
157
157
Lines 220-231 subtest 'add() tests' => sub { Link Here
220
        ]
220
        ]
221
    );
221
    );
222
222
223
    subtest 'relationships contracts, interfaces, aliases' => sub {
224
        plan tests => 32;
225
        my $vendor    = { name => 'another vendor', contacts => [], interfaces => [], aliases => [] };
226
        my $vendor_id = $t->post_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors" => json => $vendor )
227
            ->status_is( 201, 'REST3 .2.1' )->json_is( '/name' => $vendor->{name} )
228
229
            # FIXME Maybe we expect instead
230
            # ->json_is( '/contacts' => [] )->json_is('/interfaces' => [], '/aliases' => [] );
231
            ->json_hasnt('/contacts')->json_hasnt('/interfaces')->json_hasnt('/aliases')->tx->res->json->{id};
232
        $t->get_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/" . $vendor_id )->status_is(200)
233
            ->json_hasnt('/contacts')->json_hasnt('/interfaces')->json_hasnt('/aliases');
234
235
        $t->get_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/"
236
                . $vendor_id => { 'x-koha-embed' => 'contacts,interfaces,aliases' } )->status_is(200)
237
            ->json_is( '/contacts', [] )->json_is( '/interfaces', [] )->json_is( '/aliases', [] );
238
239
        $vendor = {
240
            name       => 'yet another vendor', contacts => [ { name => 'contact name' } ],
241
            interfaces => [ { name => 'interface name' } ], aliases => [ { alias => 'foo' } ]
242
        };
243
        $vendor_id = $t->post_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors" => json => $vendor )
244
            ->status_is( 201, 'REST3 .2.1' )->json_is( '/name' => $vendor->{name} )
245
246
            # FIXME Maybe we expect instead
247
            # ->json_is( '/contacts' => [] )->json_is('/interfaces' => [], '/aliases' => [] );
248
            ->json_hasnt('/contacts')->json_hasnt('/interfaces')->json_hasnt('/aliases')->tx->res->json->{id};
249
250
        $t->get_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/" . $vendor_id )->status_is(200)
251
            ->json_hasnt('/contacts')->json_hasnt('/interfaces')->json_hasnt('/aliases');
252
253
        $t->get_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/"
254
                . $vendor_id => { 'x-koha-embed' => 'contacts,interfaces,aliases' } )->status_is(200)
255
            ->json_has('/contacts/0/name')->json_has('/interfaces/0/name')->json_has('/aliases/0/alias');
256
    };
257
223
    $schema->storage->txn_rollback;
258
    $schema->storage->txn_rollback;
224
};
259
};
225
260
226
subtest 'update() tests' => sub {
261
subtest 'update() tests' => sub {
227
262
228
    plan tests => 15;
263
    plan tests => 16;
229
264
230
    $schema->storage->txn_begin;
265
    $schema->storage->txn_begin;
231
266
Lines 294-305 subtest 'update() tests' => sub { Link Here
294
    $t->put_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/"
329
    $t->put_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/"
295
            . $non_existent_id => json => $vendor_with_updated_field )->status_is(404);
330
            . $non_existent_id => json => $vendor_with_updated_field )->status_is(404);
296
331
297
    $schema->storage->txn_rollback;
298
299
    # Wrong method (POST)
332
    # Wrong method (POST)
300
    $t->post_ok(
333
    $t->post_ok(
301
        "//$auth_userid:$password@/api/v1/acquisitions/vendors/" . $vendor->id => json => $vendor_with_updated_field )
334
        "//$auth_userid:$password@/api/v1/acquisitions/vendors/" . $vendor->id => json => $vendor_with_updated_field )
302
        ->status_is(404);
335
        ->status_is(404);
336
337
    subtest 'relationships contracts, interfaces, aliases' => sub {
338
        plan tests => 30;
339
        my $vendor = $builder->build_object( { class => 'Koha::Acquisition::Booksellers' } );
340
        $vendor->contacts( [] );
341
        $vendor->interfaces( [] );
342
        $vendor->aliases( [] );
343
344
        $t->get_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/"
345
                . $vendor->id => { 'x-koha-embed' => 'contacts,interfaces,aliases' } )->status_is(200)
346
            ->json_is( '/contacts', [] )->json_is( '/interfaces', [] )->json_is( '/aliases', [] );
347
348
        my $api_vendor = $vendor->to_api;
349
        delete $api_vendor->{id};
350
351
        $api_vendor->{contacts}   = [ { name  => 'contact name' } ];
352
        $api_vendor->{interfaces} = [ { name  => 'interface name' } ];
353
        $api_vendor->{aliases}    = [ { alias => 'foo' } ];
354
355
        $t->put_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/" . $vendor->id => json => $api_vendor )
356
            ->status_is( 200, 'REST3 .2.1' )->json_is( '/name' => $vendor->name )->json_hasnt('/contacts')
357
            ->json_hasnt('/interfaces')->json_hasnt('/aliases');
358
359
        $t->get_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/"
360
                . $vendor->id => { 'x-koha-embed' => 'contacts,interfaces,aliases' } )->status_is(200)
361
            ->json_has('/contacts/0/name')->json_has('/interfaces/0/name')->json_has('/aliases/0/alias');
362
363
        delete $api_vendor->{contacts};
364
        delete $api_vendor->{interfaces};
365
        delete $api_vendor->{aliases};
366
367
        $t->put_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/" . $vendor->id => json => $api_vendor )
368
            ->status_is( 200, 'REST3 .2.1' );
369
370
        $t->get_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/"
371
                . $vendor->id => { 'x-koha-embed' => 'contacts,interfaces,aliases' } )->status_is(200)
372
            ->json_has('/contacts/0/name')->json_has('/interfaces/0/name')->json_has('/aliases/0/alias');
373
374
        $api_vendor->{contacts}   = [];
375
        $api_vendor->{interfaces} = [];
376
        $api_vendor->{aliases}    = [];
377
378
        $t->put_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/" . $vendor->id => json => $api_vendor )
379
            ->status_is( 200, 'REST3 .2.1' );
380
381
        $t->get_ok( "//$auth_userid:$password@/api/v1/acquisitions/vendors/"
382
                . $vendor->id => { 'x-koha-embed' => 'contacts,interfaces,aliases' } )->status_is(200)
383
            ->json_is( '/contacts', [] )->json_is( '/interfaces', [] )->json_is( '/aliases', [] );
384
    };
385
386
    $schema->storage->txn_rollback;
387
303
};
388
};
304
389
305
subtest 'delete() tests' => sub {
390
subtest 'delete() tests' => sub {
306
- 

Return to bug 38010