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

(-)a/Koha/Biblios.pm (+43 lines)
Lines 24-29 use Koha::Database; Link Here
24
24
25
use Koha::Biblio;
25
use Koha::Biblio;
26
use Koha::Libraries;
26
use Koha::Libraries;
27
use MARC::File::MiJ;
28
use MARC::File::USMARC;
29
use MARC::File::XML;
30
use MARC::Record;
27
31
28
use base qw(Koha::Objects);
32
use base qw(Koha::Objects);
29
33
Lines 35-40 Koha::Biblios - Koha Biblio object set class Link Here
35
39
36
=head2 Class methods
40
=head2 Class methods
37
41
42
=head3 print_collection
43
    my $collection_text = $result_set->print_collection($format)
44
45
Return a text representation of a collection (group of records) in the specified format.
46
Allowed formats are marcxml, mij, marc and txt. Defaults to marcxml.
47
48
=cut
49
50
sub print_collection {
51
    my ( $self, $format ) = @_;
52
53
    my ($start, $glue, $end, @parts);
54
55
    my %serializers = (
56
        'mij' => \&MARC::File::MiJ::encode,
57
        'marc' => \&MARC::File::USMARC::encode,
58
        'txt' => \&MARC::Record::as_formatted,
59
        'marcxml' => \&MARC::File::XML::record
60
    );
61
    if ($format eq 'mij') {
62
        $start = '[';
63
        $glue = ',';
64
        $end = ']';
65
    } elsif ($format eq 'marc') {
66
        $glue = "\n";
67
    } elsif ($format eq 'txt') {
68
        $glue = "\n----------\n";
69
    } else {
70
        $glue = '';
71
        $format = 'marcxml';
72
        $start = MARC::File::XML::header();
73
        $end = MARC::File::XML::footer();
74
    }
75
    while (my $biblio = $self->next) {
76
        push @parts, $serializers{$format}->($biblio->metadata->record);
77
    }
78
    return (defined $start ? $start : '').join($glue, @parts).(defined $end ? $end : '');
79
}
80
38
=head3 pickup_locations
81
=head3 pickup_locations
39
82
40
    my $biblios = Koha::Biblios->search(...);
83
    my $biblios = Koha::Biblios->search(...);
(-)a/Koha/REST/Plugin/Objects.pm (-2 / +6 lines)
Lines 48-54 the requested object. It passes through any embeds if specified. Link Here
48
48
49
    $app->helper(
49
    $app->helper(
50
        'objects.find' => sub {
50
        'objects.find' => sub {
51
            my ( $c, $result_set, $id ) = @_;
51
            my ( $c, $result_set, $id, $return_result_set ) = @_;
52
52
53
            my $attributes = {};
53
            my $attributes = {};
54
54
Lines 68-73 the requested object. It passes through any embeds if specified. Link Here
68
68
69
            return unless $object;
69
            return unless $object;
70
70
71
            return $object if $return_result_set;
72
71
            return $object->to_api({ embed => $embed, strings => $strings });
73
            return $object->to_api({ embed => $embed, strings => $strings });
72
        }
74
        }
73
    );
75
    );
Lines 89-95 shouldn't be called twice in it. Link Here
89
91
90
    $app->helper(
92
    $app->helper(
91
        'objects.search' => sub {
93
        'objects.search' => sub {
92
            my ( $c, $result_set ) = @_;
94
            my ( $c, $result_set, $return_result_set ) = @_;
93
95
94
            my $args = $c->validation->output;
96
            my $args = $c->validation->output;
95
            my $attributes = {};
97
            my $attributes = {};
Lines 205-210 shouldn't be called twice in it. Link Here
205
                }
207
                }
206
            );
208
            );
207
209
210
            return $objects if $return_result_set;
211
208
            return $objects->to_api({ embed => $embed, public => $is_public, strings => $strings });
212
            return $objects->to_api({ embed => $embed, public => $is_public, strings => $strings });
209
        }
213
        }
210
    );
214
    );
(-)a/Koha/REST/V1/Biblios.pm (+64 lines)
Lines 597-600 sub update { Link Here
597
        $c->unhandled_exception($_);
597
        $c->unhandled_exception($_);
598
    };
598
    };
599
}
599
}
600
601
=head3 list
602
603
Controller function that handles retrieving a single biblio object
604
605
=cut
606
607
sub list {
608
    my $c = shift->openapi->valid_input or return;
609
610
    my $attributes;
611
    $attributes = { prefetch => [ 'metadata' ] } # don't prefetch metadata if not needed
612
        unless $c->req->headers->accept =~ m/application\/json/;
613
614
    my $biblios = $c->objects->search( Koha::Biblios->new, 1 );
615
616
    return try {
617
618
        if ( $c->req->headers->accept =~ m/application\/json(;.*)?$/ ) {
619
            return $c->render(
620
                status => 200,
621
                json   => $biblios->to_api
622
            );
623
        } elsif ( $c->req->headers->accept =~ m/application\/marcxml\+xml(;.*)?$/ ) {
624
            $c->res->headers->add('Content-Type', 'application/marcxml+xml');
625
            return $c->render(
626
                status => 200,
627
                text   => $biblios->print_collection('marcxml')
628
            );
629
        } elsif ( $c->req->headers->accept =~ m/application\/marc-in-json(;.*)?$/ ) {
630
            $c->res->headers->add('Content-Type', 'application/marc-in-json');
631
            return $c->render(
632
                status => 200,
633
                data   => $biblios->print_collection('mij')
634
            );
635
        } elsif ( $c->req->headers->accept =~ m/application\/marc(;.*)?$/ ) {
636
            $c->res->headers->add('Content-Type', 'application/marc');
637
            return $c->render(
638
                status => 200,
639
                text   => $biblios->print_collection('marc')
640
            );
641
        } elsif ( $c->req->headers->accept =~ m/text\/plain(;.*)?$/ ) {
642
            return $c->render(
643
                status => 200,
644
                text   => $biblios->print_collection('txt')
645
            );
646
        } else {
647
            return $c->render(
648
                status  => 406,
649
                openapi => [
650
                    "application/json",
651
                    "application/marcxml+xml",
652
                    "application/marc-in-json",
653
                    "application/marc",
654
                    "text/plain"
655
                ]
656
            );
657
        }
658
    }
659
    catch {
660
        $c->unhandled_exception($_);
661
    };
662
}
663
600
1;
664
1;
(-)a/api/v1/swagger/paths/biblios.yaml (+57 lines)
Lines 56-61 Link Here
56
    x-koha-authorization:
56
    x-koha-authorization:
57
      permissions:
57
      permissions:
58
        editcatalogue: edit_catalogue
58
        editcatalogue: edit_catalogue
59
  get:
60
    x-mojo-to: Biblios#list
61
    operationId: listBiblio
62
    tags:
63
      - biblios
64
    summary: List biblios
65
    parameters:
66
      - $ref: "../swagger.yaml#/parameters/page"
67
      - $ref: "../swagger.yaml#/parameters/per_page"
68
      - $ref: "../swagger.yaml#/parameters/match"
69
      - $ref: "../swagger.yaml#/parameters/order_by"
70
      - $ref: "../swagger.yaml#/parameters/q_param"
71
      - $ref: "../swagger.yaml#/parameters/q_body"
72
      - $ref: "../swagger.yaml#/parameters/q_header"
73
      - $ref: "../swagger.yaml#/parameters/request_id_header"
74
    produces:
75
      - application/json
76
      - application/marcxml+xml
77
      - application/marc-in-json
78
      - application/marc
79
      - text/plain
80
    responses:
81
      "200":
82
        description: A list of biblios
83
      "401":
84
        description: Authentication required
85
        schema:
86
          $ref: "../swagger.yaml#/definitions/error"
87
      "403":
88
        description: Access forbidden
89
        schema:
90
          $ref: "../swagger.yaml#/definitions/error"
91
      "404":
92
        description: Biblio not found
93
        schema:
94
          $ref: "../swagger.yaml#/definitions/error"
95
      "406":
96
        description: Not acceptable
97
        schema:
98
          type: array
99
          description: Accepted content-types
100
          items:
101
            type: string
102
      "500":
103
        description: |
104
          Internal server error. Possible `error_code` attribute values:
105
106
          * `internal_server_error`
107
        schema:
108
          $ref: "../swagger.yaml#/definitions/error"
109
      "503":
110
        description: Under maintenance
111
        schema:
112
          $ref: "../swagger.yaml#/definitions/error"
113
    x-koha-authorization:
114
      permissions:
115
        catalogue: "1"
59
"/biblios/{biblio_id}":
116
"/biblios/{biblio_id}":
60
  get:
117
  get:
61
    x-mojo-to: Biblios#get
118
    x-mojo-to: Biblios#get
(-)a/t/db_dependent/Koha/Biblios.t (-1 / +40 lines)
Lines 19-25 Link Here
19
19
20
use Modern::Perl;
20
use Modern::Perl;
21
21
22
use Test::More tests => 6;
22
use Test::More tests => 7;
23
23
24
use Test::Exception;
24
use Test::Exception;
25
use Test::MockModule;
25
use Test::MockModule;
Lines 29-34 use MARC::Field; Link Here
29
use C4::Items;
29
use C4::Items;
30
use C4::Biblio qw( AddBiblio ModBiblio );
30
use C4::Biblio qw( AddBiblio ModBiblio );
31
use C4::Reserves qw( AddReserve );
31
use C4::Reserves qw( AddReserve );
32
use JSON qw( decode_json );
32
33
33
use Koha::DateUtils qw( dt_from_string output_pref );
34
use Koha::DateUtils qw( dt_from_string output_pref );
34
use Koha::Biblios;
35
use Koha::Biblios;
Lines 309-311 subtest 'pickup_locations() tests' => sub { Link Here
309
310
310
    $schema->storage->txn_rollback;
311
    $schema->storage->txn_rollback;
311
};
312
};
313
314
subtest 'print_collection() tests' => sub {
315
    plan tests => 4;
316
317
    $schema->storage->txn_begin;
318
319
    # Two biblios
320
    my $biblio_1 = $builder->build_sample_biblio;
321
    my $biblio_2 = $builder->build_sample_biblio;
322
323
    my $result_set = Koha::Biblios->search([{biblionumber => $biblio_1->biblionumber}, {biblionumber => $biblio_2->biblionumber}]);
324
    my $collection = $result_set->print_collection('marcxml');
325
326
    like($collection, qr/<(\s*\w*:)?collection[^>]*>/, 'Has collection tag');
327
328
    $result_set->reset;
329
    $collection = $result_set->print_collection('mij');
330
331
    my $count = scalar(@{decode_json($collection)});
332
333
    is($count, 2, 'Has 2 elements');
334
335
    $result_set->reset;
336
    $collection = $result_set->print_collection('marc');
337
338
    $count = $collection =~ tr/[\x1D]//;
339
340
    is($count, 2, 'Has 2 USMARC end of record');
341
342
    $result_set->reset;
343
    $collection = $result_set->print_collection('txt');
344
345
    $count = scalar(split(/-{10}/, $collection) );
346
347
    is($count, 2, 'Has 2 records');
348
349
    $schema->storage->txn_rollback;
350
};
(-)a/t/db_dependent/api/v1/biblios.t (-710 / +762 lines)
Lines 20-26 use Modern::Perl; Link Here
20
use utf8;
20
use utf8;
21
use Encode;
21
use Encode;
22
22
23
use Test::More tests => 10;
23
use Test::More tests => 11;
24
use Test::MockModule;
24
use Test::MockModule;
25
use Test::Mojo;
25
use Test::Mojo;
26
use Test::Warn;
26
use Test::Warn;
Lines 733-1113 subtest 'post() tests' => sub { Link Here
733
733
734
    my $frameworkcode = 'BKS';
734
    my $frameworkcode = 'BKS';
735
    my $marcxml = q|<?xml version="1.0" encoding="UTF-8"?>
735
    my $marcxml = q|<?xml version="1.0" encoding="UTF-8"?>
736
<record
736
    <record
737
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
737
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
738
    xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
738
        xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
739
    xmlns="http://www.loc.gov/MARC21/slim">
739
        xmlns="http://www.loc.gov/MARC21/slim">
740
740
741
  <leader>01102pam a2200289 a 7500</leader>
741
      <leader>01102pam a2200289 a 7500</leader>
742
  <controlfield tag="001">2504398</controlfield>
742
      <controlfield tag="001">2504398</controlfield>
743
  <controlfield tag="005">20200421093816.0</controlfield>
743
      <controlfield tag="005">20200421093816.0</controlfield>
744
  <controlfield tag="008">920610s1993    caub         s001 0 eng  </controlfield>
744
      <controlfield tag="008">920610s1993    caub         s001 0 eng  </controlfield>
745
  <datafield tag="010" ind1=" " ind2=" ">
745
      <datafield tag="010" ind1=" " ind2=" ">
746
    <subfield code="a">   92021731 </subfield>
746
        <subfield code="a">   92021731 </subfield>
747
  </datafield>
747
      </datafield>
748
  <datafield tag="020" ind1=" " ind2=" ">
748
      <datafield tag="020" ind1=" " ind2=" ">
749
    <subfield code="a">05200784381 (Test marcxml)</subfield>
749
        <subfield code="a">05200784381 (Test marcxml)</subfield>
750
  </datafield>
750
      </datafield>
751
  <datafield tag="020" ind1=" " ind2=" ">
751
      <datafield tag="020" ind1=" " ind2=" ">
752
    <subfield code="a">05200784461 (Test marcxml)</subfield>
752
        <subfield code="a">05200784461 (Test marcxml)</subfield>
753
  </datafield>
753
      </datafield>
754
  <datafield tag="040" ind1=" " ind2=" ">
754
      <datafield tag="040" ind1=" " ind2=" ">
755
    <subfield code="a">DLC</subfield>
755
        <subfield code="a">DLC</subfield>
756
    <subfield code="c">DLC</subfield>
756
        <subfield code="c">DLC</subfield>
757
    <subfield code="d">DLC</subfield>
757
        <subfield code="d">DLC</subfield>
758
  </datafield>
758
      </datafield>
759
  <datafield tag="041" ind1="0" ind2=" ">
759
      <datafield tag="041" ind1="0" ind2=" ">
760
    <subfield code="a">enggrc</subfield>
760
        <subfield code="a">enggrc</subfield>
761
  </datafield>
761
      </datafield>
762
  <datafield tag="050" ind1="0" ind2="0">
762
      <datafield tag="050" ind1="0" ind2="0">
763
    <subfield code="a">PA522</subfield>
763
        <subfield code="a">PA522</subfield>
764
    <subfield code="b">.M38 1993</subfield>
764
        <subfield code="b">.M38 1993</subfield>
765
  </datafield>
765
      </datafield>
766
  <datafield tag="082" ind1="0" ind2="0">
766
      <datafield tag="082" ind1="0" ind2="0">
767
    <subfield code="a">480</subfield>
767
        <subfield code="a">480</subfield>
768
    <subfield code="2">20</subfield>
768
        <subfield code="2">20</subfield>
769
  </datafield>
769
      </datafield>
770
  <datafield tag="100" ind1="1" ind2=" ">
770
      <datafield tag="100" ind1="1" ind2=" ">
771
    <subfield code="a">Mastronarde, Donald J.</subfield>
771
        <subfield code="a">Mastronarde, Donald J.</subfield>
772
    <subfield code="9">389</subfield>
772
        <subfield code="9">389</subfield>
773
  </datafield>
773
      </datafield>
774
  <datafield tag="245" ind1="1" ind2="0">
774
      <datafield tag="245" ind1="1" ind2="0">
775
    <subfield code="a">Introduction to Attic Greek (Using marcxml) /</subfield>
775
        <subfield code="a">Introduction to Attic Greek (Using marcxml) /</subfield>
776
    <subfield code="c">Donald J. Mastronarde.</subfield>
776
        <subfield code="c">Donald J. Mastronarde.</subfield>
777
  </datafield>
777
      </datafield>
778
  <datafield tag="260" ind1=" " ind2=" ">
778
      <datafield tag="260" ind1=" " ind2=" ">
779
    <subfield code="a">Berkeley :</subfield>
779
        <subfield code="a">Berkeley :</subfield>
780
    <subfield code="b">University of California Press,</subfield>
780
        <subfield code="b">University of California Press,</subfield>
781
    <subfield code="c">c1993.</subfield>
781
        <subfield code="c">c1993.</subfield>
782
  </datafield>
782
      </datafield>
783
  <datafield tag="300" ind1=" " ind2=" ">
783
      <datafield tag="300" ind1=" " ind2=" ">
784
    <subfield code="a">ix, 425 p. :</subfield>
784
        <subfield code="a">ix, 425 p. :</subfield>
785
    <subfield code="b">maps ;</subfield>
785
        <subfield code="b">maps ;</subfield>
786
    <subfield code="c">26 cm.</subfield>
786
        <subfield code="c">26 cm.</subfield>
787
  </datafield>
787
      </datafield>
788
  <datafield tag="500" ind1=" " ind2=" ">
788
      <datafield tag="500" ind1=" " ind2=" ">
789
    <subfield code="a">Includes index.</subfield>
789
        <subfield code="a">Includes index.</subfield>
790
  </datafield>
790
      </datafield>
791
  <datafield tag="650" ind1=" " ind2="0">
791
      <datafield tag="650" ind1=" " ind2="0">
792
    <subfield code="a">Attic Greek dialect</subfield>
792
        <subfield code="a">Attic Greek dialect</subfield>
793
    <subfield code="9">7</subfield>
793
        <subfield code="9">7</subfield>
794
  </datafield>
794
      </datafield>
795
  <datafield tag="856" ind1="4" ind2="2">
795
      <datafield tag="856" ind1="4" ind2="2">
796
    <subfield code="3">Contributor biographical information</subfield>
796
        <subfield code="3">Contributor biographical information</subfield>
797
    <subfield code="u">http://www.loc.gov/catdir/bios/ucal051/92021731.html</subfield>
797
        <subfield code="u">http://www.loc.gov/catdir/bios/ucal051/92021731.html</subfield>
798
  </datafield>
798
      </datafield>
799
  <datafield tag="856" ind1="4" ind2="2">
799
      <datafield tag="856" ind1="4" ind2="2">
800
    <subfield code="3">Publisher description</subfield>
800
        <subfield code="3">Publisher description</subfield>
801
    <subfield code="u">http://www.loc.gov/catdir/description/ucal041/92021731.html</subfield>
801
        <subfield code="u">http://www.loc.gov/catdir/description/ucal041/92021731.html</subfield>
802
  </datafield>
802
      </datafield>
803
  <datafield tag="906" ind1=" " ind2=" ">
803
      <datafield tag="906" ind1=" " ind2=" ">
804
    <subfield code="a">7</subfield>
804
        <subfield code="a">7</subfield>
805
    <subfield code="b">cbc</subfield>
805
        <subfield code="b">cbc</subfield>
806
    <subfield code="c">orignew</subfield>
806
        <subfield code="c">orignew</subfield>
807
    <subfield code="d">1</subfield>
807
        <subfield code="d">1</subfield>
808
    <subfield code="e">ocip</subfield>
808
        <subfield code="e">ocip</subfield>
809
    <subfield code="f">19</subfield>
809
        <subfield code="f">19</subfield>
810
    <subfield code="g">y-gencatlg</subfield>
810
        <subfield code="g">y-gencatlg</subfield>
811
  </datafield>
811
      </datafield>
812
  <datafield tag="942" ind1=" " ind2=" ">
812
      <datafield tag="942" ind1=" " ind2=" ">
813
    <subfield code="2">ddc</subfield>
813
        <subfield code="2">ddc</subfield>
814
    <subfield code="c">BK</subfield>
814
        <subfield code="c">BK</subfield>
815
  </datafield>
815
      </datafield>
816
  <datafield tag="955" ind1=" " ind2=" ">
816
      <datafield tag="955" ind1=" " ind2=" ">
817
    <subfield code="a">pc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93</subfield>
817
        <subfield code="a">pc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93</subfield>
818
  </datafield>
818
      </datafield>
819
  <datafield tag="999" ind1=" " ind2=" ">
819
      <datafield tag="999" ind1=" " ind2=" ">
820
    <subfield code="c">3</subfield>
820
        <subfield code="c">3</subfield>
821
    <subfield code="d">3</subfield>
821
        <subfield code="d">3</subfield>
822
  </datafield>
822
      </datafield>
823
</record>|;
823
    </record>|;
824
824
825
    my $mij = q|{
825
    my $mij = q|{
826
  "fields": [
826
      "fields": [
827
    {
827
        {
828
      "001": "2504398"
828
          "001": "2504398"
829
    },
829
        },
830
    {
830
        {
831
      "005": "20200421093816.0"
831
          "005": "20200421093816.0"
832
    },
832
        },
833
    {
833
        {
834
      "008": "920610s1993    caub         s001 0 eng  "
834
          "008": "920610s1993    caub         s001 0 eng  "
835
    },
835
        },
836
    {
836
        {
837
      "010": {
837
          "010": {
838
        "ind1": " ",
838
            "ind1": " ",
839
        "subfields": [
839
            "subfields": [
840
          {
840
              {
841
            "a": "   92021731 "
841
                "a": "   92021731 "
842
              }
843
            ],
844
            "ind2": " "
842
          }
845
          }
843
        ],
846
        },
844
        "ind2": " "
847
        {
845
      }
848
          "020": {
846
    },
849
            "subfields": [
847
    {
850
              {
848
      "020": {
851
                "a": "05200784382 (Test mij)"
849
        "subfields": [
852
              }
850
          {
853
            ],
851
            "a": "05200784382 (Test mij)"
854
            "ind2": " ",
855
            "ind1": " "
852
          }
856
          }
853
        ],
857
        },
854
        "ind2": " ",
858
        {
855
        "ind1": " "
859
          "020": {
856
      }
860
            "subfields": [
857
    },
861
              {
858
    {
862
                "a": "05200784462 (Test mij)"
859
      "020": {
863
              }
860
        "subfields": [
864
            ],
861
          {
865
            "ind1": " ",
862
            "a": "05200784462 (Test mij)"
866
            "ind2": " "
863
          }
867
          }
864
        ],
868
        },
865
        "ind1": " ",
869
        {
866
        "ind2": " "
870
          "040": {
867
      }
871
            "subfields": [
868
    },
872
              {
869
    {
873
                "a": "DLC"
870
      "040": {
874
              },
871
        "subfields": [
875
              {
872
          {
876
                "c": "DLC"
873
            "a": "DLC"
877
              },
874
          },
878
              {
875
          {
879
                "d": "DLC"
876
            "c": "DLC"
880
              }
877
          },
881
            ],
878
          {
882
            "ind2": " ",
879
            "d": "DLC"
883
            "ind1": " "
880
          }
884
          }
881
        ],
885
        },
882
        "ind2": " ",
886
        {
883
        "ind1": " "
887
          "041": {
884
      }
888
            "ind2": " ",
885
    },
889
            "subfields": [
886
    {
890
              {
887
      "041": {
891
                "a": "enggrc"
888
        "ind2": " ",
892
              }
889
        "subfields": [
893
            ],
890
          {
894
            "ind1": "0"
891
            "a": "enggrc"
892
          }
895
          }
893
        ],
896
        },
894
        "ind1": "0"
897
        {
895
      }
898
          "050": {
896
    },
899
            "subfields": [
897
    {
900
              {
898
      "050": {
901
                "a": "PA522"
899
        "subfields": [
902
              },
900
          {
903
              {
901
            "a": "PA522"
904
                "b": ".M38 1993"
902
          },
905
              }
903
          {
906
            ],
904
            "b": ".M38 1993"
907
            "ind1": "0",
908
            "ind2": "0"
905
          }
909
          }
906
        ],
910
        },
907
        "ind1": "0",
911
        {
908
        "ind2": "0"
912
          "082": {
909
      }
913
            "subfields": [
910
    },
914
              {
911
    {
915
                "a": "480"
912
      "082": {
916
              },
913
        "subfields": [
917
              {
914
          {
918
                "2": "20"
915
            "a": "480"
919
              }
916
          },
920
            ],
917
          {
921
            "ind2": "0",
918
            "2": "20"
922
            "ind1": "0"
919
          }
923
          }
920
        ],
924
        },
921
        "ind2": "0",
925
        {
922
        "ind1": "0"
926
          "100": {
923
      }
927
            "ind2": " ",
924
    },
928
            "subfields": [
925
    {
929
              {
926
      "100": {
930
                "a": "Mastronarde, Donald J."
927
        "ind2": " ",
931
              },
928
        "subfields": [
932
              {
929
          {
933
                "9": "389"
930
            "a": "Mastronarde, Donald J."
934
              }
931
          },
935
            ],
932
          {
936
            "ind1": "1"
933
            "9": "389"
934
          }
937
          }
935
        ],
938
        },
936
        "ind1": "1"
939
        {
937
      }
940
          "245": {
938
    },
941
            "ind1": "1",
939
    {
942
            "subfields": [
940
      "245": {
943
              {
941
        "ind1": "1",
944
                "a": "Introduction to Attic Greek  (Using mij) /"
942
        "subfields": [
945
              },
943
          {
946
              {
944
            "a": "Introduction to Attic Greek  (Using mij) /"
947
                "c": "Donald J. Mastronarde."
945
          },
948
              }
946
          {
949
            ],
947
            "c": "Donald J. Mastronarde."
950
            "ind2": "0"
948
          }
951
          }
949
        ],
952
        },
950
        "ind2": "0"
953
        {
951
      }
954
          "260": {
952
    },
955
            "subfields": [
953
    {
956
              {
954
      "260": {
957
                "a": "Berkeley :"
955
        "subfields": [
958
              },
956
          {
959
              {
957
            "a": "Berkeley :"
960
                "b": "University of California Press,"
958
          },
961
              },
959
          {
962
              {
960
            "b": "University of California Press,"
963
                "c": "c1993."
961
          },
964
              }
962
          {
965
            ],
963
            "c": "c1993."
966
            "ind2": " ",
967
            "ind1": " "
964
          }
968
          }
965
        ],
969
        },
966
        "ind2": " ",
970
        {
967
        "ind1": " "
971
          "300": {
968
      }
972
            "ind1": " ",
969
    },
973
            "subfields": [
970
    {
974
              {
971
      "300": {
975
                "a": "ix, 425 p. :"
972
        "ind1": " ",
976
              },
973
        "subfields": [
977
              {
974
          {
978
                "b": "maps ;"
975
            "a": "ix, 425 p. :"
979
              },
976
          },
980
              {
977
          {
981
                "c": "26 cm."
978
            "b": "maps ;"
982
              }
979
          },
983
            ],
980
          {
984
            "ind2": " "
981
            "c": "26 cm."
982
          }
985
          }
983
        ],
986
        },
984
        "ind2": " "
987
        {
985
      }
988
          "500": {
986
    },
989
            "subfields": [
987
    {
990
              {
988
      "500": {
991
                "a": "Includes index."
989
        "subfields": [
992
              }
990
          {
993
            ],
991
            "a": "Includes index."
994
            "ind1": " ",
995
            "ind2": " "
992
          }
996
          }
993
        ],
997
        },
994
        "ind1": " ",
998
        {
995
        "ind2": " "
999
          "650": {
996
      }
1000
            "subfields": [
997
    },
1001
              {
998
    {
1002
                "a": "Attic Greek dialect"
999
      "650": {
1003
              },
1000
        "subfields": [
1004
              {
1001
          {
1005
                "9": "7"
1002
            "a": "Attic Greek dialect"
1006
              }
1003
          },
1007
            ],
1004
          {
1008
            "ind2": "0",
1005
            "9": "7"
1009
            "ind1": " "
1006
          }
1010
          }
1007
        ],
1011
        },
1008
        "ind2": "0",
1012
        {
1009
        "ind1": " "
1013
          "856": {
1010
      }
1014
            "subfields": [
1011
    },
1015
              {
1012
    {
1016
                "3": "Contributor biographical information"
1013
      "856": {
1017
              },
1014
        "subfields": [
1018
              {
1015
          {
1019
                "u": "http://www.loc.gov/catdir/bios/ucal051/92021731.html"
1016
            "3": "Contributor biographical information"
1020
              }
1017
          },
1021
            ],
1018
          {
1022
            "ind2": "2",
1019
            "u": "http://www.loc.gov/catdir/bios/ucal051/92021731.html"
1023
            "ind1": "4"
1020
          }
1024
          }
1021
        ],
1025
        },
1022
        "ind2": "2",
1026
        {
1023
        "ind1": "4"
1027
          "856": {
1024
      }
1028
            "ind1": "4",
1025
    },
1029
            "subfields": [
1026
    {
1030
              {
1027
      "856": {
1031
                "3": "Publisher description"
1028
        "ind1": "4",
1032
              },
1029
        "subfields": [
1033
              {
1030
          {
1034
                "u": "http://www.loc.gov/catdir/description/ucal041/92021731.html"
1031
            "3": "Publisher description"
1035
              }
1032
          },
1036
            ],
1033
          {
1037
            "ind2": "2"
1034
            "u": "http://www.loc.gov/catdir/description/ucal041/92021731.html"
1035
          }
1038
          }
1036
        ],
1039
        },
1037
        "ind2": "2"
1040
        {
1038
      }
1041
          "906": {
1039
    },
1042
            "subfields": [
1040
    {
1043
              {
1041
      "906": {
1044
                "a": "7"
1042
        "subfields": [
1045
              },
1043
          {
1046
              {
1044
            "a": "7"
1047
                "b": "cbc"
1045
          },
1048
              },
1046
          {
1049
              {
1047
            "b": "cbc"
1050
                "c": "orignew"
1048
          },
1051
              },
1049
          {
1052
              {
1050
            "c": "orignew"
1053
                "d": "1"
1051
          },
1054
              },
1052
          {
1055
              {
1053
            "d": "1"
1056
                "e": "ocip"
1054
          },
1057
              },
1055
          {
1058
              {
1056
            "e": "ocip"
1059
                "f": "19"
1057
          },
1060
              },
1058
          {
1061
              {
1059
            "f": "19"
1062
                "g": "y-gencatlg"
1060
          },
1063
              }
1061
          {
1064
            ],
1062
            "g": "y-gencatlg"
1065
            "ind1": " ",
1066
            "ind2": " "
1063
          }
1067
          }
1064
        ],
1068
        },
1065
        "ind1": " ",
1069
        {
1066
        "ind2": " "
1070
          "942": {
1067
      }
1071
            "subfields": [
1068
    },
1072
              {
1069
    {
1073
                "2": "ddc"
1070
      "942": {
1074
              },
1071
        "subfields": [
1075
              {
1072
          {
1076
                "c": "BK"
1073
            "2": "ddc"
1077
              }
1074
          },
1078
            ],
1075
          {
1079
            "ind2": " ",
1076
            "c": "BK"
1080
            "ind1": " "
1077
          }
1081
          }
1078
        ],
1082
        },
1079
        "ind2": " ",
1083
        {
1080
        "ind1": " "
1084
          "955": {
1081
      }
1085
            "subfields": [
1082
    },
1086
              {
1083
    {
1087
                "a": "pc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93"
1084
      "955": {
1088
              }
1085
        "subfields": [
1089
            ],
1086
          {
1090
            "ind2": " ",
1087
            "a": "pc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93"
1091
            "ind1": " "
1088
          }
1092
          }
1089
        ],
1093
        },
1090
        "ind2": " ",
1094
        {
1091
        "ind1": " "
1095
          "999": {
1092
      }
1096
            "subfields": [
1093
    },
1097
              {
1094
    {
1098
                "c": "3"
1095
      "999": {
1099
              },
1096
        "subfields": [
1100
              {
1097
          {
1101
                "d": "3"
1098
            "c": "3"
1102
              }
1099
          },
1103
            ],
1100
          {
1104
            "ind1": " ",
1101
            "d": "3"
1105
            "ind2": " "
1102
          }
1106
          }
1103
        ],
1107
        }
1104
        "ind1": " ",
1108
      ],
1105
        "ind2": " "
1109
      "leader": "01102pam a2200289 a 8500"
1106
      }
1110
    }|;
1107
    }
1108
  ],
1109
  "leader": "01102pam a2200289 a 8500"
1110
}|;
1111
    my $marc = q|01102pam a2200289 a 9500001000800000005001700008008004100025010001700066020002800083020003500111040001800146041001100164050002100175082001200196100003200208245005800240260005600298300003300354500002000387650002700407856009500434856008700529906004500616942001200661955013000673999000900803250439820200421093816.0920610s1993    caub         s001 0 eng    a   92021731   a05200784383 (Test usmarc)  a05200784463 (Test usmarc)  aDLCcDLCdDLC0 aenggrc00aPA522b.M38 199300a4802201 aMastronarde, Donald J.938910aIntroduction to Attic Greek  (Using usmarc) /cDonald J. Mastronarde.  aBerkeley :bUniversity of California Press,cc1993.  aix, 425 p. :bmaps ;c26 cm.  aIncludes index. 0aAttic Greek dialect97423Contributor biographical informationuhttp://www.loc.gov/catdir/bios/ucal051/92021731.html423Publisher descriptionuhttp://www.loc.gov/catdir/description/ucal041/92021731.html  a7bcbccorignewd1eocipf19gy-gencatlg  2ddccBK  apc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93  c3d3|;
1111
    my $marc = q|01102pam a2200289 a 9500001000800000005001700008008004100025010001700066020002800083020003500111040001800146041001100164050002100175082001200196100003200208245005800240260005600298300003300354500002000387650002700407856009500434856008700529906004500616942001200661955013000673999000900803250439820200421093816.0920610s1993    caub         s001 0 eng    a   92021731   a05200784383 (Test usmarc)  a05200784463 (Test usmarc)  aDLCcDLCdDLC0 aenggrc00aPA522b.M38 199300a4802201 aMastronarde, Donald J.938910aIntroduction to Attic Greek  (Using usmarc) /cDonald J. Mastronarde.  aBerkeley :bUniversity of California Press,cc1993.  aix, 425 p. :bmaps ;c26 cm.  aIncludes index. 0aAttic Greek dialect97423Contributor biographical informationuhttp://www.loc.gov/catdir/bios/ucal051/92021731.html423Publisher descriptionuhttp://www.loc.gov/catdir/description/ucal041/92021731.html  a7bcbccorignewd1eocipf19gy-gencatlg  2ddccBK  apc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93  c3d3|;
1112
1112
1113
    $t->post_ok("//$userid:$password@/api/v1/biblios")
1113
    $t->post_ok("//$userid:$password@/api/v1/biblios")
Lines 1165-1545 subtest 'put() tests' => sub { Link Here
1165
    my $biblionumber = $biblio->biblionumber;
1165
    my $biblionumber = $biblio->biblionumber;
1166
1166
1167
    my $marcxml = q|<?xml version="1.0" encoding="UTF-8"?>
1167
    my $marcxml = q|<?xml version="1.0" encoding="UTF-8"?>
1168
<record
1168
    <record
1169
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1169
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1170
    xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
1170
        xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
1171
    xmlns="http://www.loc.gov/MARC21/slim">
1171
        xmlns="http://www.loc.gov/MARC21/slim">
1172
1172
1173
  <leader>01102pam a2200289 a 6500</leader>
1173
      <leader>01102pam a2200289 a 6500</leader>
1174
  <controlfield tag="001">2504398</controlfield>
1174
      <controlfield tag="001">2504398</controlfield>
1175
  <controlfield tag="005">20200421093816.0</controlfield>
1175
      <controlfield tag="005">20200421093816.0</controlfield>
1176
  <controlfield tag="008">920610s1993    caub         s001 0 eng  </controlfield>
1176
      <controlfield tag="008">920610s1993    caub         s001 0 eng  </controlfield>
1177
  <datafield tag="010" ind1=" " ind2=" ">
1177
      <datafield tag="010" ind1=" " ind2=" ">
1178
    <subfield code="a">   92021731 </subfield>
1178
        <subfield code="a">   92021731 </subfield>
1179
  </datafield>
1179
      </datafield>
1180
  <datafield tag="020" ind1=" " ind2=" ">
1180
      <datafield tag="020" ind1=" " ind2=" ">
1181
    <subfield code="a">05200784384 (Test json)</subfield>
1181
        <subfield code="a">05200784384 (Test json)</subfield>
1182
  </datafield>
1182
      </datafield>
1183
  <datafield tag="020" ind1=" " ind2=" ">
1183
      <datafield tag="020" ind1=" " ind2=" ">
1184
    <subfield code="a">05200784464 (Test json)</subfield>
1184
        <subfield code="a">05200784464 (Test json)</subfield>
1185
  </datafield>
1185
      </datafield>
1186
  <datafield tag="040" ind1=" " ind2=" ">
1186
      <datafield tag="040" ind1=" " ind2=" ">
1187
    <subfield code="a">DLC</subfield>
1187
        <subfield code="a">DLC</subfield>
1188
    <subfield code="c">DLC</subfield>
1188
        <subfield code="c">DLC</subfield>
1189
    <subfield code="d">DLC</subfield>
1189
        <subfield code="d">DLC</subfield>
1190
  </datafield>
1190
      </datafield>
1191
  <datafield tag="041" ind1="0" ind2=" ">
1191
      <datafield tag="041" ind1="0" ind2=" ">
1192
    <subfield code="a">enggrc</subfield>
1192
        <subfield code="a">enggrc</subfield>
1193
  </datafield>
1193
      </datafield>
1194
  <datafield tag="050" ind1="0" ind2="0">
1194
      <datafield tag="050" ind1="0" ind2="0">
1195
    <subfield code="a">PA522</subfield>
1195
        <subfield code="a">PA522</subfield>
1196
    <subfield code="b">.M38 1993</subfield>
1196
        <subfield code="b">.M38 1993</subfield>
1197
  </datafield>
1197
      </datafield>
1198
  <datafield tag="082" ind1="0" ind2="0">
1198
      <datafield tag="082" ind1="0" ind2="0">
1199
    <subfield code="a">480</subfield>
1199
        <subfield code="a">480</subfield>
1200
    <subfield code="2">20</subfield>
1200
        <subfield code="2">20</subfield>
1201
  </datafield>
1201
      </datafield>
1202
  <datafield tag="100" ind1="1" ind2=" ">
1202
      <datafield tag="100" ind1="1" ind2=" ">
1203
    <subfield code="a">Mastronarde, Donald J.</subfield>
1203
        <subfield code="a">Mastronarde, Donald J.</subfield>
1204
    <subfield code="9">389</subfield>
1204
        <subfield code="9">389</subfield>
1205
  </datafield>
1205
      </datafield>
1206
  <datafield tag="245" ind1="1" ind2="0">
1206
      <datafield tag="245" ind1="1" ind2="0">
1207
    <subfield code="a">Introduction to Attic Greek  (Using marcxml) /</subfield>
1207
        <subfield code="a">Introduction to Attic Greek  (Using marcxml) /</subfield>
1208
    <subfield code="c">Donald J. Mastronarde.</subfield>
1208
        <subfield code="c">Donald J. Mastronarde.</subfield>
1209
  </datafield>
1209
      </datafield>
1210
  <datafield tag="260" ind1=" " ind2=" ">
1210
      <datafield tag="260" ind1=" " ind2=" ">
1211
    <subfield code="a">Berkeley :</subfield>
1211
        <subfield code="a">Berkeley :</subfield>
1212
    <subfield code="b">University of California Press,</subfield>
1212
        <subfield code="b">University of California Press,</subfield>
1213
    <subfield code="c">c1993.</subfield>
1213
        <subfield code="c">c1993.</subfield>
1214
  </datafield>
1214
      </datafield>
1215
  <datafield tag="300" ind1=" " ind2=" ">
1215
      <datafield tag="300" ind1=" " ind2=" ">
1216
    <subfield code="a">ix, 425 p. :</subfield>
1216
        <subfield code="a">ix, 425 p. :</subfield>
1217
    <subfield code="b">maps ;</subfield>
1217
        <subfield code="b">maps ;</subfield>
1218
    <subfield code="c">26 cm.</subfield>
1218
        <subfield code="c">26 cm.</subfield>
1219
  </datafield>
1219
      </datafield>
1220
  <datafield tag="500" ind1=" " ind2=" ">
1220
      <datafield tag="500" ind1=" " ind2=" ">
1221
    <subfield code="a">Includes index.</subfield>
1221
        <subfield code="a">Includes index.</subfield>
1222
  </datafield>
1222
      </datafield>
1223
  <datafield tag="650" ind1=" " ind2="0">
1223
      <datafield tag="650" ind1=" " ind2="0">
1224
    <subfield code="a">Attic Greek dialect</subfield>
1224
        <subfield code="a">Attic Greek dialect</subfield>
1225
    <subfield code="9">7</subfield>
1225
        <subfield code="9">7</subfield>
1226
  </datafield>
1226
      </datafield>
1227
  <datafield tag="856" ind1="4" ind2="2">
1227
      <datafield tag="856" ind1="4" ind2="2">
1228
    <subfield code="3">Contributor biographical information</subfield>
1228
        <subfield code="3">Contributor biographical information</subfield>
1229
    <subfield code="u">http://www.loc.gov/catdir/bios/ucal051/92021731.html</subfield>
1229
        <subfield code="u">http://www.loc.gov/catdir/bios/ucal051/92021731.html</subfield>
1230
  </datafield>
1230
      </datafield>
1231
  <datafield tag="856" ind1="4" ind2="2">
1231
      <datafield tag="856" ind1="4" ind2="2">
1232
    <subfield code="3">Publisher description</subfield>
1232
        <subfield code="3">Publisher description</subfield>
1233
    <subfield code="u">http://www.loc.gov/catdir/description/ucal041/92021731.html</subfield>
1233
        <subfield code="u">http://www.loc.gov/catdir/description/ucal041/92021731.html</subfield>
1234
  </datafield>
1234
      </datafield>
1235
  <datafield tag="906" ind1=" " ind2=" ">
1235
      <datafield tag="906" ind1=" " ind2=" ">
1236
    <subfield code="a">7</subfield>
1236
        <subfield code="a">7</subfield>
1237
    <subfield code="b">cbc</subfield>
1237
        <subfield code="b">cbc</subfield>
1238
    <subfield code="c">orignew</subfield>
1238
        <subfield code="c">orignew</subfield>
1239
    <subfield code="d">1</subfield>
1239
        <subfield code="d">1</subfield>
1240
    <subfield code="e">ocip</subfield>
1240
        <subfield code="e">ocip</subfield>
1241
    <subfield code="f">19</subfield>
1241
        <subfield code="f">19</subfield>
1242
    <subfield code="g">y-gencatlg</subfield>
1242
        <subfield code="g">y-gencatlg</subfield>
1243
  </datafield>
1243
      </datafield>
1244
  <datafield tag="942" ind1=" " ind2=" ">
1244
      <datafield tag="942" ind1=" " ind2=" ">
1245
    <subfield code="2">ddc</subfield>
1245
        <subfield code="2">ddc</subfield>
1246
    <subfield code="c">BK</subfield>
1246
        <subfield code="c">BK</subfield>
1247
  </datafield>
1247
      </datafield>
1248
  <datafield tag="955" ind1=" " ind2=" ">
1248
      <datafield tag="955" ind1=" " ind2=" ">
1249
    <subfield code="a">pc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93</subfield>
1249
        <subfield code="a">pc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93</subfield>
1250
  </datafield>
1250
      </datafield>
1251
  <datafield tag="999" ind1=" " ind2=" ">
1251
      <datafield tag="999" ind1=" " ind2=" ">
1252
    <subfield code="c">3</subfield>
1252
        <subfield code="c">3</subfield>
1253
    <subfield code="d">3</subfield>
1253
        <subfield code="d">3</subfield>
1254
  </datafield>
1254
      </datafield>
1255
</record>|;
1255
    </record>|;
1256
1256
1257
    my $mij = q|{
1257
    my $mij = q|{
1258
  "fields": [
1258
      "fields": [
1259
    {
1259
        {
1260
      "001": "2504398"
1260
          "001": "2504398"
1261
    },
1261
        },
1262
    {
1262
        {
1263
      "005": "20200421093816.0"
1263
          "005": "20200421093816.0"
1264
    },
1264
        },
1265
    {
1265
        {
1266
      "008": "920610s1993    caub         s001 0 eng  "
1266
          "008": "920610s1993    caub         s001 0 eng  "
1267
    },
1267
        },
1268
    {
1268
        {
1269
      "010": {
1269
          "010": {
1270
        "ind1": " ",
1270
            "ind1": " ",
1271
        "subfields": [
1271
            "subfields": [
1272
          {
1272
              {
1273
            "a": "   92021731 "
1273
                "a": "   92021731 "
1274
              }
1275
            ],
1276
            "ind2": " "
1274
          }
1277
          }
1275
        ],
1278
        },
1276
        "ind2": " "
1279
        {
1277
      }
1280
          "020": {
1278
    },
1281
            "subfields": [
1279
    {
1282
              {
1280
      "020": {
1283
                "a": "05200784382 (Test mij)"
1281
        "subfields": [
1284
              }
1282
          {
1285
            ],
1283
            "a": "05200784382 (Test mij)"
1286
            "ind2": " ",
1287
            "ind1": " "
1284
          }
1288
          }
1285
        ],
1289
        },
1286
        "ind2": " ",
1290
        {
1287
        "ind1": " "
1291
          "020": {
1288
      }
1292
            "subfields": [
1289
    },
1293
              {
1290
    {
1294
                "a": "05200784462 (Test mij)"
1291
      "020": {
1295
              }
1292
        "subfields": [
1296
            ],
1293
          {
1297
            "ind1": " ",
1294
            "a": "05200784462 (Test mij)"
1298
            "ind2": " "
1295
          }
1299
          }
1296
        ],
1300
        },
1297
        "ind1": " ",
1301
        {
1298
        "ind2": " "
1302
          "040": {
1299
      }
1303
            "subfields": [
1300
    },
1304
              {
1301
    {
1305
                "a": "DLC"
1302
      "040": {
1306
              },
1303
        "subfields": [
1307
              {
1304
          {
1308
                "c": "DLC"
1305
            "a": "DLC"
1309
              },
1306
          },
1310
              {
1307
          {
1311
                "d": "DLC"
1308
            "c": "DLC"
1312
              }
1309
          },
1313
            ],
1310
          {
1314
            "ind2": " ",
1311
            "d": "DLC"
1315
            "ind1": " "
1312
          }
1316
          }
1313
        ],
1317
        },
1314
        "ind2": " ",
1318
        {
1315
        "ind1": " "
1319
          "041": {
1316
      }
1320
            "ind2": " ",
1317
    },
1321
            "subfields": [
1318
    {
1322
              {
1319
      "041": {
1323
                "a": "enggrc"
1320
        "ind2": " ",
1324
              }
1321
        "subfields": [
1325
            ],
1322
          {
1326
            "ind1": "0"
1323
            "a": "enggrc"
1324
          }
1327
          }
1325
        ],
1328
        },
1326
        "ind1": "0"
1329
        {
1327
      }
1330
          "050": {
1328
    },
1331
            "subfields": [
1329
    {
1332
              {
1330
      "050": {
1333
                "a": "PA522"
1331
        "subfields": [
1334
              },
1332
          {
1335
              {
1333
            "a": "PA522"
1336
                "b": ".M38 1993"
1334
          },
1337
              }
1335
          {
1338
            ],
1336
            "b": ".M38 1993"
1339
            "ind1": "0",
1340
            "ind2": "0"
1337
          }
1341
          }
1338
        ],
1342
        },
1339
        "ind1": "0",
1343
        {
1340
        "ind2": "0"
1344
          "082": {
1341
      }
1345
            "subfields": [
1342
    },
1346
              {
1343
    {
1347
                "a": "480"
1344
      "082": {
1348
              },
1345
        "subfields": [
1349
              {
1346
          {
1350
                "2": "20"
1347
            "a": "480"
1351
              }
1348
          },
1352
            ],
1349
          {
1353
            "ind2": "0",
1350
            "2": "20"
1354
            "ind1": "0"
1351
          }
1355
          }
1352
        ],
1356
        },
1353
        "ind2": "0",
1357
        {
1354
        "ind1": "0"
1358
          "100": {
1355
      }
1359
            "ind2": " ",
1356
    },
1360
            "subfields": [
1357
    {
1361
              {
1358
      "100": {
1362
                "a": "Mastronarde, Donald J."
1359
        "ind2": " ",
1363
              },
1360
        "subfields": [
1364
              {
1361
          {
1365
                "9": "389"
1362
            "a": "Mastronarde, Donald J."
1366
              }
1363
          },
1367
            ],
1364
          {
1368
            "ind1": "1"
1365
            "9": "389"
1366
          }
1369
          }
1367
        ],
1370
        },
1368
        "ind1": "1"
1371
        {
1369
      }
1372
          "245": {
1370
    },
1373
            "ind1": "1",
1371
    {
1374
            "subfields": [
1372
      "245": {
1375
              {
1373
        "ind1": "1",
1376
                "a": "Introduction to Attic Greek  (Using mij) /"
1374
        "subfields": [
1377
              },
1375
          {
1378
              {
1376
            "a": "Introduction to Attic Greek  (Using mij) /"
1379
                "c": "Donald J. Mastronarde."
1377
          },
1380
              }
1378
          {
1381
            ],
1379
            "c": "Donald J. Mastronarde."
1382
            "ind2": "0"
1380
          }
1383
          }
1381
        ],
1384
        },
1382
        "ind2": "0"
1385
        {
1383
      }
1386
          "260": {
1384
    },
1387
            "subfields": [
1385
    {
1388
              {
1386
      "260": {
1389
                "a": "Berkeley :"
1387
        "subfields": [
1390
              },
1388
          {
1391
              {
1389
            "a": "Berkeley :"
1392
                "b": "University of California Press,"
1390
          },
1393
              },
1391
          {
1394
              {
1392
            "b": "University of California Press,"
1395
                "c": "c1993."
1393
          },
1396
              }
1394
          {
1397
            ],
1395
            "c": "c1993."
1398
            "ind2": " ",
1399
            "ind1": " "
1396
          }
1400
          }
1397
        ],
1401
        },
1398
        "ind2": " ",
1402
        {
1399
        "ind1": " "
1403
          "300": {
1400
      }
1404
            "ind1": " ",
1401
    },
1405
            "subfields": [
1402
    {
1406
              {
1403
      "300": {
1407
                "a": "ix, 425 p. :"
1404
        "ind1": " ",
1408
              },
1405
        "subfields": [
1409
              {
1406
          {
1410
                "b": "maps ;"
1407
            "a": "ix, 425 p. :"
1411
              },
1408
          },
1412
              {
1409
          {
1413
                "c": "26 cm."
1410
            "b": "maps ;"
1414
              }
1411
          },
1415
            ],
1412
          {
1416
            "ind2": " "
1413
            "c": "26 cm."
1414
          }
1417
          }
1415
        ],
1418
        },
1416
        "ind2": " "
1419
        {
1417
      }
1420
          "500": {
1418
    },
1421
            "subfields": [
1419
    {
1422
              {
1420
      "500": {
1423
                "a": "Includes index."
1421
        "subfields": [
1424
              }
1422
          {
1425
            ],
1423
            "a": "Includes index."
1426
            "ind1": " ",
1427
            "ind2": " "
1424
          }
1428
          }
1425
        ],
1429
        },
1426
        "ind1": " ",
1430
        {
1427
        "ind2": " "
1431
          "650": {
1428
      }
1432
            "subfields": [
1429
    },
1433
              {
1430
    {
1434
                "a": "Attic Greek dialect"
1431
      "650": {
1435
              },
1432
        "subfields": [
1436
              {
1433
          {
1437
                "9": "7"
1434
            "a": "Attic Greek dialect"
1438
              }
1435
          },
1439
            ],
1436
          {
1440
            "ind2": "0",
1437
            "9": "7"
1441
            "ind1": " "
1438
          }
1442
          }
1439
        ],
1443
        },
1440
        "ind2": "0",
1444
        {
1441
        "ind1": " "
1445
          "856": {
1442
      }
1446
            "subfields": [
1443
    },
1447
              {
1444
    {
1448
                "3": "Contributor biographical information"
1445
      "856": {
1449
              },
1446
        "subfields": [
1450
              {
1447
          {
1451
                "u": "http://www.loc.gov/catdir/bios/ucal051/92021731.html"
1448
            "3": "Contributor biographical information"
1452
              }
1449
          },
1453
            ],
1450
          {
1454
            "ind2": "2",
1451
            "u": "http://www.loc.gov/catdir/bios/ucal051/92021731.html"
1455
            "ind1": "4"
1452
          }
1456
          }
1453
        ],
1457
        },
1454
        "ind2": "2",
1458
        {
1455
        "ind1": "4"
1459
          "856": {
1456
      }
1460
            "ind1": "4",
1457
    },
1461
            "subfields": [
1458
    {
1462
              {
1459
      "856": {
1463
                "3": "Publisher description"
1460
        "ind1": "4",
1464
              },
1461
        "subfields": [
1465
              {
1462
          {
1466
                "u": "http://www.loc.gov/catdir/description/ucal041/92021731.html"
1463
            "3": "Publisher description"
1467
              }
1464
          },
1468
            ],
1465
          {
1469
            "ind2": "2"
1466
            "u": "http://www.loc.gov/catdir/description/ucal041/92021731.html"
1467
          }
1470
          }
1468
        ],
1471
        },
1469
        "ind2": "2"
1472
        {
1470
      }
1473
          "906": {
1471
    },
1474
            "subfields": [
1472
    {
1475
              {
1473
      "906": {
1476
                "a": "7"
1474
        "subfields": [
1477
              },
1475
          {
1478
              {
1476
            "a": "7"
1479
                "b": "cbc"
1477
          },
1480
              },
1478
          {
1481
              {
1479
            "b": "cbc"
1482
                "c": "orignew"
1480
          },
1483
              },
1481
          {
1484
              {
1482
            "c": "orignew"
1485
                "d": "1"
1483
          },
1486
              },
1484
          {
1487
              {
1485
            "d": "1"
1488
                "e": "ocip"
1486
          },
1489
              },
1487
          {
1490
              {
1488
            "e": "ocip"
1491
                "f": "19"
1489
          },
1492
              },
1490
          {
1493
              {
1491
            "f": "19"
1494
                "g": "y-gencatlg"
1492
          },
1495
              }
1493
          {
1496
            ],
1494
            "g": "y-gencatlg"
1497
            "ind1": " ",
1498
            "ind2": " "
1495
          }
1499
          }
1496
        ],
1500
        },
1497
        "ind1": " ",
1501
        {
1498
        "ind2": " "
1502
          "942": {
1499
      }
1503
            "subfields": [
1500
    },
1504
              {
1501
    {
1505
                "2": "ddc"
1502
      "942": {
1506
              },
1503
        "subfields": [
1507
              {
1504
          {
1508
                "c": "BK"
1505
            "2": "ddc"
1509
              }
1506
          },
1510
            ],
1507
          {
1511
            "ind2": " ",
1508
            "c": "BK"
1512
            "ind1": " "
1509
          }
1513
          }
1510
        ],
1514
        },
1511
        "ind2": " ",
1515
        {
1512
        "ind1": " "
1516
          "955": {
1513
      }
1517
            "subfields": [
1514
    },
1518
              {
1515
    {
1519
                "a": "pc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93"
1516
      "955": {
1520
              }
1517
        "subfields": [
1521
            ],
1518
          {
1522
            "ind2": " ",
1519
            "a": "pc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93"
1523
            "ind1": " "
1520
          }
1524
          }
1521
        ],
1525
        },
1522
        "ind2": " ",
1526
        {
1523
        "ind1": " "
1527
          "999": {
1524
      }
1528
            "subfields": [
1525
    },
1529
              {
1526
    {
1530
                "c": "3"
1527
      "999": {
1531
              },
1528
        "subfields": [
1532
              {
1529
          {
1533
                "d": "3"
1530
            "c": "3"
1534
              }
1531
          },
1535
            ],
1532
          {
1536
            "ind1": " ",
1533
            "d": "3"
1537
            "ind2": " "
1534
          }
1538
          }
1535
        ],
1539
        }
1536
        "ind1": " ",
1540
      ],
1537
        "ind2": " "
1541
      "leader": "01102pam a2200289 a 8500"
1538
      }
1542
    }|;
1539
    }
1540
  ],
1541
  "leader": "01102pam a2200289 a 8500"
1542
}|;
1543
    my $marc = q|01116pam a2200289 a 4500001000800000005001700008008004100025010001700066020002800083020002800111040001800139041001100157050002100168082001200189100003200201245007500233260005600308300003300364500002000397650002700417856009500444856008700539906004500626942001200671955013000683999001300813250439820221223213433.0920610s1993    caub         s001 0 eng    a   92021731   a05200784384 (Test json)  a05200784464 (Test json)  aDLCcDLCdDLC0 aenggrc00aPA522b.M38 199300a4802201 aMastronarde, Donald J.938910aIntroduction to Attic Greek  (Using usmarc) /cDonald J. Mastronarde.  aBerkeley :bUniversity of California Press,cc1993.  aix, 425 p. :bmaps ;c26 cm.  aIncludes index. 0aAttic Greek dialect97423Contributor biographical informationuhttp://www.loc.gov/catdir/bios/ucal051/92021731.html423Publisher descriptionuhttp://www.loc.gov/catdir/description/ucal041/92021731.html  a7bcbccorignewd1eocipf19gy-gencatlg  2ddccBK  apc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93  c715d715|;
1543
    my $marc = q|01116pam a2200289 a 4500001000800000005001700008008004100025010001700066020002800083020002800111040001800139041001100157050002100168082001200189100003200201245007500233260005600308300003300364500002000397650002700417856009500444856008700539906004500626942001200671955013000683999001300813250439820221223213433.0920610s1993    caub         s001 0 eng    a   92021731   a05200784384 (Test json)  a05200784464 (Test json)  aDLCcDLCdDLC0 aenggrc00aPA522b.M38 199300a4802201 aMastronarde, Donald J.938910aIntroduction to Attic Greek  (Using usmarc) /cDonald J. Mastronarde.  aBerkeley :bUniversity of California Press,cc1993.  aix, 425 p. :bmaps ;c26 cm.  aIncludes index. 0aAttic Greek dialect97423Contributor biographical informationuhttp://www.loc.gov/catdir/bios/ucal051/92021731.html423Publisher descriptionuhttp://www.loc.gov/catdir/description/ucal041/92021731.html  a7bcbccorignewd1eocipf19gy-gencatlg  2ddccBK  apc05 to ea00 06-11-92; ea04 to SCD 06-11-92; fd11 06-11-92 (PA522.M...); fr21 06-12-92; fs62 06-15-92; CIP ver. pv07 11-12-93  c715d715|;
1544
1544
1545
    $t->put_ok("//$userid:$password@/api/v1/biblios/$biblionumber")
1545
    $t->put_ok("//$userid:$password@/api/v1/biblios/$biblionumber")
Lines 1582-1585 subtest 'put() tests' => sub { Link Here
1582
    is($biblio->title, 'Introduction to Attic Greek  (Using usmarc) /');
1582
    is($biblio->title, 'Introduction to Attic Greek  (Using usmarc) /');
1583
1583
1584
    $schema->storage->txn_rollback;
1584
    $schema->storage->txn_rollback;
1585
};
1586
1587
subtest 'list() tests' => sub {
1588
  plan tests => 14;
1589
1590
  $schema->storage->txn_begin;
1591
1592
  my $patron = $builder->build_object(
1593
      {
1594
          class => 'Koha::Patrons',
1595
          value => { flags => 0 }
1596
      }
1597
  );
1598
  my $password = 'thePassword123';
1599
  $patron->set_password( { password => $password, skip_validation => 1 } );
1600
  $patron->discard_changes;
1601
  my $userid = $patron->userid;
1602
1603
  my $biblionumber1 = $builder->build_sample_biblio->biblionumber;
1604
  my $biblionumber2 = $builder->build_sample_biblio->biblionumber;
1605
1606
  my $search = "[{\"biblionumber\": \"$biblionumber1\"}, {\"biblionumber\": \"$biblionumber2\"}]";
1607
  $t->get_ok( "//$userid:$password@/api/v1/biblios/"
1608
              => { 'x-koha-query' => $search } )
1609
    ->status_is(403);
1610
1611
  $patron->flags(4)->store;
1612
1613
  $t->get_ok( "//$userid:$password@/api/v1/biblios/"
1614
              => { Accept => 'application/weird+format', 'x-koha-query' => $search } )
1615
    ->status_is(400);
1616
1617
  $t->get_ok( "//$userid:$password@/api/v1/biblios/"
1618
                => { Accept => 'application/json', 'x-koha-query' => $search } )
1619
    ->status_is(200);
1620
1621
  $t->get_ok( "//$userid:$password@/api/v1/biblios/"
1622
                => { Accept => 'application/marcxml+xml', 'x-koha-query' => $search } )
1623
    ->status_is(200);
1624
1625
  $t->get_ok( "//$userid:$password@/api/v1/biblios/"
1626
                => { Accept => 'application/marc-in-json', 'x-koha-query' => $search } )
1627
    ->status_is(200);
1628
1629
  $t->get_ok( "//$userid:$password@/api/v1/biblios/"
1630
                => { Accept => 'application/marc', 'x-koha-query' => $search } )
1631
    ->status_is(200);
1632
1633
  $t->get_ok( "//$userid:$password@/api/v1/biblios/"
1634
                => { Accept => 'text/plain', 'x-koha-query' => $search } )
1635
    ->status_is(200);
1636
1637
  $schema->storage->txn_rollback;
1585
};
1638
};
1586
- 

Return to bug 32734