Bug 23225: Add a test
[koha.git] / t / db_dependent / Koha / Biblio.t
1 #!/usr/bin/perl
2
3 # This file is part of Koha.
4 #
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18 use Modern::Perl;
19
20 use Test::More tests => 6;
21
22 use C4::Biblio;
23 use Koha::Database;
24
25 use t::lib::TestBuilder;
26 use t::lib::Mocks;
27
28 BEGIN {
29     use_ok('Koha::Biblio');
30     use_ok('Koha::Biblios');
31 }
32
33 my $schema  = Koha::Database->new->schema;
34 my $builder = t::lib::TestBuilder->new;
35
36 subtest 'metadata() tests' => sub {
37
38     plan tests => 4;
39
40     $schema->storage->txn_begin;
41
42     my $title = 'Oranges and Peaches';
43
44     my $record = MARC::Record->new();
45     my $field = MARC::Field->new('245','','','a' => $title);
46     $record->append_fields( $field );
47     my ($biblionumber) = C4::Biblio::AddBiblio($record, '');
48
49     my $biblio = Koha::Biblios->find( $biblionumber );
50     is( ref $biblio, 'Koha::Biblio', 'Found a Koha::Biblio object' );
51
52     my $metadata = $biblio->metadata;
53     is( ref $metadata, 'Koha::Biblio::Metadata', 'Method metadata() returned a Koha::Biblio::Metadata object' );
54
55     my $record2 = $metadata->record;
56     is( ref $record2, 'MARC::Record', 'Method record() returned a MARC::Record object' );
57
58     is( $record2->field('245')->subfield("a"), $title, 'Title in 245$a matches title from original record object' );
59
60     $schema->storage->txn_rollback;
61 };
62
63 subtest 'hidden_in_opac() tests' => sub {
64
65     plan tests => 4;
66
67     $schema->storage->txn_begin;
68
69     my $biblio = $builder->build_sample_biblio();
70
71     ok( !$biblio->hidden_in_opac({ rules => { withdrawn => [ 2 ] } }), 'Biblio not hidden if there is no item attached' );
72
73     my $item_1 = $builder->build_sample_item({ biblionumber => $biblio->biblionumber });
74     my $item_2 = $builder->build_sample_item({ biblionumber => $biblio->biblionumber });
75
76     $item_1->withdrawn( 1 )->store->discard_changes;
77     $item_2->withdrawn( 1 )->store->discard_changes;
78
79     ok( !$biblio->hidden_in_opac({ rules => { withdrawn => [ 2 ] } }), 'Biblio not hidden' );
80
81     $item_2->withdrawn( 2 )->store->discard_changes;
82     $biblio->discard_changes; # refresh
83
84     ok( !$biblio->hidden_in_opac({ rules => { withdrawn => [ 2 ] } }), 'Biblio not hidden' );
85
86     $item_1->withdrawn( 2 )->store->discard_changes;
87     $biblio->discard_changes; # refresh
88
89     ok( $biblio->hidden_in_opac({ rules => { withdrawn => [ 2 ] } }), 'Biblio hidden' );
90
91     $schema->storage->txn_rollback;
92 };
93
94 subtest 'items() tests' => sub {
95
96     plan tests => 3;
97
98     $schema->storage->txn_begin;
99
100     my $biblio = $builder->build_sample_biblio();
101     my $item_1 = $builder->build_sample_item({ biblionumber => $biblio->biblionumber });
102     my $item_2 = $builder->build_sample_item({ biblionumber => $biblio->biblionumber });
103
104     my $items = $biblio->items;
105     is( ref($items), 'Koha::Items', 'Returns a Koha::Items resultset' );
106     is( $items->count, 2, 'Two items in resultset' );
107
108     my @items = $biblio->items->as_list;
109     is( scalar @items, 2, 'Same result, but in list context' );
110
111     $schema->storage->txn_rollback;
112
113 };
114
115 subtest 'get_coins and get_openurl' => sub {
116
117     plan tests => 3;
118
119     $schema->storage->txn_begin;
120
121     my $builder = t::lib::TestBuilder->new;
122     my $biblio = $builder->build_sample_biblio({
123             title => 'Title 1',
124             author => 'Author 1'
125         });
126
127     is(
128         $biblio->get_coins,
129         'ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Title%201&amp;rft.au=Author%201',
130         'GetCOinsBiblio returned right metadata'
131     );
132
133     t::lib::Mocks::mock_preference("OpenURLResolverURL", "https://koha.example.com/");
134     is(
135         $biblio->get_openurl,
136         'https://koha.example.com/?ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Title%201&amp;rft.au=Author%201',
137         'Koha::Biblio->get_openurl returned right URL'
138     );
139
140     t::lib::Mocks::mock_preference("OpenURLResolverURL", "https://koha.example.com/?client_id=ci1");
141     is(
142         $biblio->get_openurl,
143         'https://koha.example.com/?client_id=ci1&amp;ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Title%201&amp;rft.au=Author%201',
144         'Koha::Biblio->get_openurl returned right URL'
145     );
146
147     $schema->storage->txn_rollback;
148 };