bug 14504: (QA followup) fixing DelItemCheck arguments
[koha.git] / t / db_dependent / Items_DelItemCheck.t
1 use Modern::Perl;
2
3 use C4::Circulation;
4
5 use t::lib::TestBuilder;
6 use t::lib::Mocks;
7
8 use Test::More tests => 9;
9
10 *C4::Context::userenv = \&Mock_userenv;
11
12 BEGIN {
13     use_ok('C4::Items');
14 }
15
16 my $dbh = C4::Context->dbh;
17
18 my $builder = t::lib::TestBuilder->new();
19
20 my $branch = $builder->build(
21     {
22         source => 'Branch',
23     }
24 );
25
26 my $branch2 = $builder->build(
27     {
28         source => 'Branch',
29     }
30 );
31
32 my $category = $builder->build(
33     {
34         source => 'Category',
35     }
36 );
37
38 my $patron = $builder->build(
39     {
40         source => 'Borrower',
41         value  => {
42             categorycode => $category->{categorycode},
43             branchcode   => $branch->{branchcode},
44         },
45     }
46 );
47
48 my $biblio = $builder->build(
49     {
50         source => 'Biblio',
51         value  => {
52             branchcode => $branch->{branchcode},
53         },
54     }
55 );
56
57 my $item = $builder->build(
58     {
59         source => 'Item',
60         value  => {
61             biblionumber  => $biblio->{biblionumber},
62             homebranch    => $branch->{branchcode},
63             holdingbranch => $branch->{branchcode},
64             withdrawn    => 0,       # randomly assigned value may block return.
65             withdrawn_on => undef,
66         },
67     }
68 );
69
70 # book_on_loan
71
72 AddIssue( $patron, $item->{barcode} );
73
74 is(
75     ItemSafeToDelete( $biblio->{biblionumber}, $item->{itemnumber} ),
76     'book_on_loan',
77     'ItemSafeToDelete reports item on loan',
78 );
79
80 is(
81     DelItemCheck( $biblio->{biblionumber}, $item->{itemnumber} ),
82     'book_on_loan',
83     'item that is on loan cannot be deleted',
84 );
85
86 AddReturn( $item->{barcode}, $branch->{branchcode} );
87
88 # book_reserved is tested in t/db_dependent/Reserves.t
89
90 # not_same_branch
91 t::lib::Mocks::mock_preference('IndependentBranches', 1);
92 ModItem( { homebranch => $branch2->{branchcode}, holdingbranch => $branch2->{branchcode} }, $biblio->{biblionumber}, $item->{itemnumber} );
93
94 is(
95     ItemSafeToDelete( $biblio->{biblionumber}, $item->{itemnumber} ),
96     'not_same_branch',
97     'ItemSafeToDelete reports IndependentBranches restriction',
98 );
99
100 is(
101     DelItemCheck( $biblio->{biblionumber}, $item->{itemnumber} ),
102     'not_same_branch',
103     'IndependentBranches prevents deletion at another branch',
104 );
105
106 ModItem( { homebranch => $branch->{branchcode}, holdingbranch => $branch->{branchcode} }, $biblio->{biblionumber}, $item->{itemnumber} );
107
108 # linked_analytics
109
110 { # codeblock to limit scope of $module->mock
111
112     my $module = Test::MockModule->new('C4::Items');
113     $module->mock( GetAnalyticsCount => sub { return 1 } );
114
115     is(
116         ItemSafeToDelete( $biblio->{biblionumber}, $item->{itemnumber} ),
117         'linked_analytics',
118         'ItemSafeToDelete reports linked analytics',
119     );
120
121     is(
122         DelItemCheck( $biblio->{biblionumber}, $item->{itemnumber} ),
123         'linked_analytics',
124         'Linked analytics prevents deletion of item',
125     );
126
127 }
128
129 is(
130     ItemSafeToDelete( $biblio->{biblionumber}, $item->{itemnumber} ),
131     1,
132     'ItemSafeToDelete shows item safe to delete'
133 );
134
135 DelItemCheck( $biblio->{biblionumber}, $item->{itemnumber} );
136
137 my $test_item = GetItem( $item->{itemnumber} );
138
139 is( $test_item->{itemnumber}, undef,
140     "DelItemCheck should delete item if ItemSafeToDelete returns true"
141 );
142
143 # End of testing
144
145 # C4::Context->userenv
146 sub Mock_userenv {
147     return { flags => 0, branch => $branch->{branchcode} };
148 }