Bug 14544: Get rid of GetAllShelves
[koha.git] / t / db_dependent / VirtualShelves.t
1 #!/usr/bin/perl
2
3 # This file is a test script for C4::VirtualShelves.pm
4 # Author : Antoine Farnault, antoine@koha-fr.org
5 # Larger modifications by Jonathan Druart and Marcel de Rooy
6
7 use Modern::Perl;
8 use Test::More tests => 56;
9 use MARC::Record;
10
11 use C4::Biblio qw( AddBiblio DelBiblio );
12 use C4::Context;
13 use C4::Members qw( AddMember );
14
15 use Koha::Virtualshelves;
16
17
18 my $dbh = C4::Context->dbh;
19 $dbh->{RaiseError} = 1;
20 $dbh->{AutoCommit} = 0;
21
22 # Create some borrowers
23 my @borrowernumbers;
24 for my $i ( 1 .. 10 ) {
25     my $borrowernumber = AddMember(
26         firstname =>  'my firstname',
27         surname => 'my surname ' . $i,
28         categorycode => 'S',
29         branchcode => 'CPL',
30     );
31     push @borrowernumbers, $borrowernumber;
32 }
33
34 # Creating some biblios
35 my @biblionumbers;
36 foreach(0..9) {
37     my ($biblionumber)= AddBiblio(MARC::Record->new, '');
38         #item number ignored
39     push @biblionumbers, $biblionumber;
40 }
41
42 #----------------------------------------------------------------------#
43 #
44 #           TESTS START HERE
45 #
46 #----------------------------------------------------------------------#
47
48 use_ok('C4::VirtualShelves');
49
50 #-----------------------TEST Virtualshelf constructor------------------------#
51
52 # creating shelves (could be <10 when names are not unique)
53 my @shelves;
54 for my $i (0..9){
55     my $name= randomname();
56     my $catg= int(rand(2))+1;
57     my $shelf = eval {
58         Koha::Virtualshelf->new(
59             {
60                 shelfname => $name,
61                 category  => $catg,
62                 owner     =>$borrowernumbers[$i],
63             }
64         )->store;
65     };
66     if ( $@ or not $shelf ) {
67         my $valid_name = Koha::Virtualshelf->new(
68             {
69                 shelfname => $name,
70                 category  => $catg,
71                 owner     =>$borrowernumbers[$i],
72             }
73         )->is_shelfname_valid;
74         is( $valid_name, 0, 'If the insert has failed, it should be caused by an invalid shelfname (or maybe not?)' );
75     } else {
76         ok($shelf->shelfnumber > -1, "The shelf $i should have been inserted");
77     }
78     push @shelves, {
79         number => $shelf->shelfnumber,
80         name   => $shelf->shelfname,
81         catg   => $shelf->category,
82         owner  => $borrowernumbers[$i],
83     };
84 }
85
86 #-----------TEST AddToShelf & GetShelfContents &  DelFromShelf functions--------------#
87 # usage : &AddToShelf($biblionumber, $shelfnumber);
88 # usage : $biblist = &GetShelfContents($shelfnumber);
89 # usage : $biblist = GetShelfContents($shelfnumber);
90
91 my %used = ();
92 for my $i (0..9){
93     my $bib = $biblionumbers[int(rand(9))];
94     my $shelfnumber = $shelves[int(rand(9))]->{number};
95     if($shelfnumber<0) {
96         ok(1, 'skip add to list-test for shelf -1');
97         ok(1, 'skip counting list entries for shelf -1');
98         next;
99     }
100
101     my $key = "$bib\t$shelfnumber";
102     my $should_fail = exists($used{$key}) ? 1 : 0;
103     #FIXME We assume here that we have permission to add..
104     #The different permissions could be tested too.
105
106     my ($biblistBefore,$countbefore) = GetShelfContents($shelfnumber);
107     my $status = AddToShelf($bib,$shelfnumber,$borrowernumbers[$i]);
108     my ($biblistAfter,$countafter) = GetShelfContents($shelfnumber);
109
110     if ($should_fail) {
111         ok(!defined($status), 'failed to add to list when we should');
112     } else {
113         ok(defined($status), 'added to list when we should');
114     }
115
116     if (defined $status) {
117         is($countbefore, $countafter - 1, 'added bib to list');  # the bib has been successfully added.
118     } else {
119         is($countbefore, $countafter, 'did not add duplicate bib to list');
120     }
121
122     $used{$key}++;
123 }
124
125 #----------------------- SOME SUBS --------------------------------------------#
126
127 sub randomname {
128     my $rv='';
129     for(0..19) {
130         $rv.= ('a'..'z','A'..'Z',0..9) [int(rand()*62)];
131     }
132     return $rv;
133 }
134
135 $dbh->rollback;